/// <summary> /// 手牌が国士無双かどうか /// </summary> /// <returns>国士無双か</returns> bool IsKokushi() { // 幺九牌のリスト int[] yaotiles = { 1, 9, 11, 19, 21, 29, 31, 32, 33, 34, 35, 36, 37 }; HandTiles tmp_tiletypes = new HandTiles(this); for (int i = 0; i < yaotiles.Length; i++) { if (tmp_tiletypes[yaotiles[i]] >= 1) { tmp_tiletypes[yaotiles[i]]--; } else { return(false); } } for (int i = 0; i < yaotiles.Length; i++) { if (tmp_tiletypes[yaotiles[i]] >= 1) { return(true); } } return(false); }
/// <summary> /// 他のクラスを元に作成する /// </summary> /// <param name="t">元になるクラス</param> public HandTiles(HandTiles t) { for (int i = 0; i < t.tiletypes.Length; i++) { tiletypes[i] = t.tiletypes[i]; } LastTile = t.LastTile; }
/// <summary> /// あがれる手牌か /// </summary> /// <returns>あがれるか</returns> public bool IsWinningHand() { HandTiles tmp_tiletypes = new HandTiles(this); if (IsZeroAllTiles()) { return(false); } // 七対子判定 for (int i = 1; i < 38; i++) { if (tmp_tiletypes[i] >= 2) { tmp_tiletypes[i] -= 2; i--; } } if (tmp_tiletypes.IsZeroAllTiles()) { return(true); } // 国士無双判定 tmp_tiletypes = new HandTiles(this); if (tmp_tiletypes.IsKokushi()) { return(true); } for (int i = 1; i < 38; i++) { // 初期化 tmp_tiletypes = new HandTiles(this); // 頭雀を含むか if (tmp_tiletypes[i] >= 2) { tmp_tiletypes[i] -= 2; for (int j = 1; j < 38; j++) { // 刻子を含むか if (tmp_tiletypes[j] >= 3) { tmp_tiletypes[j] -= 3; j = 1; } } for (int j = 1; j < 38; j++) { // 順子を含むか if (tmp_tiletypes.ContainsChow((TileNames)j)) { tmp_tiletypes[j]--; tmp_tiletypes[j + 1]--; tmp_tiletypes[j + 2]--; j = 1; } } if (tmp_tiletypes.IsZeroAllTiles()) { return(true); } } } return(false); }