Lua 中 math.random() 和 math.randomseed() 的区别

Difference between math.random() and math.randomseed() in Lua

我正在使用 Corona SDK 开发游戏,Lua 作为编程语言。从 table 获取随机数时,我很困惑使用以下哪一个?

math.random()
math.randomseed()

谁能详细说明一下它们之间的确切区别?所以我可以使用我的案例中最好的一个。

如果在调用math.random()时需要相同的序列,则必须在调用math.random()之前设置math.randomseed(same number every time before calling)

如果您想要不同的随机数序列,请在调用 math.random() 之前传递 math.randomseed(os.time()) 因为 os.time() 会 return 以秒为单位的时间,所以它会每次都不一样。

请参考以下 link 并查看那里的示例。

https://docs.coronalabs.com/api/library/math/randomseed.html

math.random 给你随机数。您可能会在需要随机数的程序中多次调用它。

math.randomseed 确定从哪里开始由 math.random 给出的随机数序列。您可能只会在需要随机数的程序中调用 一次

这似乎是一个常见的误解,认为每次调用 math.random 之前都需要调用 math.randomseed。这是 错误的 并且会打败 math.random.

的随机性

当您执行一个使用 math.random 的程序时,如果不设置 math.randomseed,它通常会产生相同的一组随机数。这是因为 math.randomseed 负责为 math.random 产生的随机数设置默认值 seed(或算法生成器)。

这种一致性显然不是随机的。请允许我举个例子 - 首先转到 Lua Demo Website 然后插入这段代码:

for i = 1,10 do
print(math.random())
end

继续持续点击 运行 按钮,看看解释器如何每次都产生相同的数字。但是,要更改生成随机数的 'seed',我们只需将 'seed' 设置为当前时间(因为当前时间从不重复)

这次上网站多次执行这段代码:

math.randomseed(os.time())
for i = 1,10 do
print(math.random())
end

您现在应该注意每次获得不同数字的方式。