math.random和shuffle洗牌演算法
阿新 • • 發佈:2022-03-25
【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