rand%以可预测的模式生成我的所有实体
rand% spawning all my entities in predictable pattern
我一直在尝试用c++创建一个带有指纹的"1D射击游戏"。我的问题是,我试图在随机时刻从列表中产生敌人,我还想让它在敌人产生的地方(屏幕的左侧或右侧)随机产生。
这似乎并没有完全奏效,因为我似乎从一侧得到了一连串连续的敌人,只有在所有来自左侧的敌人被杀死后,来自右侧的敌人才会出现。
我似乎从来没有在类似的时间看到过一对来自左边的情侣和一对来自右边的情侣。总是非此即彼。除此之外,一旦敌人产卵,其他敌人似乎几乎同时产卵,突然之间就没有产卵了。这种模式似乎是可预测的,也是错误的。
这是我的方法,它在游戏循环中每次都被调用(游戏循环负责在每次迭代中调用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);
}
}
}
}
事先非常感谢。我真的希望有人能解决这个问题,因为我一直在努力寻找答案!
不要每次循环都调用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);
相关文章:
- 我的神经网络不起作用 [XOR 问题]
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 我的字符计数代码计算错误.为什么
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- cmake在我的项目中所需的所有静态库都不成功
- 为什么我的代码在输出中增加了93天
- 我的简单if-else语句是如何无法访问的代码
- 为什么我的for循环不能正确获取argv
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- 0-1背包代码中的错误.我的代码中有什么错误
- 当我的阵列太大时出现分段错误
- 如何确认我的constexpr表达式实际上已经在编译时执行
- 为什么二进制搜索在我的测试中不起作用
- 如何指定我希望我的LIB链接到的DLL文件?-Visual Studio 2019
- 我的代码中有错误吗?使用BGI图形的C++代码对我不起作用
- 当我在main中声明了我的2d数组时,为什么我的程序会退出
- OpenGL在启用深度测试时不会丢弃我的碎片
- 为什么我的 std::ref 无法按预期工作?
- 我如何访问QSceneloader创建的实体树
- rand%以可预测的模式生成我的所有实体