所以在游戏中你可以创建"随机"世界有种子选择。我不明白的是:如果你填上同样的种子,怎么能得到同样的结果?我会说你必须存储每一个结果,但这很难实现。我读过有关PRNG(伪随机数发生器)的一些内容。每个结果都在PRNG中确定。但我不知道如何在python中实现这一目标
答案 0 :(得分:1)
只需使用random.seed
:
import random
random.seed(42)
random.random() # 0.6394267984578837
该程序将始终将该值作为第一个生成的随机数返回,因为种子始终是相同的。
答案 1 :(得分:1)
让我们采取一个简单的RNG实施:
class SillyRand:
"""Don't try this at home!"""
def __init__(self, seed):
self.current = self.calc(seed)
def get(self):
current_ = self.current
self.current = self.calc(current_)
return current_
def calc(self, prev):
return ((prev * 7) + 17) % 100
此实现包含许多缺陷,但它应足以证明该概念。 它使用seed
作为序列中第一个随机数的前身。
如果我们运行这个:
print("Seed is 123")
r = SillyRand(123)
for i in range(10):
print(r.get())
输出将是:
Seed is 123
78
63
58
23
78
63
58
23
78
63
用不同的种子......
print("Seed is 42")
r = SillyRand(42)
for i in range(10):
print(r.get())
我们得到一个不同的序列:
Seed is 42
11
94
75
42
11
94
75
42
11
94
但同样的种子每次运行都会给出相同的序列。
答案 2 :(得分:0)
实际上很简单,首先你必须导入随机库,然后你必须使用游戏的种子值手动设置种子:
import random
your_seed = 1234
random.seed(seed)
random.randint(1, 10)
答案 3 :(得分:0)
PRNG不会创建“随机”数字,但在使用相同种子时始终生成相同的数字。因此,如果你根据这些数字做某事,当你输入相同的种子时,你总会这样做。
在python中,random
模块将获取种子,请参阅the documentation。如果您不提供种子,则选择当前系统时间,因此它似乎是随机的,并且通常是随机的。
示例可以帮助您了解这与级别创建的关系。
import random
elements = ["Enemy1", "Enemy2", "Powerup", "Hazard", "empty", "empty", "empty"]
level_length = 100
seed = 100
random.seed(100)
level = []
for i in range(level_length):
level.append(random.choice(elements))
print(level)
这将生成一个随机级别 - 除了它不是随机的,而是依赖于种子。如果您选择不同的种子,您将获得不同的级别。但是如果你选择相同的种子,你将得到相同的水平。
当然,这只是一维水平,但二维或三维水平相同。