lua – 如何设置正确的逻辑,根据项目的稀有性从列表中选择随机项
发布时间:2020-12-14 21:45:17 所属栏目:大数据 来源:网络整理
导读:我正在用lua语言编写一个使用Corona SDK的游戏.我很难为这样的系统提出逻辑; 我有不同的项目.我想要一些物品有1/1000的机会被选中(一个独特的物品),我想要一些有1/10,一些2/10等. 我在考虑填充一张桌子并挑选一个随机物品.例如,我将100个“X”项添加到表中,
我正在用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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |