From 3d87d3850f8ac7f40e8d4763731291f5d364024c Mon Sep 17 00:00:00 2001 From: wangsiyuan <2392948297@qq.com> Date: Sun, 1 Dec 2024 01:59:47 +0800 Subject: [PATCH] Update test_chengdu_mahjong_states.py --- tests/test_chengdu_mahjong_states.py | 115 +++++++++++++++++++++++++++ 1 file changed, 115 insertions(+) diff --git a/tests/test_chengdu_mahjong_states.py b/tests/test_chengdu_mahjong_states.py index 6f171e8..aa288ec 100644 --- a/tests/test_chengdu_mahjong_states.py +++ b/tests/test_chengdu_mahjong_states.py @@ -366,3 +366,118 @@ def test_can_win_after_ming_gang(): # 调用 can_win 方法并断言胡牌 assert state.can_win(state.hands[0], state.melds[0], state.missing_suits), "测试失败:明杠后杠上开花应该可以胡牌" print("测试通过:明杠后杠上开花胡牌成功!") + +def test_qiang_gang_hu(): + """测试抢杠胡""" + # 玩家 A 的手牌 + player_a_hand = Hand() + player_a_hand.add_tile(MahjongTile("筒", 2)) + player_a_hand.add_tile(MahjongTile("筒", 3)) + player_a_hand.add_tile(MahjongTile("筒", 5)) + player_a_hand.add_tile(MahjongTile("筒", 6)) + player_a_hand.add_tile(MahjongTile("筒", 7)) + player_a_hand.add_tile(MahjongTile("筒", 9)) + player_a_hand.add_tile(MahjongTile("筒", 9)) + player_a_hand.add_tile(MahjongTile("万", 1)) + player_a_hand.add_tile(MahjongTile("万", 1)) + player_a_hand.add_tile(MahjongTile("万", 2)) + player_a_hand.add_tile(MahjongTile("万", 2)) + player_a_hand.add_tile(MahjongTile("万", 3)) + player_a_hand.add_tile(MahjongTile("万", 3)) + + # 初始化游戏状态 + state = ChengduMahjongState() + state.hands[0] = player_a_hand # 玩家 A 的手牌 + state.missing_suits[0] = "条" # 玩家 A 的缺门 + + # 玩家 B 的明牌和手牌 + player_b_hand = Hand() + player_b_hand.add_tile(MahjongTile("筒", 1)) + player_b_hand.add_tile(MahjongTile("筒", 1)) + player_b_hand.add_tile(MahjongTile("筒", 1)) + state.hands[1] = player_b_hand + state.missing_suits[1] = "万" + + # 玩家 B 尝试杠 1 筒 + melds_b = [Meld(MahjongTile("筒", 1), "碰")] + state.melds[1] = melds_b + + # 玩家 A 抢杠胡 + gang_tile = MahjongTile("筒", 1) # 玩家 B 打出用于杠的牌 + player_a_hand.add_tile(gang_tile) + can_qiang_gang_hu = state.can_win(player_a_hand, state.melds[0], state.missing_suits[0]) + + # 打印状态 + state.print_game_state(player_index=0) # 打印玩家 A 的状态 + state.print_game_state(player_index=1) # 打印玩家 B 的状态 + + assert can_qiang_gang_hu, "测试失败:玩家 A 应该可以抢杠胡" + print("测试通过:抢杠胡成功!") + +def test_can_win_with_big_pairs(): + """测试大对子胡牌""" + hand = Hand() + + # 添加对子 + hand.add_tile(MahjongTile("筒", 1)) + hand.add_tile(MahjongTile("筒", 1)) + hand.add_tile(MahjongTile("筒", 2)) + hand.add_tile(MahjongTile("筒", 2)) + hand.add_tile(MahjongTile("筒", 3)) + hand.add_tile(MahjongTile("筒", 3)) + hand.add_tile(MahjongTile("筒", 4)) + hand.add_tile(MahjongTile("筒", 4)) + + # 添加刻子 + hand.add_tile(MahjongTile("筒", 5)) + hand.add_tile(MahjongTile("筒", 5)) + hand.add_tile(MahjongTile("筒", 5)) + + # 初始化游戏状态 + state = ChengduMahjongState() + state.hands[0] = hand + + # 设置缺门为 "条",因为手牌和明牌中没有 "条" + missing_suit = "条" + + # 打印当前玩家状态 + state.print_game_state(player_index=0) + + # 调用 can_win 方法并断言胡牌 + assert state.can_win(state.hands[0], state.melds[0], missing_suit), "测试失败:大对子应该可以胡牌" + print("测试通过:大对子胡牌成功!") + + +def test_can_win_with_small_seven_pairs(): + """测试小七对胡牌""" + hand = Hand() + + # 添加七对 + hand.add_tile(MahjongTile("筒", 1)) + hand.add_tile(MahjongTile("筒", 1)) + hand.add_tile(MahjongTile("筒", 2)) + hand.add_tile(MahjongTile("筒", 2)) + hand.add_tile(MahjongTile("筒", 3)) + hand.add_tile(MahjongTile("筒", 3)) + hand.add_tile(MahjongTile("筒", 4)) + hand.add_tile(MahjongTile("筒", 4)) + hand.add_tile(MahjongTile("筒", 5)) + hand.add_tile(MahjongTile("筒", 5)) + hand.add_tile(MahjongTile("筒", 6)) + hand.add_tile(MahjongTile("筒", 6)) + hand.add_tile(MahjongTile("筒", 7)) + hand.add_tile(MahjongTile("筒", 7)) + + # 初始化游戏状态 + state = ChengduMahjongState() + state.hands[0] = hand + + # 设置缺门为 "条",因为手牌和明牌中没有 "条" + missing_suit = "条" + + # 打印当前玩家状态 + state.print_game_state(player_index=0) + + # 调用 can_win 方法并断言胡牌 + assert state.can_win(state.hands[0], state.melds[0], missing_suit), "测试失败:小七对应该可以胡牌" + print("测试通过:小七对胡牌成功!") \ No newline at end of file