Project1

标题: 求根据幸运值抽到好东西的概率越高的算法 [打印本页]

作者: loveings    时间: 2022-6-27 15:49
标题: 求根据幸运值抽到好东西的概率越高的算法
目前有7个稀有度,1星为最低,7星为最高,
例如玩家初始幸运值1,
抽到1星的概率85%,
抽到2星的概率10%,
抽到3星的概率5%,
抽到4星的概率0%,
5星0%,
6星0%,
7星0%,
随着玩家的幸运值提升,后面0%的东西会有机率抽到,而低星的概率会逐渐降低,
而玩家的幸运值不设上限,玩家幸运值提高后,抽到低星的概率也至少保有1%机率出现,
求个算法,有大佬指教一下?
作者: 天浩    时间: 2022-6-27 16:54
本帖最后由 天浩 于 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星;跳至结束
标签:结束;
作者: RyanYe    时间: 2022-6-27 18:17
楼主是要数学公式,还是要代码啊?
如果要数学公式的话,上面最好是要用权重,不要用概率
作者: loveings    时间: 2022-6-27 18:50
天浩 发表于 2022-6-27 16:54
判定值 = 0~~99, 幸运 = 1;
最终判定值 = 幸运~~111-幸运/7(此值为最大的那个判定值);
如果判定值=86- ...

这个111是什么?当幸运/7大于111时为负数,由于幸运不设上限所以没有最大值,似乎行不通
作者: loveings    时间: 2022-6-27 18:52
RyanYe 发表于 2022-6-27 18:17
楼主是要数学公式,还是要代码啊?
如果要数学公式的话,上面最好是要用权重,不要用概率 ...

数学公式或是代码都可以,主要是数学白痴,想不到思路出来,权重听说比较好?但我不懂耶,大佬指教一下
作者: RyanYe    时间: 2022-6-27 23:49
本帖最后由 RyanYe 于 2022-6-27 23:50 编辑
loveings 发表于 2022-6-27 18:52
数学公式或是代码都可以,主要是数学白痴,想不到思路出来,权重听说比较好?但我不懂耶,大佬指教一下 ...


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

函数定义:
JAVASCRIPT 代码复制
  1. function weightRandom(randomConfig) {
  2.         //var randomConfig = [{id:11,w:3},{id:12,w:1}];
  3.         //SpawnEventID, Weight
  4.         var randomList = [];
  5.         for (var i in randomConfig) {
  6.                 for (var j = 0; j < randomConfig[i].w; j++) {
  7.                         randomList.push(randomConfig[i].id);
  8.                         //The list above is supposed to be like [11,11,11,12]
  9.                         //So for the god's sake the value of w cannot be too large
  10.                 }
  11.         }
  12.         var randomValue = randomList[Math.floor(Math.random() * randomList.length)];
  13.         return randomValue;
  14. };


脚本代码函数引用:
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,而不是概率百分之多少





欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1