js 中的物品掉落系统的幸运提升

问题描述 投票:0回答:1

我有一个物品掉落系统,但我希望能够给玩家更多的运气

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 并取最高值的事情,但我对解决方案不满意,因为如果你有足够的运气,它就会开始滞后

javascript
1个回答
0
投票

您可以将

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 次方。

© www.soinside.com 2019 - 2024. All rights reserved.