我在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;
}
}
`
问题解决了:(对于那些经历过类似疑问的人)上面的代码解决了创建随机障碍组合并随机生成这些组合的问题。但如果您不想获得重叠组合,请检查是否存在碰撞。
答案 0 :(得分:0)
只需添加另一个for循环:
void createObstacles(int numObstacles)
{
for(int i = 0; i < numObstacles; i++)
{
if(rand() % 2 == 0)
{
// Create a triangle.
}
else
{
// Create a square.
}
}
}
每次想要创建障碍物时调用此方法,通过更改参数numObstacles
来控制一次释放的对象数。
您现在可以:
if(rand() % 200 == 0)
{
// Create anywhere from 1 to maxToCreate (which is 4) obstacles at a time.
const int maxToCreate = 4;
int numToCreate = (rand() % maxToCreate) + 1;
// Call the function to make some obstacles.
createObstacles(numToCreate);
}
由于形状重叠,要么修复初始化代码,要么按照
的方式初始化它们