parent
df0aa388e2
commit
2bc34bc860
|
|
@ -225,6 +225,7 @@ def check_other_players(self, tile):
|
|||
|
||||
if not actions_taken:
|
||||
logger.info(f"玩家 {current_player} 打出的牌 {tile} 没有触发其他玩家的操作")
|
||||
return actions_taken
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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):
|
||||
"""
|
||||
|
|
|
|||
Loading…
Reference in New Issue