Как вычислить позиции игроков в гонке
Игра скачки на карте размером 255х255 точек на которой есть трасса в форме беговой дорожки стадиона. У игроков есть координаты местонахождения на карте от 0 до 255 по X и Y. Что бы отслеживать что игрок пробежал круг и финишировал, я сделал 4 зоны не больших зоны вроде чек поинтов. Но теперь мне надо отследить кто из игроков бежит первым кто вторым и т.д. Делать много чек поинтов это очень муторное дело, и выглядит громоздко. Есть какие то другие решения? Вот код для отслеживания чек поинтов.
static const BYTE CheckPoint1[4] = {171,127,186,133}; //X Y MaxX MaxY
static const BYTE CheckPoint2[4] = {124,217,130,232};
static const BYTE CheckPoint3[4] = {68,127,83,133};
static const BYTE CheckPoint4[4] = {124,23,130,38};
static const BYTE CheckFinish[4] = {171,130,186,132};
for (int n = 0; n < 5; n++) //count player
{
if (m_Rider[n].Index == lpObj->Index && m_Rider[n].Finish != true)
{
if (((lpObj->X >= CheckPoint1[0] && lpObj->X <= CheckPoint1[2]) &&
(lpObj->Y >= CheckPoint1[1] && lpObj->Y <= CheckPoint1[3])) || m_Rider[n].CheckPointCount >= 1)
{
if (((lpObj->X >= CheckPoint2[0] && lpObj->X <= CheckPoint2[2]) &&
(lpObj->Y >= CheckPoint2[1] && lpObj->Y <= CheckPoint2[3])) || m_Rider[n].CheckPointCount >= 2)
{
if (((lpObj->X >= CheckPoint3[0] && lpObj->X <= CheckPoint3[2]) &&
(lpObj->Y >= CheckPoint3[1] && lpObj->Y <= CheckPoint3[3])) || m_Rider[n].CheckPointCount >= 3)
{
if (((lpObj->X >= CheckPoint4[0] && lpObj->X <= CheckPoint4[2]) &&
(lpObj->Y >= CheckPoint4[1] && lpObj->Y <= CheckPoint4[3])) || m_Rider[n].CheckPointCount >= 4)
{
if (((lpObj->X >= CheckFinish[0] && lpObj->X <= CheckFinish[2]) &&
(lpObj->Y >= CheckFinish[1] && lpObj->Y <= CheckFinish[3])) && m_Rider[n].CheckPointCount == 4)
{
m_CountFhinishRider++;
m_Rider[n].Finish = true;
m_Rider[n].Position = m_CountFhinishRider;
SetEntranceZone(ATT_FINISH);
}
if (m_Rider[n].CheckPointCount == 3)
{
m_Rider[n].CheckPointCount++;
}
}
if (m_Rider[n].CheckPointCount == 2)
{
m_Rider[n].CheckPointCount++;
}
}
if (m_Rider[n].CheckPointCount == 1)
{
m_Rider[n].CheckPointCount++;
}
}
if (m_Rider[n].CheckPointCount == 0)
{
m_Rider[n].CheckPointCount++;
}
}
}
}
Источник: Stack Overflow на русском