我正在尝试弄清楚如何从一个值表中选择一个具有自己给定机会的随机项目,如下所示:
itemlottery (npcid, item, chance) VALUES (9100100, 1402011, 167)
itemlottery (npcid, item, chance) VALUES (9100100, 1041082, 267)
itemlottery (npcid, item, chance) VALUES (9100100, 1322003, 1668)
itemlottery (npcid, item, chance) VALUES (9100100, 1061033, 89)
itemlottery (npcid, item, chance) VALUES (9100100, 1051001, 89)
itemlottery (npcid, item, chance) VALUES (9100100, 2000005, 188983)所以基本上我可以从SQL得到物品和机会,但是用java硬编码会不会更好呢?
无论如何,这些都是我需要的值(列表实际上包含的不仅仅是50+项)。
现在我的问题是,我如何读取这些值,然后在Java中根据这些概率生成一个随机项目?
这是为一个游戏的NPC,这将给玩家一个随机抽奖项目基于机会。
编辑:您必须获得一个项目,而不能获得多个项目。机会越高,获得该物品的可能性就越大。
发布于 2018-02-18 00:39:41
您可以在MySQL中使用rand()和累积和来完成此操作:
select t.*
from (select t.*, (@sum := @sum + chance) as cume_chance
from t cross join
(select @sum := 0, @r := rand()) params
) t
where @r < cume_chance / @sum and
@r >= (cume_chance - chance) / @sum;将rand()计算为变量的原因是,该函数只计算一次。运行外部where时,@sum应包含chance的总和。另一种方法是使用子查询显式计算它。
https://stackoverflow.com/questions/48842798
复制相似问题