Как вычислить позиции игроков в гонке

Рейтинг: 0Ответов: 0Опубликовано: 05.08.2023

Игра скачки на карте размером 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++;
                }
            }
        }
    }

Ответы

Ответов пока нет.