查看: 2224|回复: 5

[有事请教] 求根据幸运值抽到好东西的概率越高的算法

[复制链接]
梦石
0
星屑
1366
在线时间
177 小时
注册时间
2017-6-28
回帖
21
发表于 2022-6-27 15:49:46 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
目前有7个稀有度,1星为最低,7星为最高,
例如玩家初始幸运值1,
抽到1星的概率85%,
抽到2星的概率10%,
抽到3星的概率5%,
抽到4星的概率0%,
5星0%,
6星0%,
7星0%,
随着玩家的幸运值提升,后面0%的东西会有机率抽到,而低星的概率会逐渐降低,
而玩家的幸运值不设上限,玩家幸运值提高后,抽到低星的概率也至少保有1%机率出现,
求个算法,有大佬指教一下?
梦石
0
星屑
6379
在线时间
608 小时
注册时间
2017-9-27
回帖
205
发表于 2022-6-27 16:54:41 | 显示全部楼层
本帖最后由 天浩 于 2022-6-27 17:21 编辑

判定值 = 0~~99, 幸运 = 1;
最终判定值 = 幸运~~111-幸运/7(此值为最大的那个判定值);
如果判定值<86-幸运,获得1星;跳至结束;
如果判定值>=86-幸运&&<96-幸运/2,获得2星;跳至结束
如果判定值>=96-幸运/2&&<101-幸运/3,获得3星;跳至结束
如果判定值>=101-幸运/3&&<105-幸运/4,获得4星;跳至结束
如果判定值>=105-幸运/4&&<108-幸运/5,获得5星;跳至结束
如果判定值>=108-幸运/5&&<110-幸运/6,获得6星;跳至结束
如果判定值>=110-幸运/6&&<111-幸运/7,获得7星;跳至结束

标签:结束;

所以最终可得出~~~~
如果幸运为10,判定值最终为则为 10~109.6;
如果判定值<76,获得1星;跳至结束;
如果判定值>=76&&<91,获得2星;跳至结束
如果判定值>=91&&<97.7,获得3星;跳至结束
如果判定值>=97.7&&<102.5,获得4星;跳至结束
如果判定值>=102.5&&<106,获得5星;跳至结束
如果判定值>=106&&<108.6,获得6星;跳至结束
如果判定值>=108.6&&<109.6,获得7星;跳至结束
标签:结束;

如果幸运为20,判定值则为 20~108.2;
如果判定值<66,获得1星;跳至结束;
如果判定值>=66&&<86,获得2星;跳至结束
如果判定值>=86&&<94.4,获得3星;跳至结束
如果判定值>=94.4&&<100,获得4星;跳至结束
如果判定值>=100&&<104,获得5星;跳至结束
如果判定值>=104&&<106.7,获得6星;跳至结束
如果判定值>=106.7&&<108.2,获得7星;跳至结束
标签:结束;
回复

使用道具 举报

梦石
0
星屑
7089
在线时间
722 小时
注册时间
2021-3-5
回帖
731
发表于 2022-6-27 18:17:27 | 显示全部楼层
楼主是要数学公式,还是要代码啊?
如果要数学公式的话,上面最好是要用权重,不要用概率
回复

使用道具 举报

梦石
0
星屑
1366
在线时间
177 小时
注册时间
2017-6-28
回帖
21
 楼主| 发表于 2022-6-27 18:50:36 | 显示全部楼层
天浩 发表于 2022-6-27 16:54
判定值 = 0~~99, 幸运 = 1;
最终判定值 = 幸运~~111-幸运/7(此值为最大的那个判定值);
如果判定值=86- ...

这个111是什么?当幸运/7大于111时为负数,由于幸运不设上限所以没有最大值,似乎行不通
回复

使用道具 举报

梦石
0
星屑
1366
在线时间
177 小时
注册时间
2017-6-28
回帖
21
 楼主| 发表于 2022-6-27 18:52:28 | 显示全部楼层
RyanYe 发表于 2022-6-27 18:17
楼主是要数学公式,还是要代码啊?
如果要数学公式的话,上面最好是要用权重,不要用概率 ...

数学公式或是代码都可以,主要是数学白痴,想不到思路出来,权重听说比较好?但我不懂耶,大佬指教一下
回复

使用道具 举报

梦石
0
星屑
7089
在线时间
722 小时
注册时间
2021-3-5
回帖
731
发表于 2022-6-27 23:49:00 | 显示全部楼层
本帖最后由 RyanYe 于 2022-6-27 23:50 编辑
loveings 发表于 2022-6-27 18:52
数学公式或是代码都可以,主要是数学白痴,想不到思路出来,权重听说比较好?但我不懂耶,大佬指教一下 ...


指教不敢当,我把我用的权重函数发出来,你看对你是否有帮助:

函数定义:
[pre lang="javascript"]function weightRandom(randomConfig) {
        //var randomConfig = [{id:11,w:3},{id:12,w:1}];
        //SpawnEventID, Weight
        var randomList = [];
        for (var i in randomConfig) {
                for (var j = 0; j < randomConfig.w; j++) {
                        randomList.push(randomConfig.id);
                        //The list above is supposed to be like [11,11,11,12]
                        //So for the god's sake the value of w cannot be too large
                }
        }
        var randomValue = randomList[Math.floor(Math.random() * randomList.length)];
        return randomValue;
};[/pre]

脚本代码函数引用:
var Gid=weightRandom([{id:34,w:2},{id:38,w:1}]);//基础药水
var x=$gameMap._events[this._eventId]._x;
var y=$gameMap._events[this._eventId]._y;
Galv.SPAWN.event(Gid,x,y);

以上代码的意思是:
2/3的概率召唤一个34号事件,1/3概率召唤一个38号事件
用的是权重2和1,而不是概率百分之多少
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部