/// <summary> /// 测试 /// </summary> private static void test() { // 百位:1同,2条,3万 // 十位:0无,其他数值 // 个位:0无,1碰,2杠 int[] everyData = new int[] { 110, 110, 110, 000, 230, 230, 230, 240, 240, 240, 250, 250, 250, 290, 290, 000, 000, 000 }; Every[] everys = new Every[18]; for (int i = 0; i < everyData.Length; i++) { Every every = new Every(); every.setNumber(everyData[i] / 10 % 10); every.setColor(everyData[i] / 100 == 0 ? 1000 : everyData[i] / 100); if (everyData[i] % 10 == 1) { every.setIf_Touched(true); } else if (everyData[i] % 10 == 2) { every.setIf_Konged(true); } everys[i] = every; } HuPaiResult result = RuleUtils.IsHu(everys); Debug.Log(result.type.huType); }
/// <summary> /// 非基本胡牌判断 /// </summary> /// <param name="everys"></param> /// <param name="arrPai"></param> /// <returns></returns> private static HuPaiResult IsHuNoneBase(Every[] everys, int[] arrPai) { HuPaiResult huResult = new HuPaiResult(); huResult.type = HuBaseType.None; if (!IsOncePengOrGang(everys)) // 是否碰或杠过 { if (IsHuQingLongQiDui(arrPai)) { // 清龙七对 huResult.type = HuBaseType.QingLongQiDui; } else if (IsHuQingQiDui(arrPai)) { // 清七对 huResult.type = HuBaseType.QingQiDui; } else if (IsHuLongQiDui(arrPai)) { // 龙七对 huResult.type = HuBaseType.LongQiDui; } else if (IsHuQiDui(arrPai)) { // 七对 huResult.type = HuBaseType.QiDui; } } return(huResult); }
/// <summary> /// 判断听牌情况 /// </summary> /// <param name="everys"></param> /// <returns></returns> public static Dictionary <int, Dictionary <Every, HuPaiResult> > IsTing(Every[] everys) { Dictionary <int, Dictionary <Every, HuPaiResult> > result = new Dictionary <int, Dictionary <Every, HuPaiResult> >(); for (int i = 0; i < everys.Length; i++) { Dictionary <Every, HuPaiResult> item = new Dictionary <Every, HuPaiResult>(); if (everys[i].getColor() <= 3 && !everys[i].getIf_Konged() && !everys[i].getIf_Touched())// 非空,非杠,非空 { int oldColor = everys[i].getColor(); int oldNumber = everys[i].getNumber(); for (int color = 1; color <= 3; color++) { for (int number = 1; number <= 9; number++) { everys[i].setColor(color); everys[i].setNumber(number); HuPaiResult huResult = IsHu(everys); if (!huResult.type.Equals(HuBaseType.None)) { item.Add(new Every(color, number, false, false), huResult); } } } everys[i].setColor(oldColor); everys[i].setNumber(oldNumber); } result.Add(i, item); } return(result); }
/// <summary> /// 判断胡 flag标识自摸或胡其他玩家 特例:天胡 、地胡 /// </summary> /// <param name="everys"></param> /// <param name="other"></param> /// <returns></returns> public static HuPaiResult IsHu(Every[] everys, bool other) { int[] arrPaiAll = ToArrPaiAll(everys); int[] arrPai = ToArrPai(everys); int[] arrPaiGangOrPeng = ToArrPaiGangOrPeng(everys); HuPaiResult huResult = new HuPaiResult(); huResult.type = HuBaseType.None; // 基本番 if (IsHuBase(arrPai)) // 满足基本胡牌型 { if (IsHuQingShiBaLuoHan(arrPaiAll)) { // 清十八罗汉 huResult.type = HuBaseType.QingShiBaLuoHan; } else if (IsHuShiBaLuoHan(arrPaiAll)) { // 十八罗汉 huResult.type = HuBaseType.ShiBaLuoHan; } else if (IsHuJinGouGou(arrPaiGangOrPeng) && IsHuQingYiSe(arrPaiAll)) { // 清金钩钩 huResult.type = HuBaseType.QingJingGouGou; } else if (IsHuJinGouGou(arrPaiGangOrPeng) && IsHuJiangJinGouGou(arrPaiGangOrPeng)) {// 将金钩钩 huResult.type = HuBaseType.JiangJinGouGou; } else if (IsHuDaiYaoJiu(arrPai, arrPaiGangOrPeng) && IsHuQingYiSe(arrPaiAll)) { // 清幺九 huResult.type = HuBaseType.QingYaoJiu; } else if (IsHuJinGouGou(arrPaiGangOrPeng)) { // 金钩钩 huResult.type = HuBaseType.JinGouGou; } else if (IsHuDaiYaoJiu(arrPai, arrPaiGangOrPeng)) { // 带幺九 huResult.type = HuBaseType.DaiYaoJiu; } else if (IsHuQingYiSe(arrPaiAll)) { // 清一色 huResult.type = HuBaseType.QingYiSe; } else if (IsPengPengHu(arrPaiAll)) { // 碰碰胡 huResult.type = HuBaseType.PengPengHu; } else { // 平胡 huResult.type = HuBaseType.PingHu; } // 满足基本胡牌型 也有可能满足非基本胡牌型 两者皆满足取大番者 HuPaiResult result = IsHuNoneBase(everys, arrPai); if (result.type.fan > huResult.type.fan) { huResult.type = result.type; } } else { // 不满足基本胡牌型 HuPaiResult result = IsHuNoneBase(everys, arrPai); huResult.type = result.type; } // 另加番 return(huResult); }