def test_draw_tile(): from src.engine.chengdu_mahjong_engine import ChengduMahjongEngine engine = ChengduMahjongEngine() initial_remaining = engine.state.remaining_tiles tile = engine.draw_tile() # 验证牌堆数量减少 assert engine.state.remaining_tiles == initial_remaining - 1, "牌堆数量未正确减少" # 验证牌已加入当前玩家手牌 assert engine.state.hands[engine.state.current_player][tile] > 0, "摸牌未加入玩家手牌" print(f"test_draw_tile passed: 摸到了 {tile}") def test_discard_tile(): from src.engine.chengdu_mahjong_engine import ChengduMahjongEngine engine = ChengduMahjongEngine() tile = engine.draw_tile() # 玩家先摸牌 engine.discard_tile(tile) # 打出摸到的牌 # 验证手牌数量减少 assert engine.state.hands[engine.state.current_player][tile] == 0, "手牌未正确移除" # 验证牌加入了牌河 assert tile in engine.state.discards[engine.state.current_player], "牌未正确加入牌河" print(f"test_discard_tile passed: 打出了 {tile}") def test_set_missing_suit(): from src.engine.chengdu_mahjong_state import ChengduMahjongState state = ChengduMahjongState() player = 0 missing_suit = "筒" state.set_missing_suit(player, missing_suit) # 验证缺门是否正确设置 assert state.missing_suits[player] == missing_suit, "缺门设置错误" print(f"test_set_missing_suit passed: 缺门设置为 {missing_suit}") def test_can_win(): from src.engine.chengdu_mahjong_state import ChengduMahjongState state = ChengduMahjongState() hand = [0] * 108 hand[0] = 2 # 两张1条(对子) hand[3] = 1 # 2条 hand[4] = 1 # 3条 hand[5] = 1 # 4条 hand[10] = 1 # 5条 hand[11] = 1 # 6条 hand[12] = 1 # 7条 hand[20] = 1 # 8条 hand[21] = 1 # 9条 hand[22] = 1 # 1筒 hand[30] = 1 # 2筒 hand[31] = 1 # 3筒 hand[32] = 1 # 4筒 result = state.can_win(hand) assert result is True, "胡牌判断失败" print(f"test_can_win passed: 胡牌条件正确") def test_peng(): from src.engine.chengdu_mahjong_engine import ChengduMahjongEngine engine = ChengduMahjongEngine() tile = 5 # 模拟手牌中有3张牌 engine.state.hands[engine.state.current_player][tile] = 3 engine.peng(tile) # 验证手牌减少 assert engine.state.hands[engine.state.current_player][tile] == 1, "碰牌后手牌数量错误" # 验证明牌记录 assert ("peng", tile) in engine.state.melds[engine.state.current_player], "碰牌未正确记录" print(f"test_peng passed: 碰牌成功") def test_gang(): from src.engine.chengdu_mahjong_engine import ChengduMahjongEngine engine = ChengduMahjongEngine() tile = 10 # 模拟手牌中有4张牌 engine.state.hands[engine.state.current_player][tile] = 4 engine.gang(tile, mode="an") # 验证手牌减少 assert engine.state.hands[engine.state.current_player][tile] == 0, "杠牌后手牌数量错误" # 验证明牌记录 assert ("an_gang", tile) in engine.state.melds[engine.state.current_player], "杠牌未正确记录" print(f"test_gang passed: 杠牌成功")