我一直在努力创造一个" 1D射击游戏"用c ++打印。我的问题是我试图在随机时刻从列表中产生敌人,我也想让它随机出现在敌人产生的地方(屏幕左侧或右侧)。
这似乎没有完全奏效,因为我似乎从一侧得到了一群连续的敌人,只有在从左侧来的所有敌人被杀之后,右翼的敌人才会出现。
我似乎从来没有从左边得到一对夫妇,而在相似的时间,有一对夫妇来自右边。它总是一个或另一个。 除此之外,一旦敌人产生,其余的似乎几乎全部产生,突然间没有任何产卵。这种模式似乎是可预测和错误的。
这是我的方法,每次在游戏循环中调用(游戏循环负责在每次迭代时调用srand(time(NULL)),然后调用此函数。
void Enemy::spawnEnemy()
{
if (enemList.size() < 5)
{
if (!(rand() % 3))
{
if (!(rand() % 2))
{
Enemy * newEnemy = new Enemy(worldWidth, 'l');
enemList.push_front(newEnemy);
}
else
{
Enemy * newEnemy = new Enemy(0, 'r');
enemList.push_front(newEnemy);
}
}
}
}
非常感谢您提前。我真的希望有人可以解决这个问题,因为我一直在努力寻找答案!
答案 0 :(得分:4)
不要在每个循环中调用srand
。您应该只播种一次,然后拨打rand()
以获取随机数。
由于您标记了C ++ 11,因此您应该使用新的<random>
标头生成随机数字:
#include <random>
std::random_device rd;
std::mt19937 gen(rd()); // seed the random_device, only do this _once_
...
//generating a random integer:
std::uniform_real_distribution<> distribution(1, 3); // create a distribution to pick from ( 1 - 3)
int random = distribution(gen);