我正在开发一款手机游戏,我需要创造一种以完全相同的方式玩相同关卡的可能性。这听起来很容易,因为我知道随机生成器的种子,为此目的应该是一样的。
后来出现了这个问题,当我在许多教程中将std::mt19937
与std::uniform_int_distribution
一起使用时。正如在另一个问题中注意到的那样,平台之间的随机数分布不一致,而引擎是一致的(如果它基于数学算法,它怎么会有所不同?
我没有太注意这个问题,只是在没有发行版的情况下使用std::mt19937
。
如果对数字分配没有特殊要求,它是否是一种正确的使用方式?
std::mt19937
产生 [0, 232-1] 范围内的统一随机数。它实现了Mersenne Twister算法,并保证在实现过程中提供可重复的结果。
如果您需要不同的范围,则需要以某种方式将 [0, 232-1] 减小到所需的范围。std::uniform_int_distribution
是执行此操作的便捷工具(但不保证跨实现的可移植性)。
随机数生成器std::mt19937
将为任何平台生成相同的值,但唉,标准允许std::uniform_int_distribution
灵活。
所以你需要自己做改造,唉。