2014-02-16 2 views
0

Как создать случайное целое число, которое отличается при каждом запуске скрипта? В настоящее время я делаю «невозможную викторину», которая использует случайное число, чтобы выбрать вопрос из таблицы. Каждый раз, когда я запускаю скрипт, вопросы находятся в одном порядке. Я также использую table.remove(), чтобы удалить вопрос из таблицы после его запроса. Тем не менее, он продолжает задавать тот же вопрос, как только он был удален, потому что он не выбирает новое случайное число (я использую math.random (1, #Questions), чтобы выбрать случайный вопрос из таблицы «Вопросы» .)Lua случайное число?

local lives = 3 

Questions = { 
    {"What is the magic word?", "lotion"}, 
    {"Does anyone love you?", "no"}, 
    {"How many fingers do you have?", "10"}, 
    {"What is 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("Correct!\n") 
    else 
     print("WRONG! Lives: " .. lives .. "\n") 
    end 
end 

io.read() 
+2

Попробуйте оба взглянуть на [Справочное руководство Lua] (http://www.lua.org/manual/5.1/manual.html) и вызывать ['math.randomseed (os.time())'] (http://www.lua.org/manual/5.1/manual.html#pdf-math.randomseed) в начале вашей программы. С наилучшими пожеланиями – MBlanc

ответ

2

Вы хотите, чтобы семя ваш генератор случайных чисел, вызвав math.randomseed() перед вызовом Math.random(). Это довольно часто используют os.time() в качестве начального значения (math.randomseed (os.time()).

Важно отметить, что math.random() детерминирована так энтропия должна поступать из значения семени. Если вы передадите одно и то же значение семени, вы получите одинаковые значения math.random(). С os.time() имеет разрешение до нескольких секунд это означает, что если вы вызовете команду несколько раз за определенную секунду, вы получите те же значения обратно. Вы можете попробовать использовать больше энтропийных источников для посева (/ dev/random), если хотите.

И просто для того, чтобы уточнить, вы не можете гарантировать, что значения будут отличаться каждый раз, если они действительно случайны. Все, что вы можете сделать, это убедиться, что существует достаточно низкая вероятность того, что вы получите одинаковые значения.

Удачи вам.

Смежные вопросы