【发布时间】:2018-11-26 06:24:40
【问题描述】:
在一场关于网络游戏的辩论中,一位用户建议对客户端和服务器对象使用相同的随机种子,这样即使敌人在服务器上随机移动,客户端也会以相同的方式移动。
起初我想争辩说,相同的种子并不能保证每个平台上的随机结果都是一致的;并且这种网络方法将非常幼稚。但对种子的了解不够,我无法确定。
为了论证,假设我们使用 C++ 编码并使用标准的 rand() 和 srand() 函数。
【问题讨论】:
-
如果你使用Mersenne Twister,每次都是一样的。
-
这仅(可能)在客户端和服务器使用相同的 RNG 算法时有效。 C++ 标准当然不能保证
rand()会这样做。 -
@wally:从文档来看,尚不清楚情况是否如此。 “基于”,以及奇怪的注释:“需要第 10000 次连续调用默认构造的 std::mt19937 才能产生值 4123659995”
-
正如 wally 所提到的,这适用于
<random>标头中的特定 RNG。请注意,尽管分布不以相同的方式工作,并且是实现定义的。因此,您需要定义自己的发行版。 -
@Jarod42 谈了in this video