1. 程式人生 > 其它 >math.random和shuffle洗牌演算法

math.random和shuffle洗牌演算法

【math.random】

math.random() --返回一個[0, 1)之間的浮點數
math.random(100) --返回一個[1, 100]間的整數
math.random(1, 100) --返回一個[1, 100]間的整數
math.random(20, 30) --返回一個[20, 30]間的整數

 

【什麼時候呼叫math.randomseed(os.time())?】
不需要每次都呼叫, 只需要lua虛擬機器啟動的時候呼叫一次就可以,頻繁呼叫反而容易得到相同的偽隨機序列

math.randomseed(os.time())
math.random() --初始化後需要預呼叫一次

 

【不過有的時候我們反而需要得到相同的偽隨機序列】

# 比如: 戰鬥回放, 幀同步需要保證所有客戶端生成相同的概率這種

# 這個時候我們只要提供相同的seed種子,就能得到相同的偽隨機序列

 

【shuffle洗牌演算法】

function shuffle(arrTb)
    local n = #arrTb
    for i=1,n do
        local r = math.random(n)
        local temp = arrTb[i]
        arrTb[i] = arrTb[r]
        arrTb[r] = temp
    end
end 

 

【參考】

lua math.random() - 吳筱軍 - 部落格園 (cnblogs.com)

lua 隨機數 math.random()和math.randomseed()用法_weixin_30846599的部落格-CSDN部落格

Lua庫函式——math.randomseed()、os.time()的使用_聞人放歌的部落格-CSDN部落格_math.randomseed