1
1
This commit is contained in:
@@ -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
|
||||
Reference in New Issue
Block a user