我正在用lua语言编写一个使用Corona SDK的游戏.我很难为这样的系统提出逻辑; 我有不同的项目.我想要一些物品有1/1000的机会被选中(一个独特的物品),我想要一些有1/10,一些2/10等. 我在考虑
我有不同的项目.我想要一些物品有1/1000的机会被选中(一个独特的物品),我想要一些有1/10,一些2/10等.
我在考虑填充一张桌子并挑选一个随机物品.例如,我将100个“X”项添加到表中,而不是1个“Y”项.因此,从[0,101]中随机选择我实现了我想要的东西,但我想知道是否有其他方法可以做到这一点.
items = { Cat = { probability = 100/1000 }, -- i.e. 1/10 Dog = { probability = 200/1000 }, -- i.e. 2/10 Ant = { probability = 699/1000 }, Unicorn = { probability = 1/1000 }, } function getRandomItem() local p = math.random() local cumulativeProbability = 0 for name, item in pairs(items) do cumulativeProbability = cumulativeProbability + item.probability if p <= cumulativeProbability then return name, item end end end
您希望概率加起来为1.因此,如果您增加项目的概率(或添加项目),您将需要从其他项目中减去.这就是为什么我将1/10写为100/1000:更容易看到事物的分布情况,并在有共同点时更新它们.
您可以确认您正在获得您期望的分发:
local count = { } local iterations = 1000000 for i=1,iterations do local name = getRandomItem() count[name] = (count[name] or 0) + 1 end for name, count in pairs(count) do print(name, count/iterations) end