gpt4 book ai didi

lua - 如何根据项目的稀有性设置从列表中随机选择项目的正确逻辑,即 "rare" "normal"

转载 作者:行者123 更新时间:2023-12-04 14:12:02 26 4
gpt4 key购买 nike

我正在使用 lua 语言使用 Corona SDK 编写游戏。我很难为这样的系统提出逻辑;

我有不同的项目。我想要一些元素有 1/1000 的机会被选中(一个独特的元素),我想要一些有 1/10、一些 2/10 等等。

我正在考虑填充一张 table 并随机选择一个项目。例如,我将 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

关于lua - 如何根据项目的稀有性设置从列表中随机选择项目的正确逻辑,即 "rare" "normal",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23437573/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com