【发布时间】:2017-07-20 04:47:09
【问题描述】:
我不确定这是否可能,但我想更改完成“选择”的概率。我有一个类似这样的代码:
({move, bomb})[math.random(2)]
我的目标是让炸弹出现或被选中的频率低于“移动”。这可能吗?
【问题讨论】:
我不确定这是否可能,但我想更改完成“选择”的概率。我有一个类似这样的代码:
({move, bomb})[math.random(2)]
我的目标是让炸弹出现或被选中的频率低于“移动”。这可能吗?
【问题讨论】:
当然。可以做到的一种方法是
( { move, bomb } )[ math.random( 10 ) <= 7 and 1 or 2 ]
你有 70% 选择第一个元素,30% 选择第二个元素。
如果您需要从 4 个元素中进行选择,您可以使用下面的代码
local mRandom = math.random
local objects = { 'object1', 'object2', 'object3', 'object4', }
local prob = { 10, 30, 60, 100 } -- 10% for object1 20%=30%-10% for object2 30%=60%-30% for object3 and 40%=100%-60% for last object.
local mychoice
math.randomseed( os.time() )
local rand = mRandom( 100 )
for i=1, #prob do
if rand <= prob[i] then
mychoice = i
break
end
end
【讨论】:
( { move, bomb } )[ math.random( 100 ) <= X and 1 or 2 ],其中X 属于集合{1,2,3,...,100}。所以你得到X% 选择第一个元素,即move,100%-X% 选择第二个元素,即bomb。