请问各位大佬,游戏装备掉落概率应该怎么算?

我现在用的写法是这样的,取一个0到100的值
然后判断这个值是否在设定的概率百分之10内,如果是,就判定成功。
gl = Math.random()*100;
if(gl<=10)
{
console.log ‘装备掉了!!!’
}
return;
}
但是总感觉概率极高啊。。。。

:sob::sob::sob::sob::sob::sob:

设计权重值

权重?可是该如何计算权重呢。设一个值?然后从最低到最高?

startBtn(){
    let temp;
    let data = {
        "0":0,
        "1":0,
        "2":0,
        "3":0
    };
    //随机1000次
    for(let i = 0; i < 1000; i++){
        temp = this.calWeight([10,20,30,40]);
        data[temp] += 1;
    }
    console.log("每个位置出现的次数",data)
},

calWeight(weightList) {
    let totalWeight = 0;
    let index;
    for (let i = 0; i < weightList.length; i++) {
        weightList[i] = Number(weightList[i]);
        totalWeight += weightList[i];
    }

    if (totalWeight <= 0) {
        return -1;
    }

    let random = Math.floor(Math.random() * (totalWeight - 1 + 1) + 1);
    let nextWeight = 0;
    for (var i = 0; i < weightList.length; i++) {
        if (nextWeight < random && random <= nextWeight + weightList[i]) {
            index = i;
            break;
        }
        nextWeight += weightList[i];
    }
    return index;
}
2赞

大佬,请问,totalweight累加起到的是什么作用?totalweight-1+1又是干嘛的呢?

累加就是为了获取总权重值。这样你就知道每个权重值占比多少。+1-1那是一个获取一个随机N~M范围值的方法

1赞

谢谢大佬

学习了

嗯嗯,这个我也是这么做的

单次概率本来就是随机的, 如果想控制概率, 那就设计成积分制, 失败一次加XX分, 分数达到多少必定成功, 成功一次后扣XX分


装备ID+数量+是否绑定+权重
计算所有装备的权重,然后递归叠加,比如信息1是<1000掉落 信息2就是<1000+1000 >=1000以此类推,那么如果降低信息2掉率就是把信息2的1000改成100 就是<1000+100 >=1000 能理解吧?

第二张图你可以理解为是一个道具组,你可以把一些道具放到一个组里,比如你设定一个宝箱可以开出来白绿蓝紫橙红品质的装备,那么可以把对应装备的掉落ID配进组里,这样方便后期扩展配置掉落,不过我这个组是可以触发多次的,如果随机数<2500则掉落权重5000权重和2500权重的,1250权重不会掉,这样可以多次掉落 反正思路是这个思路