1
This commit is contained in:
2024-12-01 19:13:02 +08:00
parent 3ff448b15d
commit bf1c5116be
4 changed files with 185 additions and 66 deletions

View File

@@ -3,7 +3,7 @@ import random
from loguru import logger
from configs.log_config import setup_logging
from src.engine.actions import draw_tile, check_blood_battle, should_gang, random_choice
from src.engine.actions import draw_tile, should_gang, random_choice, handle_win, handle_gang, handle_peng
from src.engine.actions import set_missing_suit, check_other_players
from src.engine.chengdu_mahjong_state import ChengduMahjongState
@@ -132,4 +132,42 @@ class ChengduMahjongEngine:
while not self.game_over:
self.play_turn()
logger.info("游戏已结束")
logger.info("游戏已结束")
def check_other_players(self, tile):
"""
检查其他玩家是否可以对打出的牌进行操作(如胡牌、杠、碰)。
优先级为:胡牌 > 杠牌 > 碰牌。
如果有玩家选择操作,修改游戏状态和出牌顺序。
"""
current_player = self.state.current_player
actions_taken = False
for player in range(4):
if player == current_player:
continue
# 优先检查胡牌
if self.state.can_win(self.state.hands[player], self.state.melds[player], self.state.missing_suits[player]):
logger.info(f"玩家 {player} 可以胡玩家 {current_player} 的牌: {tile}")
handle_win(player, current_player, tile)
actions_taken = True
break # 胡牌后结束
# 检查是否可以杠牌
if self.state.hands[player].tile_count[tile] >= 3:
logger.info(f"玩家 {player} 可以杠玩家 {current_player} 的牌: {tile}")
if handle_gang(self, player, tile, mode="ming"): # 执行明杠逻辑
actions_taken = True
break # 杠牌后不检查其他玩家
# 检查是否可以碰牌
if self.state.hands[player].tile_count[tile] >= 2:
logger.info(f"玩家 {player} 可以碰玩家 {current_player} 的牌: {tile}")
if handle_peng(self, player, tile): # 执行碰牌逻辑
actions_taken = True
break # 碰牌后不检查其他玩家
if not actions_taken:
logger.info(f"玩家 {current_player} 打出的牌 {tile} 没有触发其他玩家的操作")
return actions_taken