【发布时间】:2018-11-12 17:00:36
【问题描述】:
我有一个启动许多客户端进程的 bash 脚本。这些是 AI 游戏玩家,我用来测试一个有很多玩家的游戏,大约有 400 个连接。
我遇到的问题是AI播放器使用
srand( time(nullptr) );
但是如果所有玩家几乎在同一时间开始,他们将经常收到相同的 time() 值,这意味着他们都在同一个 rand() 序列上。
测试过程的一部分是确保如果大量客户端几乎同时尝试连接,服务器可以处理它。
我曾考虑过使用类似的东西
srand( (int) this );
或类似的,依靠每个实例都有一个唯一的内存地址的想法。
还有其他更好的方法吗?
【问题讨论】:
-
请作为回复提交
-
警告:使用
rand()is considered harmful,强烈建议您使用适当的random number generator facility in the Standard Library,它会产生实际随机值。您使用time(NULL)作为随机数种子意味着如果在同一秒内运行,这将产生相同的结果,并且在许多平台上rand()是barely random at all。 -
“他们会经常收到相同的时间”——或者,他们甚至可以choose good starting times。
标签: c++ random random-seed