1

Тема: модель руху на кільцевій розвязці[Borland C++ Builder]

привіт
виникла така проблема при моделюванні,в певний момент часу машинка(компонент Shape) зависає на кільці і не рухається, так триває до тих пір поки всі машинки не зависнуть...
машинки створені динамічно і їх кількість = 5
вибір дороги з якої вона виїжджає виконує рандом, це ж саме стосується на яку дорогу повертати
P.S. проект внизу,будь ласка, хоча б подивіться і приблизно підскажіть що робити..

Post's attachments

Курсова.zip 876.15 kb, 241 downloads since 2015-05-25 

2

Re: модель руху на кільцевій розвязці[Borland C++ Builder]

1. Публікуйте код тут в теґ [ code ], бо не дуже цікаво, щось там качати і потім розбиртись (файл можете не видаляти)
2. Помилки такого типу, зазвичай дебажать дебагером. Вам треба спіймати момент, коли воно зависає і чому, я би рекомендував (якщо у вас нема там), додати щось типу логера. Створити функцію, типу

Log(S: String) {
  TextMemo = TextMemo + S;
//або
  TextStream = TextStream + S;
//або, як там в сях робиться конкатенація
}

А той текст мемо виводити чи в файл, чи на форму, чи в глобальну змінну, чи повертати прямо з функції.
а далі просто додаєте по всьому проекту

Log("Робимо щось");

і так далі, і по логу дивісться де саме зависає. Далі вжей йдіть туди і розбирайтесь, або питайте на форумі, прикладуйте саме той шмат коду.

3

Re: модель руху на кільцевій розвязці[Borland C++ Builder]

Та справа в тому що там коду на 600 рядків, тому скинув проект...

4 Востаннє редагувалося koala (25.05.2015 16:37:31)

Re: модель руху на кільцевій розвязці[Borland C++ Builder]

А відступів немає, імена криві і функції повторюються, бо писали для себе, а не для когось?

5

Re: модель руху на кільцевій розвязці[Borland C++ Builder]

roctik1996 написав:

Та справа в тому що там коду на 600 рядків, тому скинув проект...

то киньте той уривок коду де ви вважаєте є проблема

6

Re: модель руху на кільцевій розвязці[Borland C++ Builder]

Betterthanyou написав:

то киньте той уривок коду де ви вважаєте є проблема

вот саме та частина має найбільше рядків, але ок))

void Map1(int l, int t, int w, int h, int num)
{
if (alpha[num] == 0)
alpha[num] = 360;
if(T1[num]==1)//якщо рух починається з дороги №1
{       if(T2[num]==3||T2[num]==4||T2[num]==5)//--------------------??????????????????????????
       {
        if(t>=240&&q[num]==1)
        {
        Circle2(num);//рух по колу
        }
       }
        if(T2[num]==2)
       {
        if(t>=215&&q[num]==1)
        {
        Circle1(num);
        }
       }

        //---поворот на дорогу 3
        if(T2[num]==3)
        {
        if(q[num]==1)
        shape[num]->Top++;

        if((l>=720-5&&l<=720+5)&&(t>=368-5&&t<=368+5))
        {
        q[num]=0;
        }
        if(q==0)
        shape[num]->Top++;

        if(t+w>=583)
        {
        Track(num);
        }
        }
        //---поворот на дорогу 2
        if(T2[num]==2)
        {
        if(q[num]==1)
        shape[num]->Top++;
        if((l>=630&&l<=645)&&(t>=296))
        {
        q[num]=0;
        }
        if(q==0)
        {
        shape[num]->Left--;
        }

        if(l+w<=345)
        {
        Track(num);
        }
        }
        //---поворот на дорогу 4
        if(T2[num]==4)
        {
        if(q[num]==1)
        shape[num]->Top++;

        if((l>=792-5&&l<=792+5)&&(t>=320-2&&t<=320+2))
        {
        q[num]=0;
        }
        if(q[num]==0)
        shape[num]->Left++;

        if(l+w>=1120)
        {
        Track(num);
        }
        }
        //---поворот на дорогу 5
        if(T2[num]==5)
        {
         if(q[num]==1)
        shape[num]->Top++;

        if((l>=680-5&&l<=680+5)&&(t>=344-2&&t<=344+2))
        {
        q[num]=0;
        }
        if(q[num]==0)
        shape[num]->Left--;
        shape[num]->Top++;

        if(t+w>=584)
        {
        Track(num);
        }
        }
}

if(T1[num]==3)//якщо рух починається з дороги №3
{
        if(T2[num]==1||T2[num]==2||T2[num]==5)
        {
        if(t<368&&q[num]==1)
        {
        Circle2(num);//рух по колу
        }
        }
         if(T2[num]==4)
        {
        if(t<392&&q[num]==1)
        {
        Circle1(num);//рух по колу
        }
        }
        //---поворот на дорогу 1
        if(T2[num]==1)
        {
        if(q[num]==1)
        shape[num]->Top--;
        if((l>=740-5&&l<=740+5)&&(t>=244-5&&t<=244+5))
        {
        q[num]=0;
        }
        if(q==0)
        {
        shape[num]->Top--;
        }

        if(t<=0)
        {
        Track(num);
        }
        }
        //---поворот на дорогу 2
        if(T2[num]==2)
        {
        if(q[num]==1)
        shape[num]->Top--;
        if((l>=666-5&&l<=666+5)&&(t>=298-5&&t<=298+5))
        {
        q[num]=0;
        }
        if(q==0)
        {
        shape[num]->Left--;
        }
        if(l+w<=333 && q==0)
        {
        Track(num);
        }
        }
        //---поворот на дорогу 4
        if(T2[num]==4)
        {
        if(q[num]==1)
        shape[num]->Top--;

        if((l>=816-5&&l<=816+5)&&(t>=320-2&&t<=320+2))
        {
        q[num]=0;
        }
        if(q[num]==0)
        shape[num]->Left++;

        if(l+w>=1120)
        {
        Track(num);
        }
        }
        //---поворот на дорогу 5
        if(T2[num]==5)
        {
        if(q[num]==1)
        shape[num]->Top--;

        if((l>=680-5&&l<=680+5)&&(t>=344-2&&t<=344+2))
        {
        q[num]=0;
        }
        if(q[num]==0)
        {shape[num]->Left--;
        shape[num]->Top++;}

        if(l+w<=452)
        {
        Track(num);
        }
        }
}

if(T1[num]==2)//якщо рух починається з дороги №2
{         if(T2[num]==1||T2[num]==4||T2[num]==3)
         {
        if(l>=662&&q[num]==1)
        {
        Circle2(num);
        }
        }
        if(T2[num]==5)
        {
          if(l>=640&&q[num]==1)
          {
          Circle1(num);
          }
        }

        //---поворот на дорогу 3
        if(T2[num]==3)
        {
        if(q[num]==1)
        shape[num]->Left++;

       if((l>=720-5&&l<=720+5)&&(t>=368-5&&t<=368+5))
        {
        q[num]=0;
        }
        if(q[num]==0)
        shape[num]->Top++;

        if(t+w>=583)
        {
        Track(num);
        }
        }

        //---поворот на дорогу 1
        if(T2[num]==1)
        {
        if(q[num]==1)
        shape[num]->Left++;
        if((l>=740-5&&l<=740+5)&&(t>=244-5&&t<=244+5))
        {
        q[num]=0;
        }
        if(q[num]==0)
        shape[num]->Top--;

        if(t<=0)
        {
        Track(num);
        }
        }

        //---поворот на дорогу 4
        if(T2[num]==4)
        {
        if(q[num]==1)
        shape[num]->Left++;

        if((l>=792-5&&l<=792+5)&&(t>=320-2&&t<=320+2))
        {
        q[num]=0;
        }
        if(q[num]==0)
        shape[num]->Left++;

        if(l+w>=1120)
        {
        Track(num);
        }
        }

        //---поворот на дорогу 5
        if(T2[num]==5)
        {
        if(q[num]==1)
        shape[num]->Left++;

        if((l>=660-5&&l<=660+5)&&(t>=360-2&&t<=360+2))
        {
        q[num]=0;
        }
        if(q[num]==0)
        {shape[num]->Left--;
        shape[num]->Top++; }

        if(t+w>=584)
        {
        Track(num);
        }
        }
}
if(T1[num]==4)//якщо рух починається з дороги №4
{        if(T2[num]==1)
        {
        if(l<=816&&q[num]==1)
        {
        Circle1(num);//рух по колу
        }
        }

         if(T2[num]==2||T2[num]==3||T2[num]==5)
        {
        if(l<=792&&q[num]==1)
        {
        Circle2(num);//рух по колу
        }
        }

        //---поворот на дорогу 1 !!!!!!!Не повертає
        if(T2[num]==1)
        {
        if(q[num]==1)
        shape[num]->Left--;

        if((l>=744-5&&l<=744+5)&&(t>=224-5&&t<=224+5))
        {
        q[num]=0;
        }
        if(q[num]==0)
        shape[num]->Top--;

        if(t<=0)
        {
        Track(num);
        }
        }

        //---поворот на дорогу 2
        if(T2[num]==2)
        {
        if(q[num]==1)
        shape[num]->Left--;
        if((l>=666-5&&l<=666+5)&&(t>=298-5&&t<=298+5))
        {
        q[num]=0;
        }
        if(q[num]==0)
        {
        shape[num]->Left--;
        }
        if(l+w<=333 && q[num]==0)
        {
        Track(num);
        }
        }

        //---поворот на дорогу 3
        if(T2[num]==3)
        {
        if(q[num]==1)
        shape[num]->Left--;

        if((l>=720-5&&l<=720+5)&&(t>=368-5&&t<=368+5))
        {
        q[num]=0;
        }
        if(q[num]==0)
        shape[num]->Top++;

        if(t+w>=584)
        {
        Track(num);
        }
        }

        //---поворот на дорогу 5
        if(T2[num]==5)
        {
        if(q[num]==1)
        shape[num]->Left--;

        if((l>=680-5&&l<=680+5)&&(t>=344-2&&t<=344+2))
        {
        q[num]=0;
        }
        if(q[num]==0)
        {shape[num]->Left--;
        shape[num]->Top++; }

        if(t+w>=584)
        {
        Track(num);
        }
        }
}
if(T1[num]==5)//якщо рух починається з дороги №5
{        if(T2[num]==3)
         {
        if(l>=672&&q[num]==1)
        {
        Circle1(num);//рух по колу
        }
        }
         if(T2[num]==1||T2[num]==2||T2[num]==4)
         {
        if(l>=696&&q[num]==1)
        {
        Circle2(num);//рух по колу
        }
        }


        //---поворот на дорогу 1
        if(T2[num]==1)
        {
        if(q[num]==1)
        {shape[num]->Left++;
        shape[num]->Top--;}
        if((l>=740-5&&l<=740+5)&&(t>=244-5&&t<=244+5))
        {
        q[num]=0;
        }
        if(q[num]==0)
        shape[num]->Top--;

        if(t<=0)
        {
        Track(num);
        }
        }

        //---поворот на дорогу 2
        if(T2[num]==2)//тута баг!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
        {
        if(q[num]==1)
        {shape[num]->Left++;
        shape[num]->Top--;}
        if((l>=666-5&&l<=666+5)&&(t>=298-5&&t<=298+5))
        {
        q[num]=0;
        }
        if(q[num]==0)
        {
        shape[num]->Left--;
        }
        if(l+w<=333 && q[num]==0)
        {
        Track(num);
        }
        }

        //---поворот на дорогу 3
        if(T2[num]==3)
        {
        if(q[num]==1)
        {shape[num]->Left++;
        shape[num]->Top--;}

        if((l>=720-5&&l<=720+5)&&(t>=392-5&&t<=392+5))
        {
        q[num]=0;
        }
        if(q[num]==0)
        shape[num]->Top++;

        if(t+w>=583&& q[num]==0)
        {
        Track(num);
        }
        }

        //---поворот на дорогу 4
        if(T2[num]==4)
        {
        if(q[num]==1)
        {shape[num]->Left++;
        shape[num]->Top--;}

        if((l>=792-5&&l<=792+5)&&(t>=320-2&&t<=320+2))
        {
        q[num]=0;
        }
        if(q[num]==0)
        shape[num]->Left++;

        if(l+w>=1120)
        {
        Track(num);
        }
        }
}

}

7

Re: модель руху на кільцевій розвязці[Borland C++ Builder]

вот саме тут десь помилка