Моя первая игра в ALLEGRO 5 на c++.
У него есть игрок, который постоянно движется в правильном направлении. С правого края экрана игрок сталкивается с препятствиями в виде треугольников и квадратов. Эти препятствия оживают на правом краю экрана и умирают на левом краю экрана.
Предположим, что X — треугольник, а O — квадрат.
я хочу создать их в нескольких комбинациях, например
..{x} {xo} {xoox} {oxxo} {oxx}... И некоторые варианты (возможно, случайные)
И после этого я рандомизирую появление этих шаблонов.
Итак, я нашел способ реализовать то, что хотел. Я использовал switch() для случайного выбора различных случаев комбинации. Это работает очень хорошо. Но время от времени он перекрывается даже после того, как я ввел минимальный зазор xoff
Вот код:
`//I have used srand(time(NULL)); once in main function too.
if(state == PLAYING)
{
ball->Moveball();
ball->Jumpball();
//Camera-----------
ball->Cameraupdate();
al_identity_transform(&camera);
al_translate_transform(&camera,-Cameraposition[0],-Cameraposition[1]);
al_use_transform(&camera);
if(rand() % 200==0)
{
xoff+=200;// to introduce a minimum gap between them but this also fail once in a while.
int ch;
ch=rand()%4;
switch(ch)
{
case 0:
//T
triangle = new Triangle(850 + Cameraposition[0]+xoff,319);
objects.push_back(triangle);
triangle->SetAlive(true);
break;
case 1:
//TT
triangle = new Triangle(850 + Cameraposition[0]+xoff,319);
objects.push_back(triangle);
triangle->SetAlive(true);
triangle = new Triangle(850 +30+ Cameraposition[0]+xoff,319);
objects.push_back(triangle);
triangle->SetAlive(true);
break;
case 2:
//S
square = new Square(850 + Cameraposition[0]+xoff,310);
objects.push_back(square);
square->SetAlive(true);
break;
case 3:
//SS
square = new Square(850 + Cameraposition[0]+xoff,310);
objects.push_back(square);
square->SetAlive(true);
square = new Square(850 +82+ Cameraposition[0]+xoff,310);
objects.push_back(square);
square->SetAlive(true);
break;
}
}
`
Проблема решена: (Для тех, у кого возникло подобное сомнение) Вышеприведенный код решает проблему создания случайных комбинаций препятствий и генерации этих комбинаций случайным образом. Но проверяйте наличие коллизий, если вы не хотите получать перекрывающиеся комбинации.
else if(triangle->GetAlive() == false)
, который должен бытьelse if(square->GetAlive() == false
. - person Keeler   schedule 11.01.2014