我有一个物品掉落系统,但我希望能够给玩家更多的运气
const blocks = [
{
name: "Iron",
ratio: 1 / 2,
},
{
name: "Gold nugget",
ratio: 1 / 4,
},
{
name: "Green Amulet",
ratio: 1 / 10,
},
{
name: "Red Gem",
ratio: 1 / 20,
},
{
name: "Diamond",
ratio: 1 / 100,
}
]
const totalRatio = blocks.reduce((sum, item) => sum + item.ratio, 0);
function rollItem(luckIncreasePercentage = 0) {
const luckboost = (1000 * Math.random());
let roll = Math.random();
let cumulativeChance = 0;
for (let i = 0; i < blocks.length; i++) {
cumulativeChance += blocks[i].ratio / totalRatio;
if (roll <= cumulativeChance) {
return blocks[i];
}
}
}
我希望能够增加运气提升百分比,例如增加 10% 的某种幸运程度 我已经做了一些可以做更多 Math.randoms 并取最高值的事情,但我对解决方案不满意,因为如果你有足够的运气,它就会开始滞后
您可以将
roll
提高到小于 1 的幂。幂越低,roll
就越趋向于 1(“提升”)。
例如你可以这样做:
let roll = Math.random() ** ((100 - luckIncreasePercentage) / 100);
因此,如果
luckIncreasePercentage
为 0(这意味着没有提升),则会减少为 Math.random() ** 1
,即 Math.random()
。在另一个极端,如果 luckIncreasePercentage
为 100(最大提升),则 roll
将为 1,无论 Math.random()
是什么,因为它被提高到 0 次方。