Files
youle_cocos/projects/majiang_jx/js/flow/put/show_ting.js
T
joywayerandClaude Opus 4.8 7ab748919a chore: 纳入项目全部源码进根仓库统一管理
删除 YouleNexus 内嵌 .git,统一由根仓库唯一管理。提交:
- projects/ 旧 H5 模板 Game_Surface_3 与各子游戏源码
- cocoscreator_projects/YouleNexus 工程 + cocos-creator-mcp 扩展源码
- CLAUDE.md、.mcp.json 等配置
library/temp/node_modules/dist 等缓存由 .gitignore 排除。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-28 11:55:13 +08:00

2508 lines
62 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
d.tip_tp = function () {
var tip_tp = [];
var tip_ting = [];
//手牌
var syp = d.c(d.hand[C_Player.seat]);
if (d.user_ctrl[3] > 0) {
syp[0].push(d.user_ctrl[3]);
}
//手牌长度
var l = syp[0].length
var last_pai = 0;
for (var i = 0; i < l; i++) {
var qu_pai = d.c(syp);
//判断是否一样
if (qu_pai[0][i] == last_pai) {
continue;
}
last_pai = qu_pai[0][i];
qu_pai[0].splice(i, 1);//提出此牌
//qu_pai[0].push(d.jing[1]);
var ting_tip = d.hu_Judge(qu_pai, d.jing);
if (ting_tip.length > 0) {
//console.log(JSON.stringify(qu_pai)+","+syp[0][i]);
tip_tp.push(syp[0][i]);
tip_ting.push(ting_tip);
}
}
d.ting_pai = {
"tip_tp": tip_tp,
"tip_ting": tip_ting
};
console.log(d.ting_pai);
//返回听牌
return tip_tp;
}
/*-----------------听牌配置------------------*/
var hu_ting = {
pai : [1,2,3,4,5,6,7,8,9,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,31,32,33,34,41,42,43],//枚举牌池
feng_shun : 1,//风牌能否组顺,0不能,1能
hu_7d : true, //能否胡七对
hu_13l : true, //能否胡13烂
hu_Q1s : false, //能否胡清一色
Q1s_pai : 0,//清一色"胡法" 有没有牌个数限制 没有输入0 如"限制所有手牌为14个"
hu_Z1s : false, //能否胡字一色
Z1s_pai : 0,//字一色"胡法" 有没有牌个数限制 没有输入0 如"限制所有手牌为14个"
tips_card_img : [2484,2485],//推荐牌动画的2个精灵 第一个背框,第二个麻将
}
/**************推荐牌***************/
d.tips_Card = function () {
var fun_tips_card = function (ting) {
var hands = d.c(d.hand[C_Player.seat]);//手牌
if (d.user_ctrl[3] > 0) {//控制权有摸的牌添加摸得牌
hands[0].push(d.user_ctrl[3]);
}
var arr1 = Util.ordArray(Util.copyArray(hands[0]));
var peng_gang = [];
for(var i = 1; i< hands.length ; i++){//获取碰的牌
if(hands[i].length == 3 && hands[i][0] == hands[i][2]){
peng_gang.push(hands[i][0]);
}
}
for (var i = 0; i < arr1.length; i++) { //计算jing的个数,数组里剔除jing,剔除可以加杠的牌
if (arr1[i] == d.jing[0] || arr1[i] == d.jing[1] || peng_gang.indexOf(arr1[i]) > -1) {
arr1.splice(i, 1);
i--;
}
}
var card_mode = 0;
var buildArray = [[], [], [], [], []]; //牌分类
for (var i = 0; i < arr1.length; i++) {
var index = parseInt(arr1[i] / 10);
buildArray[index].push(arr1[i]);
}
var card = [[], [], []];
/*******************13烂查烂牌***********************/
if (hu_ting.hu_13l && hands[0].length == 14) {//13烂
for (var i = 0; i < 3; i++) {
card_mode = Util.ordArray(Util.copyArray(buildArray[i]));
if (card_mode.length > 0) {
for (var k = 0; k < card_mode.length; k++) {
if (hu_ting.hu_13l_147 &&( !(card_mode[k - 1] == undefined || card_mode[k] - card_mode[k - 1] == 3) || !(card_mode[k + 1] == undefined || card_mode[k + 1] - card_mode[k] == 3))) {
card[1].push(card_mode[k+1]);
card_mode.splice(k+1, 1);
k--;
} else if (!(card_mode[k - 1] == undefined || card_mode[k] - card_mode[k - 1] > 2) || !(card_mode[k + 1] == undefined || card_mode[k + 1] - card_mode[k] > 2)) {
if(card_mode.length == 3 && (card_mode[0]%10 == 2||card_mode[0]%10 ==3) && (card_mode[2] - card_mode[0] < 6 && card_mode[2] - card_mode[0] > 3) && card_mode[2] - card_mode[1] > 2 ){
card[1].push(card_mode[k]);
card_mode.splice(k, 1);
k--;
}
else {
card[1].push(card_mode[k+1]);
card_mode.splice(k+1, 1);
k--;
}
}
}
}
}
for (var i = 3; i < 5; i++) {
card_mode = Util.ordArray(Util.copyArray(buildArray[i]));
for (var j = 0; j < card_mode.length; j++) {
if (card_mode[j] == card_mode[j + 1]) {
card[0].push(card_mode[j]);
}
}
}
if (card[0].length + card[1].length < 3 && card[0].length + card[1].length > 0) {
for (var i = 0; i < card.length; i++) {
if (card[i][0]) {
if (ting == 1) {
return card;
}
return card[i][0];
}
}
} else {
card = [[], [], []];
}
}
/****************************查烂牌**************************/
for (var i = 0; i < 3; i++) {//查烂牌
card_mode = Util.ordArray(Util.copyArray(buildArray[i]));
if (card_mode.length > 0) {
if (card_mode.length == 1) {//0级烂牌
card[0].push(card_mode[0]);
} else {
for (var k = 0; k < card_mode.length; k++) {//两边隔两张以上
if ((card_mode[k - 1] == undefined || card_mode[k] - card_mode[k - 1] > 2) && (card_mode[k + 1] == undefined || card_mode[k + 1] - card_mode[k] > 2)) {
card[1].push(card_mode[k]);//两边隔1张以上
} else if ((card_mode[k - 1] == undefined || card_mode[k] - card_mode[k - 1] > 1) && (card_mode[k + 1] == undefined || card_mode[k + 1] - card_mode[k] > 1)) {
card[2].push(card_mode[k])
}
}
}
}
}
/******************无风顺查烂风************************/
for (var i = 3; i < 5; i++) {//查烂风
var card_mode = Util.ordArray(Util.copyArray(buildArray[i]));
if (card_mode.length > 0) {
if (card_mode.length == 1) {//0级烂牌
card[0].push(card_mode[0]);
} else if (!hu_ting.feng_shun) {//单张风
for (var k = 0; k < card_mode.length; k++) {
if ((card_mode[k - 1] == undefined || card_mode[k] != card_mode[k - 1]) && (card_mode[k + 1] == undefined || card_mode[k + 1] != card_mode[k])) {
card[1].push(card_mode[k]);
}
}
}
}
}
/*******没有3,只有单1,单2,就去除1,2 没有7只有单8,单9,就消除单8单9*******/
for (var i = 0; i < 3; i++) {
card_mode = Util.ordArray(Util.copyArray(buildArray[i]));
if (card_mode.length > 1) {
if (card_mode[0] % 10 == 1 && card_mode[1] % 10 == 2 && (card_mode[2] % 10 > 3 || card_mode[2] == undefined)) {
card[2].push(card_mode[0],card_mode[1]);
}
if (card_mode[card_mode.length - 1] % 10 == 9 && card_mode[card_mode.length - 2] % 10 == 8 && (card_mode[card_mode.length - 3] % 10 < 7 || card_mode[card_mode.length - 3] == undefined)) {
card[2].push(card_mode[card_mode.length - 1],card_mode[card_mode.length - 2]);
}
}
}
/*******112,122,后不搭,889,899,前不搭*******/
for (var i = 0; i < 3; i++) {
card_mode = Util.ordArray(Util.copyArray(buildArray[i]));
if (card_mode.length > 2) {
if (card_mode[3] % 10 > 3 || card_mode[3] == undefined) {//后不搭
if (card_mode[0] % 10 == 1 && card_mode[1] % 10 == 1 && card_mode[2] % 10 == 2) {//112
card[2].push(card_mode[2]);
} else if (card_mode[0] % 10 == 1 && card_mode[1] % 10 == 2 && card_mode[2] % 10 == 2) {//122
card[2].push(card_mode[0]);
}
}
var card_len = card_mode.length - 1;
if (card_mode[card_len - 3] % 10 < 7 || card_mode[card_len - 3] == undefined) {//前不搭
if (card_mode[card_len] % 10 == 9 && card_mode[card_len - 1] % 10 == 8 && card_mode[card_len - 2] % 10 == 8) {//889
card[2].push(card_mode[card_len]);
} else if (card_mode[card_len] % 10 == 9 && card_mode[card_len - 1] % 10 == 9 && card_mode[card_len - 2] % 10 == 8) {//899
card[2].push(card_mode[card_len - 2]);
}
}
}
}
/******************有风顺查烂风************************/
if (hu_ting.feng_shun) {
for (var i = 3; i < 5; i++) {//查烂风
var card_mode = Util.ordArray(Util.copyArray(buildArray[i]));
if(card_mode.length == 2 && card_mode[0] != card_mode[1]){
card[2].push(card_mode[0],card_mode[1]);
}
}
}
/******多张牌中 4连张张牌中含有刻,顺的牌,去除多的那张******/
for (var i = 0; i < 3; i++) {
card_mode = Util.ordArray(Util.copyArray(buildArray[i]));
if (card_mode.length > 3) {
for (var k = 0; k < card_mode.length - 2; k++) { //刻
if (card_mode[k] == card_mode[k + 2]) {
if (card_mode[k] - card_mode[k - 1] == 1 && //四张牌刻 刻前一张 前后不搭
(card_mode[k - 1] - card_mode[k - 2] > 1 || card_mode[k - 2] == undefined) &&
(card_mode[k + 3] - card_mode[k] > 1 || card_mode[k + 3] == undefined)) {
card[2].push(card_mode[k - 1]);
} else if (card_mode[k + 3] - card_mode[k] == 1 && //四张牌刻 刻后一张 前后不搭
(card_mode[k] - card_mode[k - 1] > 1 || card_mode[k - 1] == undefined) &&
(card_mode[k + 4] - card_mode[k + 3] > 1 || card_mode[k + 4] == undefined)) {
card[2].push(card_mode[k + 3]);
}
}
}
for (var k = 0; k < card_mode.length - 3; k++) {//四顺
if ((card_mode[k] - card_mode[k - 1] > 1 || card_mode[k - 1] == undefined) &&
(card_mode[k + 4] - card_mode[k + 3] > 1 || card_mode[k + 4] == undefined)) {
if ((card_mode [k + 1] - card_mode[k] < 2) && card_mode[k + 2] - card_mode[k + 1] == 1 && card_mode[k + 3] - card_mode[k + 1] == 2) {
card[2].push(card_mode[k]);
} else if (card_mode[k + 1] == card_mode [k + 2] && card_mode[k + 2] - card_mode[k] == 1 && card_mode[k + 3] - card_mode[k + 2] == 1) {
card[2].push(card_mode[k + 1]);
} else if ((card_mode [k + 3] - card_mode[k + 2] < 2) && card_mode[k + 1] - card_mode[k] == 1 && card_mode[k + 2] - card_mode[k] == 2) {
card[2].push(card_mode[k + 3]);
}
}
}
}
}
/**************************双顺,顺前后不搭**************************/
for (var i = 0; i < 3; i++) {
card_mode = Util.ordArray(Util.copyArray(buildArray[i]));
if (card_mode.length > 1) {
for (var k = 0; k < card_mode.length - 1; k++) {
if (card_mode[k + 1] - card_mode[k] == 1 &&
(card_mode[k - 1] == undefined || card_mode[k] - card_mode[k - 1] > 1) &&
(card_mode[k + 2] == undefined || card_mode[k + 2] - card_mode[k + 1] > 1)) {
card[2].push(card_mode[k],card_mode[k + 1]);
}
}
}
}
/**************************终极抽对子**************************/
for (var i = 0; i < 3; i++) {
card_mode = Util.ordArray(Util.copyArray(buildArray[i]));
if (card_mode.length > 1) {
for (var k = 0; k < card_mode.length - 1;) {
if (card_mode[k] == card_mode[k + 1] && (card_mode[k] - card_mode[k - 1] > 1 || card_mode[k - 1] == undefined) && (card_mode[k + 2] - card_mode[k] > 1 || card_mode[k + 2] == undefined)) {
card[2].push(card_mode[k],card_mode[k + 1]);
k += 2;
} else {
k += 1;
}
}
}
}
if (ting == 1) {
return card;
}
if (card[0].length + card[1].length + card[2].length) {
for (var i = 0; i < card.length; i++) {
if (card[i][0]) {
return card[i][0];
}
}
}
}
var Ting_tip = Util.copyArray(d.Ting_Tip);//获取听的牌
var tip_card = 0;//记录出的牌
if (Ting_tip.length > 0) {//有听的牌
for (var i = 0; i < Ting_tip.length;) {//把精拿出来
if (Ting_tip[i] == d.jing[0] || Ting_tip[i] == d.jing[1]) {
Ting_tip.splice(i, 1);
continue;
}
i++;
}
if (Ting_tip.length == 1) {//听的牌为1张直接出
return Ting_tip[0];
} else if(Ting_tip.length > 1){//听的牌大于1张
var tip_card_arr = fun_tips_card(1);//获取推荐的牌
for (var i = 0; i < tip_card_arr.length; i++) {//查询推荐的牌中有没有听的牌
for (var j = 0; j < tip_card_arr[i].length && tip_card_arr[i].length > 0; j++) {
if(Ting_tip.indexOf(tip_card_arr[i][j]) > -1){
return tip_card_arr[i][j];
}
}
}
if (tip_card == 0) {//没有出的牌就出听的最后一张牌
return Ting_tip[Ting_tip.length - 1];
}
}
} else if (d.Ting_Tip.length == 0) {
return fun_tips_card();
}
}
/*----------------听牌主函数-------------------*/
//arrs传入所有手牌,不含摸的牌 jing 万能牌[正,副]
d.hu_Judge = function (arrs , jing,end) {
var ting = []; //能听的牌
for(var i = 0 ; i < hu_ting.pai.length ; i++){//模拟摸的牌
var arrs1 = Util.copyArray(arrs); //拷贝所有牌
arrs1[0] = arrs1[0].concat(hu_ting.pai[i]); //所有牌添加摸得牌
Util.ordArray(arrs1[0])
if(d.ting.JING8_zhen_hu(arrs[0],hu_ting.pai[i],arrs1,jing)){ //判断平胡
ting = ting.concat(hu_ting.pai[i]);
if(end)
{return ting;}
continue;
}
if(hu_ting.hu_7d && d.ting.heck7D_jing(arrs1,jing,hu_ting.pai[i])){
ting = ting.concat(hu_ting.pai[i]);
if(end)
{return ting;}
continue;
}
if(hu_ting.hu_13l && d.ting.check13L_jing(arrs1,jing,hu_ting.pai[i])){
ting = ting.concat(hu_ting.pai[i]);
if(end)
{return ting;}
continue;
}
if(hu_ting.hu_Q1s && d.ting.checkQ1s(arrs1)){
ting = ting.concat(hu_ting.pai[i]);
if(end)
{return ting;}
continue;
}
if(hu_ting.hu_Z1s && d.ting.checkZ1s(arrs1)){
ting = ting.concat(hu_ting.pai[i]);
if(end)
{return ting;}
continue;
}
}
return ting;
}
/*----------------工具函数------------------*/
var Util = {};
//判断是否为数组
Util.isArray = function (array) {
return Object.prototype.toString.call(array) === '[object Array]';
}
//复制数组
Util.copyArray = function (array) {
if(typeof array=="undefined"){
console.log("array is undefined.");
return array;
}
var str_Array = JSON.stringify(array);
var back_Array = JSON.parse(str_Array);
return back_Array;
}
//一维数组排序
Util.ordArray = function (array) {
if (array != undefined && array.length > 0) {
array.sort(function f(a, b) {
return a - b;
});
}
return array;
}
/*----------------胡法----------------------*/
d.ting = {};
//平胡 arr0 手牌 card 摸得牌 arrs 所有手牌 jings 万能牌[正,副]
d.ting.JING8_zhen_hu = function (arr0, card, arrs, jings) {
var JING = [jings[0], jings[1]];
var jing_arr = [];
var arr = arr0.concat(card);
Util.ordArray(arr);
var hu = d.ting.hu(arr);
var hu_bool = d.ting.hu_bool(hu);
if (hu_bool) {
if (hu.jiang && hu.jiang.length > 0) {
var jiangarr = [];
for (var i = 0; i < hu.jiang.length; i++) {
jiangarr[jiangarr.length] = hu.jiang[i][0];
}
}
return hu_bool;
}
//剔除癞子
var JING_num = 0;
for (var i = 0; i < JING.length; i++) {
var jing_nul = 0;
for (var j = 0; j < arr.length; j++) {
var pos = arr.indexOf(JING[i]);
if (pos != -1 && jing_nul == 0) {
jing_arr[jing_arr.length] = arr[pos];
arr[pos] = 99;
JING_num += 1;
}
else if (pos != -1 && jing_nul == 1) {
arr[pos] = 999;
jing_nul = 0;
}
else {
break;
}
}
var pos = arr.indexOf(999);
if (pos != -1) {
arr[pos] = JING[i];
}
}
if(JING_num==0) {
return 0;
}
Util.ordArray(arr);
var pos = arr.indexOf(99);
if (pos != -1) {
arr.splice(pos);
}
var hu = 0;
if(arr.length<=1&&JING_num>=1){
return true;
}
hu = d.ting.class_JING8(arr, JING_num, JING, jing_arr, card).r;
return hu;
};
//七对胡判断 arrs 所有手牌
d.ting.heck7D_jing = function (arrs, jings, card) {
if (d.ting.check7D(arrs)) {
return 1;
}
//手牌0都是对 arr已剔除癞子
for (var i = 1; i < arrs.length; i++) {
if (arrs[i].length > 0) {
return 0;
}
}
var arr1 = Util.copyArray(arrs[0]);
Util.ordArray(arr1);
var JING = [jings[0], jings[1]];
var jing_arr = [];
//癞子数量
var JING_num = 0, jing_reduce = 0;
for (var i = 0; i < JING.length; i++) {
var jing_nul = 0;
for (var j = 0; j < arr1.length; j++) {
var pos = arr1.indexOf(JING[i]);
if (pos != -1 && jing_nul == 0) {
jing_arr[jing_arr.length] = arr1[pos];
arr1[pos] = 99;
JING_num += 1;
}
else if (pos != -1 && jing_nul == 1) {
arr1[pos] = 999;
jing_nul = 0;
}
else {
break;
}
}
var pos = arr1.indexOf(999);
if (pos != -1) {
arr1[pos] = JING[i];
}
}
Util.ordArray(arr1);
//console.log(arr1);
var pos = arr1.indexOf(99);
if (pos != -1) {
arr1.splice(pos);
}
var next = 0;
for (i = 0; i < arr1.length; i++) {
if (i < next) {
continue;
}
if (arr1[i + 1] && arr1[i] == arr1[i + 1]) {
next = i + 2;
}
else if (JING_num > 0) {
JING_num -= 1;
var pos = jing_arr.indexOf(arr1[i])
if (pos != -1) {
jing_reduce += 1;
jing_arr.splice(pos, 1);
}
}
else {
return 0;
}
}
return 1;//1七对 2龙七对
}
//十三烂胡判断 arr 所有手牌
d.ting.check13L_jing = function (arr, jings, card) {
if (d.ting.check13L(arr)) {
return 1;
}
//不靠
for (var i = 1; i < arr.length; i++) {
if (arr[i]) {
return 0;
}
}
var jing_reduce = 0;
var arr1 = Util.copyArray(arr[0]);
Util.ordArray(arr1);
var JING = [jings[0], jings[1]];
var jing_arr = [];
//癞子数量
var JING_num = 0;
for (var i = 0; i < JING.length; i++) {
var jing_nul = 0;
for (var j = 0; j < arr1.length; j++) {
var pos = arr1.indexOf(JING[i]);
if (pos != -1 && jing_nul == 0) {
jing_arr[jing_arr.length] = arr1[pos];
arr1[pos] = 99;
JING_num += 1;
}
else if (pos != -1 && jing_nul == 1) {
arr1[pos] = 999;
jing_nul = 0;
}
else {
break;
}
}
var pos = arr1.indexOf(999);
if (pos != -1) {
arr1[pos] = JING[i];
}
}
//剔除癞子
Util.ordArray(arr1);
var pos = arr1.indexOf(99);
if (pos != -1) {
arr1.splice(pos);
}
//判断东南西北中发白
var xing7 = 0;
var arr_Contrast = [31, 32, 33, 34, 41, 42, 43];
var arr2 = [];
for (var i = 0; i < 7; i++) {
var pos = arr1.indexOf(arr_Contrast[i]);
if (pos != -1) {
arr2 = arr1.slice(pos);
arr1.splice(pos);
break;
}
}
var l = arr2.length;
if (l > 7) {
return 0;
}
var n = 0;
var ready_use_num = 0;
for (var i = 0; i < 7; i++) {
var pos = arr2.indexOf(arr_Contrast[i]);
if (pos != -1) {
arr2.splice(pos, 1);
n += 1;
}
else if (pos == -1 && jing_arr.indexOf(arr_Contrast[i]) != -1 && JING_num > 0) {
var pos1 = jing_arr.indexOf(arr_Contrast[i]);
if (pos1 != -1) {
jing_reduce += 1;
jing_arr.splice(pos1, 1);
}
JING_num -= 1;
n += 1;
}
else if (pos == -1 && jing_arr.indexOf(arr_Contrast[i]) == -1 && JING_num > 0) {
ready_use_num += 1;
}
}
if (arr2.length == 0) {
if (n == 7) {
xing7 = 1;
}//可以7星
}
else {
return 0;
}
var ban = 0;
//癞子分配给序数牌
var arr3 = [];
for (i = 0; i < 3; i++) {
arr3[i] = [];
}
for (i = 0; i < arr1.length; i++) {
if (arr1[i] < 10) {
arr3[0][arr3[0].length] = arr1[i];
}
else if (arr1[i] < 20) {
arr3[1][arr3[1].length] = arr1[i];
}
else if (arr1[i] < 30) {
arr3[2][arr3[2].length] = arr1[i];
}
}
var n = 0;
for (i = 0; i < 3; i++) {
if (arr3[i].length == 2) {
if (arr3[i][0] % 10 == 2 && arr3[i][1] % 10 == 7 || arr3[i][0] % 10 == 3 && arr3[i][1] % 10 == 7 || arr3[i][0] % 10 == 3 && arr3[i][1] % 10 == 8) {
n += 0;
}
else {
n += 1;
if (JING_num > 0) {
var ban1 = [0, 0];
if (jing_arr.indexOf(jings[0]) != -1) {
var test_arr = arr3[i].concat(jings[0]);
Util.ordArray(test_arr);
ban1[0] = 1;
}
if (jing_arr.indexOf(jings[1]) != -1) {
var test_arr1 = arr3[i].concat(jings[1]);
Util.ordArray(test_arr1);
ban1[1] = 1;
}
if (i == 0 && jings[0] < 10 && jings[0] > 0 && arr3[i][0] < 10 && arr3[i][0] > 0) {
if (ban1[0] == 1 && test_arr[0] < test_arr[1] - 2 && test_arr[1] < test_arr[2] - 2) {
var pos = jing_arr.indexOf(jings[0]);
if (pos != -1) {
jing_arr.splice(pos, 1);
jing_reduce += 1;
}
}
if (ban1[1] == 1 && test_arr1[0] < test_arr1[1] - 2 && test_arr1[1] < test_arr1[2] - 2) {
var pos = jing_arr.indexOf(jings[0]);
if (pos != -1) {
jing_arr.splice(pos, 1);
jing_reduce += 1;
}
}
}
else if (i == 1 && jings[0] < 20 && jings[0] > 0 && arr3[i][0] < 20 && arr3[i][0] > 10) {
if (ban1[0] == 1 && test_arr[0] < test_arr[1] - 2 && test_arr[1] < test_arr[2] - 2) {
var pos = jing_arr.indexOf(jings[0]);
if (pos != -1) {
jing_arr.splice(pos, 1);
jing_reduce += 1;
}
}
if (ban1[1] == 1 && test_arr1[0] < test_arr1[1] - 2 && test_arr1[1] < test_arr1[2] - 2) {
var pos = jing_arr.indexOf(jings[0]);
if (pos != -1) {
jing_arr.splice(pos, 1);
jing_reduce += 1;
}
}
}
else if (i == 2 && jings[0] < 30 && jings[0] > 20 && arr3[i][0] < 30 && arr3[i][0] > 20) {
if (ban1[0] == 1 && test_arr[0] < test_arr[1] - 2 && test_arr[1] < test_arr[2] - 2) {
var pos = jing_arr.indexOf(jings[0]);
if (pos != -1) {
jing_arr.splice(pos, 1);
jing_reduce += 1;
}
}
if (ban1[1] == 1 && test_arr1[0] < test_arr1[1] - 2 && test_arr1[1] < test_arr1[2] - 2) {
var pos = jing_arr.indexOf(jings[0]);
if (pos != -1) {
jing_arr.splice(pos, 1);
jing_reduce += 1;
}
}
}
}
}
}
else if (arr3[i].length == 3) {
n += 0;
}
else if (arr3[i].length == 1) {
n += 2;
if (JING_num > 0) {
var ban1 = [0, 0];
if (jing_arr.indexOf(jings[0]) != -1) {
var test_arr = arr3[i].concat(jings[0]);
Util.ordArray(test_arr);
ban1[0] = 1;
}
if (jing_arr.indexOf(jings[1]) != -1) {
var test_arr1 = arr3[i].concat(jings[1]);
Util.ordArray(test_arr1);
ban1[1] = 1;
}
if (i == 0 && jings[0] < 10 && jings[0] > 0 && arr3[i][0] < 10 && arr3[i][0] > 0) {
if (ban1[0] == 1 && test_arr[0] < test_arr[1] - 2 && test_arr[1] < test_arr[2] - 2) {
var pos = jing_arr.indexOf(jings[0]);
if (pos != -1) {
jing_arr.splice(pos, 1);
jing_reduce += 1;
}
}
if (ban1[1] == 1 && test_arr1[0] < test_arr1[1] - 2 && test_arr1[1] < test_arr1[2] - 2) {
var pos = jing_arr.indexOf(jings[0]);
if (pos != -1) {
jing_arr.splice(pos, 1);
jing_reduce += 1;
}
}
}
else if (i == 1 && jings[0] < 20 && jings[0] > 0 && arr3[i][0] < 20 && arr3[i][0] > 10) {
if (ban1[0] == 1 && test_arr[0] < test_arr[1] - 2 && test_arr[1] < test_arr[2] - 2) {
var pos = jing_arr.indexOf(jings[0]);
if (pos != -1) {
jing_arr.splice(pos, 1);
jing_reduce += 1;
}
}
if (ban1[1] == 1 && test_arr1[0] < test_arr1[1] - 2 && test_arr1[1] < test_arr1[2] - 2) {
var pos = jing_arr.indexOf(jings[0]);
if (pos != -1) {
jing_arr.splice(pos, 1);
jing_reduce += 1;
}
}
}
else if (i == 2 && jings[0] < 30 && jings[0] > 20 && arr3[i][0] < 30 && arr3[i][0] > 20) {
if (ban1[0] == 1 && test_arr[0] < test_arr[1] - 2 && test_arr[1] < test_arr[2] - 2) {
var pos = jing_arr.indexOf(jings[0]);
if (pos != -1) {
jing_arr.splice(pos, 1);
jing_reduce += 1;
}
}
if (ban1[1] == 1 && test_arr1[0] < test_arr1[1] - 2 && test_arr1[1] < test_arr1[2] - 2) {
var pos = jing_arr.indexOf(jings[0]);
if (pos != -1) {
jing_arr.splice(pos, 1);
jing_reduce += 1;
}
}
}
}
}
else if (arr3[i].length == 0) {
n += 3;
if (JING_num > 0) {
var ban1 = [0, 0];
if (jing_arr.indexOf(jings[0]) != -1) {
var test_arr = arr3[i].concat(jings[0]);
Util.ordArray(test_arr);
ban1[0] = 1;
}
if (jing_arr.indexOf(jings[1]) != -1) {
var test_arr1 = arr3[i].concat(jings[1]);
Util.ordArray(test_arr1);
ban1[1] = 1;
}
if (i == 0 && jings[0] < 10 && jings[0] > 0 && arr3[i][0] < 10 && arr3[i][0] > 0) {
if (ban1[0] == 1 && test_arr[0] < test_arr[1] - 2 && test_arr[1] < test_arr[2] - 2) {
var pos = jing_arr.indexOf(jings[0]);
if (pos != -1) {
jing_arr.splice(pos, 1);
jing_reduce += 1;
}
}
if (ban1[1] == 1 && test_arr1[0] < test_arr1[1] - 2 && test_arr1[1] < test_arr1[2] - 2) {
var pos = jing_arr.indexOf(jings[0]);
if (pos != -1) {
jing_arr.splice(pos, 1);
jing_reduce += 1;
}
}
}
else if (i == 1 && jings[0] < 20 && jings[0] > 0 && arr3[i][0] < 20 && arr3[i][0] > 10) {
if (ban1[0] == 1 && test_arr[0] < test_arr[1] - 2 && test_arr[1] < test_arr[2] - 2) {
var pos = jing_arr.indexOf(jings[0]);
if (pos != -1) {
jing_arr.splice(pos, 1);
jing_reduce += 1;
}
}
if (ban1[1] == 1 && test_arr1[0] < test_arr1[1] - 2 && test_arr1[1] < test_arr1[2] - 2) {
var pos = jing_arr.indexOf(jings[0]);
if (pos != -1) {
jing_arr.splice(pos, 1);
jing_reduce += 1;
}
}
}
else if (i == 2 && jings[0] < 30 && jings[0] > 20 && arr3[i][0] < 30 && arr3[i][0] > 20) {
if (ban1[0] == 1 && test_arr[0] < test_arr[1] - 2 && test_arr[1] < test_arr[2] - 2) {
var pos = jing_arr.indexOf(jings[0]);
if (pos != -1) {
jing_arr.splice(pos, 1);
jing_reduce += 1;
}
}
if (ban1[1] == 1 && test_arr1[0] < test_arr1[1] - 2 && test_arr1[1] < test_arr1[2] - 2) {
var pos = jing_arr.indexOf(jings[0]);
if (pos != -1) {
jing_arr.splice(pos, 1);
jing_reduce += 1;
}
}
}
}
}
}
if (JING_num - n > ready_use_num) {
return 0;
}
for (i = 0; i < arr1.length - 1; i++) {
if (arr1[i] < arr1[i + 1] - 2 && arr1[i + 1] < 10) {
}
else if (arr1[i] < 10 && arr1[i + 1] >= 10) {
}
else if (arr1[i] < arr1[i + 1] - 2 && arr1[i] >= 10 && arr1[i + 1] < 20) {
}
else if (arr1[i] < 20 && arr1[i + 1] >= 20) {
}
else if (arr1[i] < arr1[i + 1] - 2 && arr1[i] >= 20 && arr1[i + 1] < 30) {
}
else {
ban = 1;
break;
}
}
if (ban == 0) {
return 1 + xing7;
}//1:13烂,2:7星13烂
return 0;
}
//清一色 arrs 所有手牌
d.ting.checkQ1s = function(arrs){
var arr1 = Util.copyArray(arrs[0]);
for (var i = 1; i < arr1.length; i++) {
arr1 = arr1.concat(arr1[i]);
}
if(hu_ting.Q1s_pai && arr1.length != hu_ting.Q1s_pai){
return false;
}
Util.ordArray(arr1);
if(arr1[0] > 0 && arr1[arr1.length-1] < 10){
return true;
}else if(arr1[0] > 10 && arr1[arr1.length-1] < 20){
return true;
}else if(arr1[0] > 20 && arr1[arr1.length-1] < 30){
return true;
}
return false;
}
//字一色 arrs 所有手牌
d.ting.checkZ1s = function(arrs){
var arr1 = Util.copyArray(arrs[0]);
for (var i = 1; i < arr1.length; i++) {
arr1 = arr1.concat(arr1[i]);
}
if(hu_ting.Z1s_pai && arr1.length != hu_ting.Z1s_pai){
return false;
}
Util.ordArray(arr1);
if(arr1[0] > 30 && arr1[arr1.length-1] < 44){
return true;
}
return false;
}
d.ting.check13L = function (arr) {
var xing7=0;
//不靠
for (var i = 1; i < arr.length; i++) {
if (arr[i]) {
return 0;
}
}
var arr1 = Util.copyArray(arr[0]);
Util.ordArray(arr1);
//判断东南西北中发白
var arr_Contrast = [31, 32, 33, 34, 41, 42, 43];
var arr2 = [];
for (var i = 0; i < 7; i++) {
var pos = arr1.indexOf(arr_Contrast[i]);
if (pos != -1) {
arr2 = arr1.slice(pos);
arr1.splice(pos);
break;
}
}
if (arr2.length == 7) {xing7=1;
}
for (var i = 0; i < 7; i++) {
var pos = arr2.indexOf(arr_Contrast[i]);
if (pos != -1) {
arr2.splice(pos, 1);
}
}
if (arr2.length == 0) {
}
else {
return 0;
}
//147、258、369//是否不相连
var ban = 0;
for (i = 0; i < arr1.length - 1; i++) {
if (arr1[i] < arr1[i + 1] - 2 && arr1[i + 1] < 10) {
}
else if (arr1[i] < 10 && arr1[i + 1] >= 10) {
}
else if (arr1[i] < arr1[i + 1] - 2 && arr1[i] >= 10 && arr1[i + 1] < 20) {
}
else if (arr1[i] < 20 && arr1[i + 1] >= 20) {
}
else if (arr1[i] < arr1[i + 1] - 2 && arr1[i] >= 20 && arr1[i + 1] < 30) {
}
else {
ban = 1;
break;
}
}
if (ban == 0) {
return 1+xing7;
}
return 0;
}
d.ting.check7D = function (arr) {
//手牌0都是对
var arr1 = Util.copyArray(arr[0]);
Util.ordArray(arr1);
for (var i = 1; i < arr.length; i++) {
if (arr[i].length > 0) {
return 0;
}
arr1 = arr1.concat(arr[i]);
}
Util.ordArray(arr1);
var n = 0;
for (i = 0; i < parseInt(arr1.length / 2); i++) {
if (arr1[i * 2] == arr1[i * 2 + 1]) {
n += 1;
}
else {
return 0;
}
}
if (n == 7) {
return 24;
}
return 0;
}
//平胡判断第2步
d.ting.class_JING8 = function (arr, JING_num, jing, jing_arr, card) {
var hu = {"r": 0}, jing_arr1 = Util.copyArray(jing_arr);
//arr 手牌,不包括副露 card他家出或自家摸的牌
if (hu.r == 0) {//剔除1将 1癞
hu = d.ting.class_JING8_1jing(arr, JING_num, jing, jing_arr1, card);
//console.log("111剔除1将 1癞" + JSON.stringify(hu) + "/" + hu.r);
}
if (hu.r == 0) {//剔除0将 2癞
//console.log("000剔除0将 2癞" + JSON.stringify(hu));
hu = d.ting.class_JING8_2jing(arr, JING_num, jing, jing_arr1, card);
//console.log("111剔除0将 2癞" + JSON.stringify(hu));
}
if (hu.r == 0) {//得出2将,剔除2将
var JING_num1 = JING_num;
var r = d.ting.classify_un_Pair(arr, 0);
//console.log(JSON.stringify(hu)+"剔除2将" + JSON.stringify(r));
if (r.jiang) {
var jing_reduce = 0;
var hu = d.ting.class_JING8_1(r, arr, JING_num1, jing, jing_arr1, jing_reduce);
}
}
return hu;
}
//平胡判断(剔除2个癞子后的牌)
d.ting.class_JING8_2jing = function (arr, JING_num, jing, jing_arr1, card) {//剔除0将 2癞
var hu = {"r": 0};
var JING_num1 = JING_num;
if (JING_num1 < 2) {
return hu;
}
var jing_reduce = 0;
JING_num1 -= 2;
var ban = 0;
for (var i = 0; i < jing_arr1.length - 1; i++) {
if (jing_arr1[i] == jing_arr1[i + 1]) {
jing_arr1.splice(i, 2);
ban = 1;
jing_reduce = 2;
break;
}
}
if (ban == 0) {
jing_reduce = 1;
jing_arr1.splice(0, 2);
}
var r = [];
//console.log("剔除0将 2癞");
r[0] = Util.copyArray(arr);
var hu = d.ting.class_JING8_1(r, arr, JING_num1, jing, jing_arr1, jing_reduce);
return hu;
}
//平胡判断(剔除1个牌和1个癞子后的牌)
d.ting.class_JING8_1jing = function (arr, JING_num, jing, jing_arr1, card) {//剔除1将 1癞
var hu = {"r": 0};
var JING_num1 = JING_num;
if (JING_num == 0){
return hu;
}
var jing_reduce = 0;
JING_num1 -= 1;
jing_arr1.splice(0, 1);
var r = [];
//console.log("剔除1将 1癞=" + JING_num);
for (var i = 0; i < arr.length; i++) {
r[i] = Util.copyArray(arr);
r[i].splice(i, 1);
}
var hu = d.ting.class_JING8_1(r, arr, JING_num1, jing, jing_arr1, jing_reduce);
return hu;
}
//平胡判断第3步
d.ting.class_JING8_1 = function (r, arr, JING_num1, jing, jing_arr1, jing_reduce) {
var hu = {"r": 0, "jing_reduce": 0};
//arr 手牌,不包括副露 card他家出或自家摸的牌
//console.log(r);
if (r && r.length && r[0] && r[0].length) {//牌型万饼条风箭分类
for (var i = 0; i < r.length; i++) {
var arr1 = [], arr_need = [], hus = [-1, -1, -1, -1, -1];
var JING_num = JING_num1;
var con = 0;
for (var j = 0; j < 5; j++) {
arr1[j] = [];
arr_need[j] = [];
}
for (var j = 0; j < r[i].length; j++) {
if (r[i][j] < 10) {
arr1[0][arr1[0].length] = r[i][j];
}
else if (r[i][j] < 20) {
arr1[1][arr1[1].length] = r[i][j];
}
else if (r[i][j] < 30) {
arr1[2][arr1[2].length] = r[i][j];
}
else if (r[i][j] < 40) {
arr1[3][arr1[3].length] = r[i][j];
}
else if (r[i][j] < 50) {
arr1[4][arr1[4].length] = r[i][j];
}
}
//console.log(JING_num + "class_JING8_1=" + JSON.stringify(arr1));
//需要的癞子范围
if (arr1[0].length > 0) {
hus[0] = 0;
Util.ordArray(arr1[0]);
var r1 = d.ting.judge_shu_JING8(arr1[0], JING_num, jing);
if (r1.r) {
hus[0] = 1;
JING_num = r1.JING_num;
}
else {
con = 1;
}
}
if (arr1[1].length > 0) {
hus[1] = 0;
}
if (con == 0 && arr1[1].length > 0) {
Util.ordArray(arr1[1]);
var r1 = d.ting.judge_shu_JING8(arr1[1], JING_num, jing);
if (r1.r) {
hus[1] = 1;
JING_num = r1.JING_num;
}
else {
con = 1;
}
}
if (arr1[2].length > 0) {
hus[2] = 0;
}
if (con == 0 && arr1[2].length > 0) {
hus[2] = 0;
Util.ordArray(arr1[2]);
var r1 = d.ting.judge_shu_JING8(arr1[2], JING_num, jing);
if (r1.r) {
hus[2] = 1;
JING_num = r1.JING_num;
}
else {
con = 1;
}
}
if (arr1[3].length > 0) {
hus[3] = 0;
}
if (con == 0 && arr1[3].length > 0) {
var r1 = d.ting.judge_feng_JING8(arr1[3], JING_num, jing);
if (r1 && r1.r && r1.r == 1 && r1.JING_num != undefined) {
JING_num = r1.JING_num;
if (r1.jing_reduce) {
jing_reduce += r1.jing_reduce;
}
}
else {
con = 1;
}
if (con == 0) {
hus[3] = 1;
}
}
if (arr1[4].length > 0) {
hus[4] = 0;
}
if (con == 0 && arr1[4].length > 0) {
Util.ordArray(arr1[4]);
var r1 = d.ting.judge_zi_JING8(arr1[4], JING_num, jing);
if (r1 && r1.r && r1.r == 1 && r1.JING_num != undefined) {
JING_num = r1.JING_num;
if (r1.jing_reduce) {
jing_reduce += r1.jing_reduce;
}
}
else {
con = 1;
}
if (con == 0) {
hus[4] = 1;
}
}
//console.log(JING_num + "class_JING8_11111=" + JSON.stringify(hus));
//得出牌组 判断是否胡
var pos = hus.indexOf(0);
if (pos == -1) {
hu.r = 1 + i;
hu.jing_reduce = jing_reduce;
return hu;
}
}
}
else if (r&&r[0].length==0) {
hu.r = 1;
return hu;
}
return hu;
}
//平胡判断(风牌是否胡)
d.ting.judge_feng_JING8 = function (arr1, JING_num, jing) {
var hu_win = 0, jing_reduce = 0;
if(hu_ting.feng_shun==0)//风牌不作顺子
{
if (arr1.length == 15) {hu_win = 0;
}
else if (arr1.length+JING_num>=3) {
var res=d.ting.checkKZ_jing(arr1,JING_num);
if (res.r) {
hu_win = 1;
JING_num = res.num;
}
}
}
else if(hu_ting.feng_shun==1)//风牌作顺子
{
//15张 必胡
if (arr1.length == 15) {
hu_win = 1;
}
//14张 有1精必胡
if (arr1.length == 14) {
if (hu_win == 0 && JING_num >= 1) {
hu_win = 1;
JING_num -= 1;
}
}
//13张 有2精必胡
if (arr1.length == 13) {
if (hu_win == 0 && JING_num >= 2) {
hu_win = 1;
JING_num -= 2;
}
}
//12张 判断12张必胡 有3精必胡
if (arr1.length == 12) {
hu_win = 1;
}
//11张 枚举1精必胡 判断12张 有4精必胡
if (arr1.length == 11) {
var hu_win = 0;
if (hu_win == 0 && JING_num >= 1) {
hu_win = 1;
JING_num -= 1;
}
}
//10张 枚举2精必胡 判断12张 枚举5精必胡
if (arr1.length == 10) {
var hu_win = 0;
if (hu_win == 0 && JING_num >= 2) {
hu_win = 1;
JING_num -= 2;
}
}
//9张 判断9张 枚举3精必胡 判断12张 有6精必胡
if (arr1.length == 9) {
var hu_win = 0;
var res = d.ting.check9Pai(arr1);
if (res.r) {
hu_win = 1;
}
if (hu_win == 0 && JING_num >= 3) {
hu_win = 1;
JING_num -= 3;
}
}
//8张 枚举1精必胡 判断9张 枚举4精 判断12张 有7精必胡
if (arr1.length == 8) {
var hu_win = 0;
if (hu_win == 0 && JING_num >= 1) {
hu_win = 1;
JING_num -= 1;
}
}
//7张 枚举2精 必胡
if (arr1.length == 7) {
var hu_win = 0;
if (hu_win == 0 && JING_num >= 2) {
hu_win = 1;
JING_num -= 2;
}
}
//6张 判断6张 有3精 必胡
if (arr1.length == 6) {
var hu_win = 0;
var res = d.ting.check6Pai(arr1);
if (res.r) {
hu_win = 1;
}
if (hu_win == 0 && JING_num >= 3) {
hu_win = 1;
JING_num -= 3;
}
}
//5张 有1精 必胡
if (arr1.length == 5) {
var hu_win = 0;
if (hu_win == 0 && JING_num >= 1) {
hu_win = 1;
JING_num -= 1;
}
}
//4张 有2精 必胡
if (arr1.length == 4) {
var hu_win = 0;
if (hu_win == 0 && JING_num >= 2) {
hu_win = 1;
JING_num -= 2;
}
}
//3张 判断3张 有3精 必胡
if (arr1.length == 3) {
var hu_win = 0;
var res = d.ting.check3Pai(arr1);
if (res.r) {
hu_win = 1;
}
if (hu_win == 0 && JING_num >= 3) {
hu_win = 1;
JING_num -= 3;
}
}
//2张 有1精 必胡
if (arr1.length == 2) {
var hu_win = 0;
if (hu_win == 0 && JING_num >= 1) {
hu_win = 1;
JING_num -= 1;
}
}
//1张 有2精 必胡
if (arr1.length == 1) {
var hu_win = 0;
if (hu_win == 0 && JING_num >= 2) {
hu_win = 1;
JING_num -= 2;
}
}
}
var r = {"r": hu_win, "JING_num": JING_num, "jing_reduce": jing_reduce};
return r;
}
//判断都是3刻子 (补足3的倍数)
d.ting.checkKZ_jing = function (arr0,JING_num) {
var arr1=Util.copyArray(arr0);
Util.ordArray(arr1);
var r = {"r": 0, "num": 0};
var next = 0;
for (i = 0; i < arr1.length - 1; i++) {
if (i < next) {
continue;
}
if (arr1[i + 2] && arr1[i + 1] && arr1[i] == arr1[i + 1] && arr1[i] == arr1[i + 2]) {
next = i + 3;
}
else if (JING_num > 0 && arr1[i + 1] && arr1[i] == arr1[i + 1]) {
next = i + 2;
JING_num -= 1;
}
else if (JING_num > 0) {
JING_num -= 2;
}
else {
return r;
}
}
r.num = JING_num;
if (JING_num % 3 == 0) {
}
else {r.r=0;
return r;
}
r.r = 1;
return r;
}
//平胡判断(字牌是否胡)
d.ting.judge_zi_JING8 = function (arr1, JING_num, jing) {
var hu_win = 0, jing_reduce = 0;
if(hu_ting.feng_shun==0)//风牌不作顺子
{
if (arr1.length+JING_num>=3) {
var res=d.ting.checkKZ_jing(arr1,JING_num);
if (res.r) {
hu_win = 1;
JING_num = res.num;
}
}
}
else if(hu_ting.feng_shun==1)//风牌作顺子
{
//12张 判断12张
if (arr1.length == 12) {
var hu_win = 1;
}
//11张 枚举1精 必胡
if (arr1.length == 11) {
var hu_win = 0;
if (JING_num >= 1) {
hu_win = 1;
JING_num -= 1;
}
}
//10张 枚举2精 判断12张
if (arr1.length == 10) {
var hu_win = 0;
if (JING_num >= 2) {
hu_win = 1;
JING_num -= 2;
}
}
//9张 判断9张 枚举3精 判断12张
if (arr1.length == 9) {
var hu_win = 0;
var res = d.ting.check9Pai(arr1);
if (res.r) {
hu_win = 1;
}
if (hu_win == 0 && JING_num >= 3) {
hu_win = 1;
JING_num -= 3;
}
}
//8张 枚举1精 必胡
if (arr1.length == 8) {
var hu_win = 0;
if (hu_win == 0 && JING_num >= 1) {
hu_win = 1;
JING_num -= 1;
}
}
//7张 枚举2精 必胡
if (arr1.length == 7) {
var hu_win = 0;
if (hu_win == 0 && JING_num >= 2) {
hu_win = 1;
JING_num -= 2;
}
}
//6张 判断6张 有3精 必胡
if (arr1.length == 6) {
var hu_win = 0;
var res = d.ting.check6Pai(arr1);
if (res.r) {
hu_win = 1;
}
if (hu_win == 0 && JING_num >= 3) {
hu_win = 1;
JING_num -= 3;
}
}
//5张 有1精 必胡
if (arr1.length == 5) {
var hu_win = 0;
if (hu_win == 0 && JING_num >= 1) {
hu_win = 1;
JING_num -= 1;
}
}
//4张 有2精 必胡
if (arr1.length == 4) {
var hu_win = 0;
if (hu_win == 0 && JING_num >= 2) {
hu_win = 1;
JING_num -= 2;
}
}
//3张 判断3张 有3精 必胡
if (arr1.length == 3) {
var hu_win = 0;
var res = d.ting.check3Pai(arr1);
if (res.r) {
hu_win = 1;
}
if (hu_win == 0 && JING_num >= 3) {
hu_win = 1;
JING_num -= 3;
}
}
//2张 有1精 必胡
if (arr1.length == 2) {
var hu_win = 0;
if (hu_win == 0 && JING_num >= 1) {
hu_win = 1;
JING_num -= 1;
}
}
//1张 有2精 必胡
if (arr1.length == 1) {
var hu_win = 0;
if (hu_win == 0 && JING_num >= 2) {
hu_win = 1;
JING_num -= 2;
}
}
}
var r = {"r": hu_win, "JING_num": JING_num, "jing_reduce": jing_reduce};
return r;
}
//平胡判断(序数牌是否胡)
d.ting.judge_shu_JING8 = function (arr1, JING_num,jing) {
var hu_win = 0;
var jing_reduce = 0;
var jing_num =d.newHu.needLai(arr1);
if(jing_num<=JING_num){
hu_win=1;
JING_num-=jing_num;
}
var r = {"r": hu_win, "JING_num": JING_num, "jing_reduce": jing_reduce};
return r;
}
//是否真胡
d.ting.hu0 = function (arr0) {
d.ord(arr0);
var len = arr0.length;
var hu = 0;
var res = 0;//if(res.r && res.r.length>0)
if (len == 0) {
res = 100;
hu = 1;
}
else if (len < 3) {
res = 0;
hu = 0;
}
else if (len == 3) {
var res = d.ting.check3Pai(arr0);
if (res.r && res.r.length > 0) {
hu = 1;
}
}
else if (len == 6) {
var res = d.ting.check6Pai(arr0);
if (res.r && res.r.length > 0) {
hu = 1;
}
}
else if (len == 9) {
var res = d.ting.check9Pai(arr0);
if (res.r && res.r.length > 0) {
hu = 1;
}
}
else if (len == 12) {
var res = d.ting.check12Pai(arr0);
if (res.r && res.r.length > 0) {
hu = 1;
}
}
else if(len==15)
{var res=d.ting.check15Pai(arr0);
if (res.r && res.r.length > 0) {
hu = 1;
}
}
return hu;
}
//是否真胡的判断1 arr:是arr[0]加上摸的牌
d.ting.hu = function (arr, jiang) {
jiang = jiang || 0;
var arr1 = Util.copyArray(arr);
if (arr1.length == 2) {
if (arr1[0] == arr1[1]) {
var hu = {};
hu.jiang = [[arr1[0]]];
hu.type = [[4]];
return hu;
}
else {
var hu = {};
hu.jiang = [];
hu.type = [];
return hu;
}
}
var r = d.ting.classify_un_Pair(arr1, jiang);
//length<=12
var hu = {};
hu.jiang = [];
hu.type = [];
var n = 0;
// if(r.length)
// {hu.type[n]=0;hu.jiang[n]=0;}
for (i = 0; i < r.length; i++) {
var len = r[i].length;
if (len == 0) {
hu.type[n] = 100;
hu.jiang[n] = r.jiang[i];
n += 1;
}
else if (len < 3 || r.jiang == 0) {
hu.type[n] = 0;
hu.jiang[n] = 0;
n += 1;
}
else if (len == 3) {
var res = d.ting.check3Pai(r[i]);
if (res.r) {
hu.type[n] = res;
hu.jiang[n] = r.jiang[i];
n += 1;
}
}
else if (len == 6) {
var res = d.ting.check6Pai(r[i]);
if (res.r) {
hu.type[n] = res;
hu.jiang[n] = r.jiang[i];
n += 1;
}
}
else if (len == 9) {
var res = d.ting.check9Pai(r[i]);
if (res.r) {
hu.type[n] = res;
hu.jiang[n] = r.jiang[i];
n += 1;
}
}
else if (len == 12) {
var res = d.ting.check12Pai(r[i]);
if (res.r) {
hu.type[n] = res;
hu.jiang[n] = r.jiang[i];
n += 1;
}
}
else if (len == 15) {
var res = d.ting.check15Pai(r[i]);
if (res.r) {
hu.type[n] = res;
hu.jiang[n] = r.jiang[i];
n += 1;
}
}
}
return hu;
}
//胡的基础算法
//1 顺 2 刻 3 杠
//检测3张是否胡牌、记录杠刻顺&判断番型、分数
d.ting.check3Pai = function (arr) {
var result = {};
result.arr = [arr];
result.r = 0;
if (d.ting.checkABCPai(arr)) {
result.r = [1];
}
if (d.ting.checkAAAPai(arr)) {
result.r = [2];
}
return result;
}
//检测4张是否胡牌、记录杠刻顺&判断番型、分数
d.ting.check4Pai = function (arr) {
var result = {};
result.arr = [arr];
result.r = 0;
if (d.ting.checkAAAAPai(arr)) {
result.r = [3];
}
return result;
}
//检测6张是否胡牌、记录杠刻顺&判断番型、分数
d.ting.check6Pai = function (arr) {
var result = {};
result.arr = [];
result.r = 0;
var arr1 = [arr[0], arr[1], arr[2]];
var c0 = d.ting.check3Pai(arr1);
var arr1 = [arr[3], arr[4], arr[5]];
var c1 = d.ting.check3Pai(arr1);
if (c0.r && c1.r) {
result.r = c0.r.concat(c1.r);
result.arr = c0.arr.concat(c1.arr);
return result;
}
//特殊三连顺 AABBCC ABBCCD
var r1 = d.ting.check3shunPai(arr);
if (r1.r) {
result.r = r1.r;
result.arr = r1.arr;
return result;
}
//第一张牌四连张
if (d.ting.checkAAAAPai(arr)) {
var arr1 = [arr[3], arr[4], arr[5]];
if (d.ting.checkABCPai(arr1)) {
result.r = [2, 1];
result.arr = [[arr[0], arr[1], arr[2]], arr1];
return result;
}
}
//第二张牌四连张
var arr1 = [arr[1], arr[2], arr[3], arr[4]];
if (d.ting.checkAAAAPai(arr1)) {
var arr2 = [arr[0], arr[4], arr[5]];
if (d.ting.checkABCPai(arr2)) {
result.r = [1, 2];
result.arr = [arr2, [arr[1], arr[2], arr[3]]];
return result;
}
}
//第三张牌四连张
var arr1 = [arr[2], arr[3], arr[4], arr[5]];
if (d.ting.checkAAAAPai(arr1)) {
var arr2 = [arr[0], arr[1], arr[2]];
if (d.ting.checkABCPai(arr2)) {
result.r = [1, 2];
result.arr = [arr2, [arr[3], arr[4], arr[5]]];
return result;
}
}
return 0;
}
//检测7张是否胡牌、记录杠刻顺&判断番型、分数
d.ting.check7Pai = function (arr) {
var result = {};
result.arr = [];
result.r = 0;
//第一张牌四重张
if (d.ting.checkAAAAPai(arr)) {
var arr1 = [arr[4], arr[5], arr[6]];
var c0 = d.ting.check3Pai(arr1);
if (c0.r) {
result.r = [3].concat(c0.r);
result.arr = [[arr[0], arr[1], arr[2], arr[3]], arr1];
return result;
}
}
//第一张牌三连/重张
var arr1 = [arr[0], arr[1], arr[2]]
var c0 = d.ting.check3Pai(arr1);
var arr1 = [arr[3], arr[4], arr[5], arr[6]];
var c1 = d.ting.checkAAAAPai(arr1);
if (c0.r && c1) {
result.r = c0.r.concat([3]);
result.arr = [[arr[0], arr[1], arr[2]], arr1];
return result;
}
return result;
}
//检测8张是否胡牌、记录杠刻顺&判断番型、分数
d.ting.check8Pai = function (arr) {
var result = {};
result.arr = [];
result.r = 0;
//第一张牌四重张
if (d.ting.checkAAAAPai(arr)) {
var arr1 = [arr[4], arr[5], arr[6], arr[7]];
var c0 = d.ting.checkAAAAPai(arr1);
if (c0) {
result.r = [3, 3];
result.arr = [[arr[0], arr[1], arr[2], arr[3]], arr1];
return result;
}
}
return result;
}
//检测9张是否胡牌、记录杠刻顺&判断番型、分数
d.ting.check9Pai = function (arr) {
var result = {};
result.arr = [];
result.r = 0;
var arr1 = [arr[0], arr[1], arr[2]], arr2 = [arr[3], arr[4], arr[5], arr[6], arr[7], arr[8]];
var c1 = d.ting.check3Pai(arr1), c2 = d.ting.check6Pai(arr2);
if (c1.r && c2.r) {
result.r = c1.r.concat(c2.r);
result.arr = c1.arr.concat(c2.arr);
return result;
}
var arr1 = [arr[6], arr[7], arr[8]], arr2 = [arr[0], arr[1], arr[2], arr[3], arr[4], arr[5]];
var c1 = d.ting.check3Pai(arr1), c2 = d.ting.check6Pai(arr2);
if (c1.r && c2.r) {
result.r = c1.r.concat(c2.r);
result.arr = c1.arr.concat(c2.arr);
return result;
}
//特殊三连顺AABBBCCCD ABBCCCDDE ABBBCCCDD
var r1 = d.ting.check3shunPai(arr)
if (r1.r) {
result.r = r1.r;
result.arr = r1.arr;
return result;
}
return result;
}
//检测10张是否胡牌、记录杠刻顺&判断番型、分数
d.ting.check10Pai = function (arr) {
var result = {};
result.arr = [];
result.r = 0;
//第一张牌四重张
var c0 = d.ting.checkAAAAPai(arr)
if (c0) {
var arr1 = [arr[4], arr[5], arr[6], arr[7], arr[8], arr[9]]
var c1 = d.ting.check6Pai(arr1);
if (c1.r) {
result.r = [3].concat(c1.r);
result.arr = [[arr[0], arr[1], arr[2], arr[3]]].concat(c1.arr);
return result;
}
}
//第四张牌四重张
var arr1 = [arr[3], arr[4], arr[5], arr[6]];
var arr2 = [arr[0], arr[1], arr[2], arr[7], arr[8], arr[9]];
var c1 = d.ting.checkAAAAPai(arr1);
var c2 = d.ting.check6Pai(arr2)
if (c1 && c2.r) {
result.r = [3].concat(c2.r);
result.arr = [arr1].concat(c2.arr);
return result;
}
//第七张牌四重张
var arr1 = [arr[6], arr[7], arr[8], arr[9]];
var c1 = d.ting.checkAAAAPai(arr1);
var c0 = d.ting.check6Pai(arr)
if (c1 && c0.r) {
result.r = c0.r.concat([3]);
result.arr = c0.arr.concat([arr1]);
return result;
}
return result;
}
//检测11张是否胡牌、记录杠刻顺&判断番型、分数
d.ting.check11Pai = function (arr) {
var result = {};
result.arr = [];
result.r = 0;
//第一&五张牌四重张
var arr1 = [arr[0], arr[1], arr[2], arr[3]];
var arr2 = [arr[4], arr[5], arr[6], arr[7]];
var arr3 = [arr[8], arr[9], arr[10]];
var c1 = d.ting.checkAAAAPai(arr1);
var c2 = d.ting.checkAAAAPai(arr2);
var c3 = d.ting.check3Pai(arr3)
if (c1 && c2 && c3.r) {
result.r = [3, 3].concat(c3.r);
result.arr = [arr1].concat([arr2]).concat(c3.arr);
return result;
}
//第一&八张牌四重张
var arr1 = [arr[0], arr[1], arr[2], arr[3]];
var arr2 = [arr[7], arr[8], arr[9], arr[10]];
var arr3 = [arr[4], arr[5], arr[6]];
var c1 = d.ting.checkAAAAPai(arr1);
var c2 = d.ting.checkAAAAPai(arr2);
var c3 = d.ting.check3Pai(arr3)
if (c1 && c2 && c3) {
result.r = [3].concat(c3.r).concat([3]);
result.arr = [arr1].concat(c3.arr).concat([arr2]);
return result;
}
//第四&八张牌四重张
var arr1 = [arr[3], arr[4], arr[5], arr[6]];
var arr2 = [arr[7], arr[8], arr[9], arr[10]];
var arr3 = [arr[0], arr[1], arr[2]];
var c1 = d.ting.checkAAAAPai(arr1);
var c2 = d.ting.checkAAAAPai(arr2);
var c3 = d.ting.check3Pai(arr3)
if (c1 && c2 && c3) {
result.r = c3.r.concat([3, 3]);
result.arr = c3.arr.concat([arr1]).concat([arr2]);
return result;
}
return result;
}
//检测12张是否胡牌、记录杠刻顺&判断番型、分数
d.ting.check12Pai = function (arr) {
var result = {};
result.arr = [];
result.r = 0;
//三个四重张
//var arr1 = [arr[0], arr[1], arr[2], arr[3]];
//var arr2 = [arr[4], arr[5], arr[6], arr[7]];
//var arr3 = [arr[8], arr[9], arr[10], arr[11]];
//var c1 = d.ting.checkAAAAPai(arr1);
//var c2 = d.ting.checkAAAAPai(arr2);
//var c3 = d.ting.checkAAAAPai(arr3)
//if (c1 && c2 && c3) {
//result.r = [3, 3, 3];
//result.arr = [arr1].concat([arr2]).concat([arr3]);
//return result;
//}
var arr1 = [arr[0], arr[1], arr[2]];
var arr2 = [arr[3], arr[4], arr[5], arr[6], arr[7], arr[8], arr[9], arr[10], arr[11]];
var c1 = d.ting.check3Pai(arr1);
var c2 = d.ting.check9Pai(arr2);
if (c1.r && c2.r) {
result.r = c1.r.concat(c2.r);
result.arr = c1.arr.concat(c2.arr);
return result;
}
var arr1 = [arr[9], arr[10], arr[11]];
var arr2 = [arr[0], arr[1], arr[2], arr[3], arr[4], arr[5], arr[6], arr[7], arr[8]];
var c1 = d.ting.check3Pai(arr1);
var c2 = d.ting.check9Pai(arr2);
if (c1.r && c2.r) {
result.r = c1.r.concat(c2.r);
result.arr = c1.arr.concat(c2.arr);
return result;
}
var arr1 = [arr[0], arr[1], arr[2], arr[3], arr[4], arr[5]];
var arr2 = [arr[6], arr[7], arr[8], arr[9], arr[10], arr[11]];
var c1 = d.ting.check6Pai(arr1);
var c2 = d.ting.check6Pai(arr2);
if (c1.r && c2.r) {
result.r = c1.r.concat(c2.r);
result.arr = c1.arr.concat(c2.arr);
return result;
}
//特殊三连顺
var r1 = d.ting.check3shunPai(arr)
if (r1.r) {
result.r = r1.r;
result.arr = r1.arr;
return result;
}
return result;
}
//检测15张是否胡牌、记录杠刻顺&判断番型、分数
d.ting.check15Pai=function (arr) {
var result={};
result.arr=[];
result.r=0;
var arr1=[arr[0],arr[1],arr[2]];
var arr2=[arr[3],arr[4],arr[5],arr[6],arr[7],arr[8],arr[9],arr[10],arr[11],arr[12],arr[13],arr[14]];
var c1=d.ting.check3Pai(arr1);
var c2=d.ting.check12Pai(arr2);
if(c1.r&&c2.r)
{result.r=c1.r.concat(c2.r);
result.arr=c1.arr.concat(c2.arr);
return result;
}
var arr1=[arr[12],arr[13],arr[14]];
var arr2=[arr[0],arr[1],arr[2],arr[3],arr[4],arr[5],arr[6],arr[7],arr[8],arr[9],arr[10],arr[11]];
var c1=d.ting.check3Pai(arr1);
var c2=d.ting.check12Pai(arr2);
if(c1.r&&c2.r)
{result.r=c1.r.concat(c2.r);
result.arr=c1.arr.concat(c2.arr);
return result;
}
var arr1=[arr[0],arr[1],arr[2],arr[3],arr[4],arr[5]];
var arr2=[arr[6],arr[7],arr[8],arr[9],arr[10],arr[11],arr[12],arr[13],arr[14]];
var c1=d.ting.check6Pai(arr1);
var c2=d.ting.check9Pai(arr2);
if(c1.r&&c2.r)
{result.r=c1.r.concat(c2.r);
result.arr=c1.arr.concat(c2.arr);
return result;
}
var arr1=[arr[9],arr[10],arr[11],arr[12],arr[13],arr[14]];
var arr2=[arr[0],arr[1],arr[2],arr[3],arr[4],arr[5],arr[6],arr[7],arr[8]];
var c1=d.ting.check6Pai(arr1);
var c2=d.ting.check9Pai(arr2);
if(c1.r&&c2.r)
{result.r=c1.r.concat(c2.r);
result.arr=c1.arr.concat(c2.arr);
return result;
}
//特殊三连顺
var r1=d.ting.check3shunPai(arr)
if(r1.r)
{result.r=r1.r;
result.arr=r1.arr;
return result;
}
return result;
}
d.ting.classify_un_Pair = function (arr1, jiang) {
var arr = Util.copyArray(arr1);
var r0 = d.ting.classify_Pair(arr, jiang);
var r = [];
Util.ordArray(arr);
for (var i = 0; i < r0.length; i++) {
var pos = arr.indexOf(r0[i][0]);
var arr2 = Util.copyArray(arr);
if (pos != -1) {
arr2.splice(pos, 2);
}
r[r.length] = arr2;
}
r.jiang = r0;
if (r0.length == 0) {
r.jiang = 0;
r[r.length] = arr1;
}
return r;
}
//分类牌,取出一对
d.ting.classify_Pair = function (arr, jiang) {
var r = [];
jiang = jiang || 0;
var arr1 = Util.copyArray(arr);
Util.ordArray(arr1);
var jiangs = [2, 5, 8, 12, 15, 18, 22, 25, 28];
for (var k = 0; k < parseInt(arr.length / 2); k++) {
if (arr1.length == 0) {
break;
}
var ban = 0;
for (var i = 0; i < arr1.length; i++) {
if (arr1[i] == arr1[i + 1] && jiang == 0 || arr1[i] == arr1[i + 1] && jiang == 1 && jiangs.indexOf(arr1[i]) != -1) {
r[r.length] = [arr1[i], arr1[i]];
var n = 2;
for (var j = 2; j < 4; j++) {
if (arr1[i] == arr1[i + j]) {
n += 1;
}
}
arr1.splice(i, n);
ban = 1;
break;
}
}
if (ban == 0) {
break;
}
}
return r;
}
//是否真胡的判断2
d.ting.hu_bool = function (hu) {
for (var i = 0; i < hu.type.length; i++) {
if (hu.type[i]) {
return 1;
}
}
return 0;
}
//检测是否三连张
d.ting.checkABCPai = function (arr) {
//判断 风牌连张
Util.ordArray(arr);
if (hu_ting.feng_shun == 1 && arr[0] >= 30 && arr[2] < 40 && arr[0] != arr[1] && arr[1] != arr[2]) return [1];
if (hu_ting.feng_shun == 1 && arr[0] >= 40 && arr[2] < 50 && arr[0] != arr[1] && arr[1] != arr[2]) return [1];
if (arr[0] < 30 && arr[0] == (arr[1] - 1) && arr[1] == (arr[2] - 1)) return [1];
return 0;
}
//检测是否三重张
d.ting.checkAAAPai = function (arr) {
if (arr[0] == arr[1] && arr[1] == arr[2]) return [2];
return 0;
}
//检测是否四重张
d.ting.checkAAAAPai = function (arr) {
if (arr[0] == arr[1] && arr[1] == arr[2] && arr[2] == arr[3]) return [3];
return 0;
}
//检测是否特殊三连顺、全部是顺
d.ting.check3shunPai = function (arr) {
if (hu_ting.feng_shun == 0)
{return d.ting.check3shunPai_wuzi(arr);}
var arr1 = Util.copyArray(arr);
var result = {};
result.arr = [];
result.r = 0;
var r = 0;
var arr2 = [];
var l = arr1.length;
for (var j = 0; j < l; j++) {
for (var i = 0; i < arr1.length; i++) {
if (arr1[i] >= 30 && arr1[i] < 40) {
arr2[arr2.length] = arr1[i];
arr1.splice(i, 1);
break;
}
}
}
//处理序数牌、箭牌
var l = parseInt(arr1.length / 3);
if (arr1.length >= 3) {
for (var k = 0; k < l; k++) {
var arr0 = arr1[0];
arr1.splice(0, 1);
var ban = 0;
var arrange = [arr0];
for (var i = 0; i < arr1.length; i++) {
if (arr0 == arr1[i] - 1) {
ban = 1;
arrange[1] = arr1[i];
arr1.splice(i, 1);
break;
}
}
if (ban == 1) {
for (var i = 0; i < arr1.length; i++) {
if (arr0 == arr1[i] - 2) {
ban = 2;
arrange[2] = arr1[i];
result.arr[result.arr.length] = Util.copyArray(arrange);
arr1.splice(i, 1);
if (arr1.length == 0) {
r = 1;
}
break;
}
}
}
if (ban == 1) {
r = 0;
}
}
}
else if (arr1.length >= 1 && arr1.length < 3) {
r = 0;
}
else {
r = 1;
}
result.r = r;
if (r) {
result.r = [];
for (var i = 0; i < l; i++) {
result.r[i] = 1;
}
//处理风牌arr2
if (arr2 && arr2.length > 0) {
var r_feng = d.ting.check_fengPai(arr2);
if (r_feng.r == 0) {
result.r = 0;
result.arr = [];
}
else {
result.r = result.r.concat(r_feng.r);
result.arr = result.arr.concat(r_feng.arr);
}
}
}
return result;
}
//检测是否特殊三连顺、全部是顺 无字牌
d.ting.check3shunPai_wuzi = function (arr) {
var arr1 = Util.copyArray(arr);
var result = {};
result.arr = [];
var r = 0;
var arr2 = [];
var l = arr1.length;
for (var j = 0; j < l; j++) {
for (var i = 0; i < arr1.length; i++) {
if (arr1[i] >= 30 && arr1[i] < 50) {
arr2[arr2.length] = arr1[i];
arr1.splice(i, 1);
break;
}
}
}
//处理序数牌
var l = parseInt(arr1.length / 3);
if (arr1.length >= 3) {
for (var k = 0; k < l; k++) {
var arr0 = arr1[0];
arr1.splice(0, 1);
var ban = 0;
var arrange = [arr0];
for (var i = 0; i < arr1.length; i++) {
if (arr0 == arr1[i] - 1) {
ban = 1;
arrange[1] = arr1[i];
arr1.splice(i, 1);
break;
}
}
if (ban == 1) {
for (var i = 0; i < arr1.length; i++) {
if (arr0 == arr1[i] - 2) {
ban = 2;
arrange[2] = arr1[i];
result.arr[result.arr.length] = Util.copyArray(arrange);
arr1.splice(i, 1);
if (arr1.length == 0) {
r = 1;
}
break;
}
}
}
if (ban == 1) {
r = 0;
}
}
}
else {
r = 0;
}
result.r = r;
if (r) {
result.r = [];
for (var i = 0; i < l; i++) {
result.r[i] = 1;
}
//处理字牌
if (arr2 && arr2.length > 0) {
var r1 = [];
var con = 0;
var arrange = [];
var l = arr2.length - 2;
for (var j = 0; j < l; j++) {
if (arr2.length >= 3) {
for (var i = 0; i < arr2.length - 2; i++) {
if (arr2[i] == arr2[i + 1] && arr2[i] == arr2[i + 2] && arr2[i] == arr2[i + 3]) {
arrange[arrange.length] = [arr2[i], arr2[i], arr2[i], arr2[i]];
r1[r1.length] = 3;
arr2.splice(i, 4);
if (arr2.length == 0) {
con = 1;
}
break;
}
else if (arr2[i] == arr2[i + 1] && arr2[i] == arr2[i + 2] && arr2[i] != arr2[i + 3]) {
arrange[arrange.length] = [arr2[i], arr2[i], arr2[i]];
r1[r1.length] = 2;
arr2.splice(i, 3);
if (arr2.length == 0) {
con = 1;
}
break;
}
else {
con = 0;
break;
}
}
}
else if (arr2.length >= 1 && arr2.length < 3) {
con = 0;
break;
}
else {
break;
}
}
if (con == 1) {
result.r = result.r.concat(r1);
result.arr = result.arr.concat(arrange);
}
else {
result.r = 0;
}
}
}
return result;
}
//检测风牌是否是顺、刻子
d.ting.check_fengPai = function (arr) {
var result = {};
result.arr = [];
result.r = [];
//3杠 || 2杠1peng || 0杠4peng
if (result.r == 0) {
var arr1 = Util.copyArray(arr);
for (var j = 0; j < 3; j++) {
for (var i = 0; i < arr1.length; i++) {
if (arr1[i] == arr1[i + 1] && arr1[i] == arr1[i + 2] && arr1[i] == arr1[i + 3]) {
result.arr[result.arr.length] = [arr1[i], arr1[i], arr1[i], arr1[i]];
result.r[result.r.length] = 3;
arr1.splice(i, 4);
break;
}
else if (arr1[i] == arr1[i + 1] && arr1[i] == arr1[i + 2]) {
result.arr[result.arr.length] = [arr1[i], arr1[i], arr1[i], arr1[i]];
result.r[result.r.length] = 2;
arr1.splice(i, 3);
break;
}
}
}
if (arr1.length > 0) {
result.arr = [];
result.r = 0;
}
}
d.ting.del_zipai = function (arr0) {
var r = [];
var arr1 = Util.copyArray(arr0);
Util.ordArray(arr1);
//去掉中发白 41 42 43
var arr_Contrast = [41, 42, 43];
r[0] = Util.copyArray(arr1);
for (var k = 0; k < 4; k++) {
for (var i = 0; i < r0.length; i++) {
var n = 0;
for (var j = 0; j < 3; j++) {
var pos = r0.indexOf(arr_Contrast[j]);
if (pos != -1) {
n += 1;
}
}
}
if (n < 3) {
break;
}
else if (n == 3) {
for (var i = 0; i < r0.length; i++) {
for (var j = 0; j < 3; j++) {
var pos = r0.indexOf(arr_Contrast[j]);
if (pos != -1) {
r[0].splice(pos, 1);
}
}
}
}
}
}
//1杠
if (result.r == 0) {
result.r = [];
var arr1 = Util.copyArray(arr);
for (var i = 0; i < arr1.length; i++) {
if (arr1[i] == arr1[i + 1] && arr1[i] == arr1[i + 2] && arr1[i] == arr1[i + 3]) {
result.arr[result.arr.length] = [arr1[i], arr1[i], arr1[i], arr1[i]];
result.r[result.r.length] = 3;
arr1.splice(i, 4);
break;
}
}
var r = d.ting.check3shunPai_fengPai(arr1);
if (r.r == 0) {
result.arr = [];
result.r = 0;
}
else {
result.arr = result.arr.concat(r.arr);
result.r = result.r.concat(r.r);
}
}
//0杠3peng
if (result.r == 0) {
result.r = [];
var arr1 = Util.copyArray(arr);
var n = 0;
for (var j = 0; j < 4; j++) {
for (var i = 0; i < arr1.length - 2; i++) {
if (arr1[i] == arr1[i + 1] && arr1[i] == arr1[i + 2]) {
result.arr[result.arr.length] = [arr1[i], arr1[i], arr1[i]];
result.r[result.r.length] = 2;
arr1.splice(i, 3);
n += 1;
break;
}
}
if (n == 3) {
break;
}
}
var r = d.ting.check3shunPai_fengPai(arr1);
if (r.r == 0) {
result.arr = [];
result.r = 0;
}
else {
result.arr = result.arr.concat(r.arr);
result.r = result.r.concat(r.r);
}
}
//0杠2peng
if (result.r == 0) {
result.r = [];
var arr1 = Util.copyArray(arr);
var n = 0;
for (var j = 0; j < 4; j++) {
for (var i = 0; i < arr1.length - 2; i++) {
if (arr1[i] == arr1[i + 1] && arr1[i] == arr1[i + 2]) {
result.arr[result.arr.length] = [arr1[i], arr1[i], arr1[i]];
result.r[result.r.length] = 2;
arr1.splice(i, 3);
n += 1;
break;
}
}
if (n > 2)//2peng+(1peng当3shun)不存在
{
result.arr = [];
result.r = 0;
break;
}
}
if (n == 2) {
var r = d.ting.check3shunPai_fengPai(arr1);
if (r.r == 0) {
result.arr = [];
result.r = 0;
}
else {
result.arr = result.arr.concat(r.arr);
result.r = result.r.concat(r.r);
}
}
else {
result.arr = [];
result.r = 0;
}
}
//0杠1peng
if (result.r == 0) {
result.r = [];
var arr1 = Util.copyArray(arr);
var n = 0;
var arr2 = [];
for (var j = 0; j < 4; j++) {
for (var i = 0; i < arr1.length - 2; i++) {
if (arr1[i] == arr1[i + 1] && arr1[i] == arr1[i + 2]) {
arr2[arr2.length] = arr1[i];
arr1.splice(i, 3);
break;
}
}
}
for (var i = 0; i < arr2.length; i++) {
var arr3 = Util.copyArray(arr);
var pos = arr3.indexOf(arr2[i]);
result.arr[result.arr.length] = [arr2[i], arr2[i], arr2[i]];
result.r = [];
result.r[result.r.length] = 2;
if (pos != -1) {
arr3.splice(pos, 3);
}
var r = d.ting.check3shunPai_fengPai(arr3);
if (r.r == 0) {
result.arr = [];
result.r = 0;
}
else {
result.arr = result.arr.concat(r.arr);
result.r = result.r.concat(r.r);
break;
}
}
}
//0杠0peng
if (result.r == 0) {
result.r = [];
var arr1 = Util.copyArray(arr);
var r = d.ting.check3shunPai_fengPai(arr1);
if (r.r == 0) {
result.arr = [];
result.r = 0;
}
else {
result.arr = result.arr.concat(r.arr);
result.r = result.r.concat(r.r);
}
}
return result;
}
//检测风牌是否是顺
d.ting.check3shunPai_fengPai = function (arr) {
var result = {};
result.arr = [];
result.r = [];
var arr1 = Util.copyArray(arr);
//分类
//4同 4同只会有1个
var arr4 = [];
var l = parseInt(arr1.length / 4);
for (var j = 0; j < l; j++) {
for (var i = 0; i < arr1.length - 3; i++) {
if (arr1[i] == arr1[i + 1] && arr1[i] == arr1[i + 2] && arr1[i] == arr1[i + 3]) {
arr4[arr4.length] = [arr1[i], arr1[i], arr1[i], arr1[i]];
arr1.splice(i, 4);
break;
}
}
}
//3同 3同最多会有4个
var arr3 = [];
var l = parseInt(arr1.length / 3);
for (var j = 0; j < l; j++) {
for (var i = 0; i < arr1.length - 2; i++) {
if (arr1[i] == arr1[i + 1] && arr1[i] == arr1[i + 2]) {
arr3[arr3.length] = [arr1[i], arr1[i], arr1[i]];
arr1.splice(i, 3);
break;
}
}
}
//2同 3同最多会有4个
var arr2 = [];
var l = parseInt(arr1.length / 2);
for (var j = 0; j < l; j++) {
for (var i = 0; i < arr1.length - 1; i++) {
if (arr1[i] == arr1[i + 1]) {
arr2[arr2.length] = [arr1[i], arr1[i]];
arr1.splice(i, 2);
break;
}
}
}
var arr0 = [];
for (var i = 0; i < arr4.length; i++) {
arr0 = arr0.concat(arr4[i]);
}
for (var i = 0; i < arr3.length; i++) {
arr0 = arr0.concat(arr3[i]);
}
for (var i = 0; i < arr2.length; i++) {
arr0 = arr0.concat(arr2[i]);
}
arr0 = arr0.concat(arr1);
var result = d.ting.get_3shunPai_fengpai(arr0);
return result;
}
d.ting.get_3shunPai_fengpai = function (arr) {
var result = {};
result.arr = [];
result.r = [];
if (arr.length % 3 != 0) {
result.r = 0;
return result;
}
var l = parseInt(arr.length / 3);
var arr0 = Util.copyArray(arr);
for (var m = 0; m < l; m++) {
var r_arr = [];
for (var k = 0; k < 3; k++) {
var l0 = arr0.length;
for (var j = 0; j < l0; j++) {
var ban = 0;
for (var i = 0; i < r_arr.length; i++) {
if (arr0[j] == r_arr[i]) {
ban = 1;
break;
}
}
if (ban == 0) {
r_arr[k] = arr0[j];
arr0.splice(j, 1);
break;
}
}
}
if (r_arr.length == 3) {
result.arr[result.arr.length] = r_arr;
result.r[result.r.length] = 1;
}
else {
result.arr = [];
result.r = 0;
break;
}
}
return result;
}