我正在制作一款使用程序生成关卡的游戏,在测试时我经常想要重现关卡。现在我还没有采取任何方法来保存关卡,但我认为一个更简单的解决方案是重用 Python 的随机模块使用的种子。但是,我尝试同时使用 random.seed()
和 random.setstate()
,但似乎都无法可靠地重现结果。奇怪的是,如果我重复使用种子,有时我会连续几次获得相同的水平,但它永远不会 100% 可靠。我是否应该正常保存关卡(作为包含其信息的文件)?
编辑:
感谢大家的帮助。事实证明,我的问题来自于我从 Pygame 中的组中随机选择 Sprite ,这些 Sprite 是在无序字典 View 中检索到的。我更改了我的代码以避免在该部分使用 Pygame 的 Sprite 组,现在它可以完美运行。
最佳答案
random.seed
应该可以正常工作,但请记住它不是线程安全的 - 如果同时在其他地方使用随机数,您可能会在两次运行之间得到不同的结果。
在这种情况下,您应该使用 random.Random()
的实例来获取私有(private)随机数生成器
>>> import random
>>> seed=1234
>>> n=10
>>> random.Random(seed).sample(range(1000),n)
[966, 440, 7, 910, 939, 582, 671, 83, 766, 236]
>>>
对于给定的种子总是返回相同的结果
关于python - 在 Python 中重现随机生成关卡的最简单方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2143463/