Моя первая игра в ALLEGRO 5 с C++.создание комбинаций препятствий в 2D-скроллер-игре
У игрока есть постоянный ход в правильном направлении. С правого края экрана игрок сталкивается с препятствиями, как треугольники и квадраты. Эти препятствия оживают на правом краю экрана и умирают на левом краю экрана.
Предположим, что X - треугольник, а O - квадрат.
я хочу, чтобы создать их в нескольких комбинациях как
.. {х} {хо} {} {xoox OXXO} {} ахх ... И некоторые вариации (случайные возможно)
И после того, как что я буду рандомизировать происхождение этого шаблона.
SO Я нашел способ реализовать то, что я хотел. Я использовал переключатель() для случайного выбора различных комбинаций. Это работает очень хорошо. Но раз в то время он перекрывал даже после того, как я ввел минимальный зазор 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;
}
}
`
Проблема решена: (Для тех, кто испытал подобное сомнение) Приведенный выше код решает проблему создания случайной комбинации препятствий и случайного создания этих комбинаций. Но проверьте наличие коллизий, если вы не хотите получать совпадающие комбинации.
У вас есть ошибки, как и второе 'еще если (triangle-> GetAlive() == false) ', который должен быть' else if (square-> GetAlive() == false'. – Keeler
Holy moly!: OI - это глупость особого вида. XD Надеюсь, что та же проблема. brb – user3183363
Нет, проблема по-прежнему существует. Как будто вы разрезаете это перекрытие по вертикали от середины, у нас будет две правильные половины треугольника. – user3183363