67 lines
1.3 KiB
Lua
67 lines
1.3 KiB
Lua
Random = {}
|
|
|
|
local floor = math.floor
|
|
local seed = 0
|
|
|
|
local function random()
|
|
local r = seed
|
|
local m = 123459876
|
|
if r < m then
|
|
r, m = m, r
|
|
end
|
|
local res = 0
|
|
local shift = 1
|
|
local b
|
|
while r ~= 0 do
|
|
b = (r % 2 + m % 2) == 1 and 1 or 0
|
|
res = shift * b + res
|
|
shift = shift * 2
|
|
r = floor( r * 0.5)
|
|
m = floor( m * 0.5)
|
|
end
|
|
local k = floor(res / 127773)
|
|
r = 16807 * (res - k * 127773) - 2836 * k
|
|
if r < 0 then
|
|
r = r + 2147483647
|
|
end
|
|
seed = r
|
|
return r
|
|
end
|
|
function Random.SetSeed(sd)
|
|
seed = sd
|
|
end
|
|
|
|
function Random.GetSeed()
|
|
return seed
|
|
end
|
|
|
|
--随机0-1
|
|
function Random.Range01()
|
|
local var = random() / 2147483647
|
|
BattleLogManager.Log(
|
|
"random",
|
|
"seed", seed)
|
|
return var
|
|
end
|
|
|
|
--随机v1-v2
|
|
function Random.Range(v1, v2)
|
|
if v2 > v1 then
|
|
return Random.Range01()*(v2-v1)+v1
|
|
elseif v1 > v2 then
|
|
return Random.Range01()*(v1-v2)+v2
|
|
else
|
|
return v1
|
|
end
|
|
end
|
|
|
|
--随机v1-v2 返回整数
|
|
function Random.RangeInt(v1, v2)
|
|
if v2 > v1 then
|
|
return floor(Random.Range01()*(v2-v1) + 0.5)+v1
|
|
elseif v1 > v2 then
|
|
return floor(Random.Range01()*(v1-v2) + 0.5)+v2
|
|
else
|
|
return v1
|
|
end
|
|
end |