基于赖子的通用胡牌算法


var g_NeedHunCount = 4;  
var callTime = 0;

//408
var nTp = [
            101,102,103,104,105,106,107,108,109,
            201,202,203,204,205,206,207,208,209,
            301,302,303,304,305,306,307,308,309,
            401,402,403,404,405,406,407,
            501,501,501,501,502,502,502,502,
          ];  

//宁海麻将工具类
//检查是否用户当前是否已经听牌
function checkTingPai(seatData){

   //当前用户的牌组
   var samArr = pyPai(seatData.holds);
  
   var tingPai = getTingArr(samArr,408);//没有百搭

   var index = tingPai.indexOf(408);

   if(index != -1){
        tingPai.splice(index,1);
   }
   
   return njPai(tingPai);
}

//夹胡
function isJZH(seatData,hupai){
    var holds = pyPai(seatData.holds);
    var hupai = nTp[hupai];
    var tmp1 = holds.indexOf(hupai-1);
    if(tmp1 == -1){
        return false;
    }
    holds.splice(tmp1,1);
    var tmp2 = holds.indexOf(hupai+1);
    if(tmp2 == -1){
        return false;
    }
    holds.splice(tmp2,1);
    return testCanHuPai(holds,408);
}

//是否在暗刻
function isAKH(seatData,hupai,kepai){
    var holds = pyPai(seatData.holds);
    var hp = nTp[hupai];
    var kp = nTp[kepai];
    holds.push(hp);
    for(var i = 0; i < 3; i++){
        var index1 = holds.indexOf(kp);
        holds.splice(index1,1);
    }
    return testCanHuPai(holds,408);
}

//单调胡
function isDDH(seatData,hupai){
    var holds = pyPai(seatData.holds);
    var hupai = nTp[hupai];
    var tmp1 = holds.indexOf(hupai);
    if(tmp1 == -1){
        return false;
    }
    holds.splice(tmp1,1);
    return getCanPu(holds,408)
}

function canHus( hunNum, arr ){ 
    sortArr(arr);
    global.g_NeedHunCount;  
    tmpArr = [];  
    tmpArr = arr; 
    var arrLen  = tmpArr.length;   
    if(arrLen <= 0){
        if(hunNum >= 2){  
            return true;  
        }    
        return false;  
    } 
    if(hunNum < getModNeedNum(arrLen,true)){  
        return false;  
    } 
    for(var i = 0 ; i < arrLen ; i++ ){    
        if(i == (arrLen - 1 )){ // # 如果是最后一张牌  
            if(hunNum > 0){  
                var tmp = tmpArr[i];  
                hunNum = hunNum - 1; 
                
                var index = tmpArr.indexOf(tmpArr[i]);
                tmpArr.splice(index,1); 
                g_NeedHunCount = 4;  
                getNeedHunInSub(tmpArr, 0);  
                if(g_NeedHunCount <= hunNum){ 
                    return true; 
                }     
                hunNum = hunNum +1;  
                tmpArr.push(tmp);  
                sortArr(tmpArr);   
            }        
        }         
        else{  
          
            if (( i+2 ) == arrLen || (tmpArr[i] % 10) != (tmpArr[i+2] % 10)){  
                if(test2Combine( tmpArr[i], tmpArr[i+1])){  
                    var tmp1 = tmpArr[i];  
                    var tmp2 = tmpArr[i+1];
                    var index1 = tmpArr.indexOf(tmp1);
                    tmpArr.splice(index1,1);
                    var index2 = tmpArr.indexOf(tmp2);
                    tmpArr.splice(index2,1); 
                    g_NeedHunCount = 4;  
                    getNeedHunInSub(tmpArr, 0);  
                    if(g_NeedHunCount <= hunNum){ 
                        // print 'type:',tmp1/100, 'value', tmp1%10, 2  
                        return true; 
                    } 
                    tmpArr.push(tmp1) ;
                    tmpArr.push(tmp2) ;     
                    sortArr(tmpArr) ;
                }    
            }        
            if(hunNum > 0 && (tmpArr[i] % 10) != (tmpArr[i+1] % 10)){ 
                hunNum = hunNum -1 ;  
                var tmp = tmpArr[i] ;  
                var index1 = tmpArr.indexOf(tmp);
                tmpArr.splice(index1,1);
                g_NeedHunCount = 4;  
                getNeedHunInSub(tmpArr, 0);  
                if(g_NeedHunCount <= hunNum){  
                    //# print 'type:',tmp/100, 'value', tmp%10, 3  
                    return true;  
                }    
                hunNum = hunNum +1;  
                tmpArr.push( tmp );  
                sortArr( tmpArr );
            }     
       }          
    }             
    return false;  
}  

function copyArr(tmpArr){
    var tmp = [];
    for(var i =0;i<tmpArr.length;i++){
        tmp[i] = tmpArr[i];
    }
    return tmp;
}


//nodejs => python
function pyPai(holds){
    var len = holds.length;
    var pai = new Array(len);
    for(var i = 0 ; i < len ; i++){
        var tmp = holds[i];
        pai[i] = nTp[tmp];
    }
    return pai;
}

function njPai(tingPai){
    var len = tingPai.length;
    var pai = new Array(len);
    for(var i = 0 ; i < len ; i++){
        var index = nTp.indexOf(tingPai[i]);
        pai[i] = index;
    }
    return pai;
}

    
//1筒 2条 3万 4字
var g_mjsArr = [  
    101, 102, 103, 104, 105, 106, 107, 108, 109, 
    101, 102, 103, 104, 105, 106, 107, 108, 109,  
    101, 102, 103, 104, 105, 106, 107, 108, 109,  
    101, 102, 103, 104, 105, 106, 107, 108, 109,  
    201, 202, 203, 204, 205, 206, 207, 208, 209,
    201, 202, 203, 204, 205, 206, 207, 208, 209,  
    201, 202, 203, 204, 205, 206, 207, 208, 209,  
    201, 202, 203, 204, 205, 206, 207, 208, 209,  
    301, 302, 303, 304, 305, 306, 307, 308, 309, 
    301, 302, 303, 304, 305, 306, 307, 308, 309,  
    301, 302, 303, 304, 305, 306, 307, 308, 309,  
    301, 302, 303, 304, 305, 306, 307, 308, 309,  
    401, 402, 403, 404, 405, 406, 407, 
    401, 402, 403, 404, 405, 406, 407, 
    401, 402, 403, 404, 405, 406, 407,  
    401, 402, 403, 404, 405, 406, 407,
    501, 501, 501, 501, 502, 502, 502, 502,

];
  

var g_testMjsArr = [  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值