如何根据项目稀有度,从列表中随机选取合适的罕见物品?

2026-04-01 19:391阅读0评论SEO基础
  • 内容介绍
  • 相关推荐

本文共计400个文字,预计阅读时间需要2分钟。

如何根据项目稀有度,从列表中随机选取合适的罕见物品?

我正在用Lua语言编写一个基于Corona SDK的游戏。对于这样的系统,我很难实现逻辑;我有一个独特项目。我想让一些物品有1/1000的几率被选中(一个独特的物品),还想让一些物品有1/10、1/5等几率被选中。我正在考虑……

如何根据项目稀有度,从列表中随机选取合适的罕见物品?

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

我有不同的项目.我想要一些物品有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

本文共计400个文字,预计阅读时间需要2分钟。

如何根据项目稀有度,从列表中随机选取合适的罕见物品?

我正在用Lua语言编写一个基于Corona SDK的游戏。对于这样的系统,我很难实现逻辑;我有一个独特项目。我想让一些物品有1/1000的几率被选中(一个独特的物品),还想让一些物品有1/10、1/5等几率被选中。我正在考虑……

如何根据项目稀有度,从列表中随机选取合适的罕见物品?

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

我有不同的项目.我想要一些物品有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