diff --git a/src/engine/actions.py b/src/engine/actions.py index a17ae41..e8d84f4 100644 --- a/src/engine/actions.py +++ b/src/engine/actions.py @@ -225,6 +225,7 @@ def check_other_players(self, tile): if not actions_taken: logger.info(f"玩家 {current_player} 打出的牌 {tile} 没有触发其他玩家的操作") + return actions_taken diff --git a/src/engine/chengdu_mahjong_engine.py b/src/engine/chengdu_mahjong_engine.py index cdbc3a6..950682a 100644 --- a/src/engine/chengdu_mahjong_engine.py +++ b/src/engine/chengdu_mahjong_engine.py @@ -42,55 +42,60 @@ class ChengduMahjongEngine: logger.info("发牌结束并完成缺门设置!") def play_turn(self): - if self.state.draw_counts[self.current_player] == 0: + current_player = self.state.current_player + + if self.state.draw_counts[current_player] == 0: # 判断庄家是否天胡 tianhu = self.state.can_win( - self.state.hands[self.current_player], - self.state.melds[self.current_player], - self.state.missing_suits[self.current_player], + self.state.hands[current_player], + self.state.melds[current_player], + self.state.missing_suits[current_player], ) if tianhu: # 天胡结算 - self.state.winners.append(self.current_player) - self.state.print_game_state(self.current_player) + self.state.winners.append(current_player) + self.state.print_game_state(current_player) for i in range(4): - if i != self.current_player: + if i != current_player: self.state.scores[i] -= self.state.bottom_score * 2 ** 5 - self.state.scores[self.current_player] += self.state.bottom_score * 2 ** 5 + self.state.scores[current_player] += self.state.bottom_score * 2 ** 5 else: # 判断是否可以杠 - if self.state.hands[self.current_player].can_gang(): + if self.state.hands[current_player].can_gang(): # 获取杠牌类型 - gang_type = self.state.hands[self.current_player].get_gang_type() + gang_type = self.state.hands[current_player].get_gang_type() # AI 决策是否杠牌 - if should_gang(self.current_player, self.state, gang_type): - self.state.hands[self.current_player].perform_gang() # 执行杠操作 - self.state.print_game_state(self.current_player) + if should_gang(current_player, self.state, gang_type): + self.state.hands[current_player].perform_gang() # 执行杠操作 + self.state.print_game_state(current_player) # 计算杠牌得分 if gang_type == "暗杠": # 暗杠分数结算 for i in range(4): - if i != self.current_player: + if i != current_player: self.state.scores[i] -= self.state.bottom_score * 2 ** 2 # 扣分 - self.state.scores[self.current_player] += self.state.bottom_score * 2 ** 2 * 3 # 加分 + self.state.scores[current_player] += self.state.bottom_score * 2 ** 2 * 3 # 加分 elif gang_type == "明杠": # 明杠分数结算 for i in range(4): - if i != self.current_player: + if i != current_player: self.state.scores[i] -= self.state.bottom_score * 2 ** 1 # 扣分 - self.state.scores[self.current_player] += self.state.bottom_score * 2 ** 1 * 3 # 加分 + self.state.scores[current_player] += self.state.bottom_score * 2 ** 1 * 3 # 加分 - logger.info(f"玩家 {self.current_player} 杠牌,类型: {gang_type}") + logger.info(f"玩家 {current_player} 杠牌,类型: {gang_type}") else: - title = random_choice(self.state.hands[self.current_player], self.state.missing_suits[self.current_player]) - check_other_players(self, title) - - - + # 当前玩家出牌 + tile = random_choice(self.state.hands[current_player], self.state.missing_suits[current_player]) + logger.info(f"玩家 {current_player} 打出牌: {tile}") + # 检查其他玩家的反应 + if not check_other_players(self,tile): + # 没有触发其他玩家操作,移动到下一个玩家 + self.state.current_player = (current_player + 1) % 4 + draw_tile(self) def check_game_over(self): """