python - 在 Python 中重现随机生成关卡的最简单方法是什么?

标签 python random pygame

我正在制作一款使用程序生成关卡的游戏,在测试时我经常想要重现关卡。现在我还没有采取任何方法来保存关卡,但我认为一个更简单的解决方案是重用 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/

相关文章:

c - Linux 字符设备驱动程序返回骰子 - 通过 read() 命令访问

c - 为什么drand48()和srand48(int seed)的名称中有数字48?

python - seaborn/matplotlib 中的直方图显示 x 轴上的所有分箱数据索引

python 3 "Too many arguments"?

python - 停用环境后在 Anaconda Prompt 中无法识别 conda

python - 尝试在 Windows (x64) 上安装 Python bcrypt 时出现的大量问题

c - 生成不重复的随机数。我的逻辑正确吗?

python - Pygame 显示更新故障?

python - Pygame 将 2 个表面连接在一起

eclipse - 如何让 Pygame 与 Pydev 一起工作?