
首先看一下,怎么计算奖金和最大盈利的。
对照上面的红字解释,来梳理一下下面的数字怎么算:

任4,选了6个号码,所以一共有C6 4 (15)种可能性,也就是15注。每一注2元,所以总共要花30元。奖金,也就是如果获奖,最小中一注吧,一注78元,所以最小奖金78元。最多中多少呢?由于每次只开5个号码, 因为是任选4,所以5个号码里最多只能中5注。也就是78*5=390元。那么盈利就是中奖的钱,减去买彩票的钱。78-30元到390-30元。
/**
* [computeBonus 奖金范围预测]
* @param {number} active [当前选中的号码]
* @param {string} play_name [当前的玩法标识]
* @return {array} [奖金范围]
*/
//计算金额
computeBonus(active,play_name){
//首先拿到玩法的基数,比如R2,就是2
const play=play_name.split('');
//保存当前对象指向
const self=this;
//任8也好任4也好,来一个与其相匹配的数组。填充0
let arr=new Array(play[1]*1).fill(0);
let min,max;
//组合运算
if(play[0]==='r'){
//min_active最小命中数。比如任8,11个数字,选择了8个,剩余3个数字没选
//但是每次开奖5个数,所以至少有两个命中的。
//任7最小命中数是1。
//最小命中数,对应8->2,7->1,(6,5,4,3,2)->0
let min_active=5-(11-active);
if(min_active>0){
//先判断最小命中数减去玩法基数是不是大于0,如果是,
//实例化一个数组。
if(min_active-play[1]>=0){
//这里用了一下ES6的初始化填充功能。
arr=new Array(min_active).fill(0);
//计算最小命中注数。
min=Calculate.combine(arr,play[1]).length;
}else{
//任6,任7,任8 基数大于0
if(play[1]-5>0&&active-play[1]>=0){
arr=new Array(active-5).fill(0);
min=Calculate.combine(arr,play[1]-5).length;
}else{
min=active-play[1]>-1?1:0
}
}
}else{
min=active-play[1]>-1?1:0;
}
let max_active=Math.min(active,5);
if(play[1]-5>0){
if(active-play[1]>=0){
arr=new Array(active-5).fill(0);
max=Calculate.combine(arr,play[1]-5).length;
}else{
max=0;
}
}else if(play[1]-5<0){
arr=new Array(Math.min(active,5)).fill(0);
max=Calculate.combine(arr,play[1]).length;
}else{
max=1;
}
}
return [min,max].map(item=>item*self.play_list.get(play_name).bonus)
}
本节代码表示一脸懵逼,暂时看不懂。
网友评论