/* * // 流局满贯 // * public static void SetNagashiMangan(AgariInfo agariInfo) * { * agariInfo.han = 5; * agariInfo.fu = 30; * agariInfo.scoreInfo = GetScoreInfo(5, 30); * * agariInfo.hanteiYakus = new YakuHelper.YakuHandler[] * { * new YakuHelper.CheckNagashimangan(null) * }; * } */ // 符を計算します public static int CalculateHu(Tehai tehai, Hai addHai, HaiCombi combi, AgariParam param, Yaku yaku) { int countHu = 20; //頭の牌を取得 Hai atamaHai = new Hai(Hai.NumKindToID(combi.atamaNumKind)); // 3元牌なら2符追加 if (atamaHai.Kind == Hai.KIND_SANGEN) { countHu += 2; } // 場風なら2符追加 if ((atamaHai.ID - Hai.ID_TON) == (int)param.getBakaze()) { countHu += 2; } // 自風なら2符追加 if ((atamaHai.ID - Hai.ID_TON) == (int)param.getJikaze()) { countHu += 2; } //平和が成立する場合は、待ちによる2符追加よりも優先される if (yaku.checkPinfu() == false) { // 単騎待ちの場合2符追加 if (addHai.NumKind == combi.atamaNumKind) { countHu += 2; } // 嵌張待ちの場合2符追加 // 数牌の2~8かどうか判定 if (addHai.IsYaochuu == false) { for (int i = 0; i < combi.shunCount; i++) { if ((addHai.NumKind - 1) == combi.shunNumKinds[i]) { countHu += 2; } } } // 辺張待ち(3)の場合2符追加 if (addHai.IsYaochuu == false && addHai.Num == Hai.NUM_3) { for (int i = 0; i < combi.shunCount; i++) { if ((addHai.NumKind - 2) == combi.shunNumKinds[i]) { countHu += 2; } } } // 辺張待ち(7)の場合2符追加 if (addHai.IsYaochuu == false && addHai.Num == Hai.NUM_7) { for (int i = 0; i < combi.shunCount; i++) { if (addHai.NumKind == combi.shunNumKinds[i]) { countHu += 2; } } } } // 暗刻による加点 Hai checkHai = null; for (int i = 0; i < combi.kouCount; i++) { checkHai = new Hai(Hai.NumKindToID(combi.kouNumKinds[i])); // 牌が字牌もしくは1,9 if (checkHai.IsYaochuu == true) { countHu += 8; } else { countHu += 4; } } Fuuro[] fuuros = tehai.getFuuros(); for (int i = 0; i < fuuros.Length; i++) { switch (fuuros[i].Type) { case EFuuroType.MinKou: { // 牌が字牌もしくは1,9 if (fuuros[i].Hais[0].IsYaochuu == true) { countHu += 4; } else { countHu += 2; } } break; case EFuuroType.KaKan: case EFuuroType.DaiMinKan: { // 牌が字牌もしくは1,9 if (fuuros[i].Hais[0].IsYaochuu == true) { countHu += 16; } else { countHu += 8; } } break; case EFuuroType.AnKan: { // 牌が字牌もしくは1,9 if (fuuros[i].Hais[0].IsYaochuu == true) { countHu += 32; } else { countHu += 16; } } break; } } // ツモ上がりで平和が成立していなければ2譜追加 if (param.getYakuFlag(EYakuFlagType.TSUMO) == true) { if (yaku.checkPinfu() == false) { countHu += 2; } } // 面前ロン上がりの場合は10符追加 if (param.getYakuFlag(EYakuFlagType.TSUMO) == false) { if (yaku.isNaki == false) { countHu += 10; } } // 一の位がある場合は、切り上げ if (countHu % 10 != 0) // 23 -> 30. { countHu = countHu - (countHu % 10) + 10; } return(countHu); }