1. 程式人生 > >lua 不呼叫外部函式自己實現獲取隨機數

lua 不呼叫外部函式自己實現獲取隨機數

local random = {}

local a = 25214903917   -- These Values for a and c are the actual values found
local c = 11            -- in the implementation of java.util.Random(), see link
local previous = 0

-- 接收一個整數 seed 作為隨機序列種子。
function random.randomseed(seed)
    previous = seed
end

local index = 0

-- 1> 無參呼叫, 產生 (0,1) 之間的浮點隨機數
-- 2> 只有引數 n, 產生 1-n 之間的整數
-- 3> 有兩個引數 n, m, 產生 n-m 之間的隨機整數

function random.random( ... )
    -- 獲取隨機數
    local r = a * previous + c
    previous = r
    if r < 0 then
        r = -r
    end
    -- 獲取引數個數
    local arg = { ... }
    local count = 0  
    for k,v in pairs(arg) do
        count = count + 1
    end
    -- 根據引數個數來確定取值
    if count == 0 then
        r =  r%1000  -- 取0到1000的隨機數,可按照自己意願隨意取值
        r =  r * 1.0
        while true do
            r =  r/10
            if r < 1 then
                break
            end
        end
    elseif count == 1 then
        if arg[1] < 1 then
            error "get random number error"
        elseif arg[1] == 1 then
            r = 1
        else
            r = 1 + r%(arg[1]-1)
        end
    elseif count == 2 then
        if arg[2] < arg[1] then
            error "get random number error"
        elseif arg[2] == arg[1] then
            r = arg[1]
        else
            r = arg[1] + r%(arg[2]-arg[1])
        end
    else
        error "get random number error"
    end
    -- print (index,r)
    index = index+1
    return r
end

return random