Lua随机数?

如何每次运行脚本时生成不同的随机整数?我正在制作一个“不可能的问答”游戏,使用随机数从表中选择一个问题。每次运行脚本时,问题的顺序都是相同的。我还使用 table.remove() 从表中删除已经出现过的问题。然而,即使已经删除了问题,它仍将继续问相同的问题,因为它不是选择一个新的随机数(我正在使用 math.random(1, #Questions) 从“Questions”表中选择一个随机问题)。

    local lives = 3

Questions = {
    {"什么是魔术语?", "lotion"},
    {"有人爱你吗?", "no"},
    {"你有多少根手指?", "10"},
    {"1 + 1等于几?", "window"}
}

function lookForAnswer(ans)
    table.remove(Questions[number])
    local input = io.read() tostring(input)
    if input:lower() == ans then
        return true
    end
    lives = lives - 1
    if lives <= 0 then
        exit()
    end
    return false
end

for i = 1, #Questions do
    number = math.random(1, #Questions)
    local q = Questions[number][1]
    local a = Questions[number][2]
    print(q)
    if lookForAnswer(a) then
        print("正确!\n")
    else
        print("错了!生命值:" .. lives .. "\n")
    end
end

io.read()
点赞
用户635723
用户635723

你需要在调用 math.random() 之前调用 math.randomseed() 来确定你的随机数生成器。使用 os.time() 作为种子值非常常见(math.randomseed(os.time()))。

需要注意的是,math.random() 是确定性函数,因此熵必须来自种子值。如果给种子传递相同的值,则 math.random() 会返回相同的值。由于 os.time() 只有秒级的时间精度,这意味着在一个给定的秒内多次调用该命令将返回相同的值。如果你愿意,可以尝试使用更具熵源的方式进行种子初始化(/dev/random)。

需要澄清的是,如果随机数真的是随机的,你不能保证每次都会得到不同的值。你所能做的只是确保得到相同值的概率足够低。

2014-02-16 06:48:44