parent
df0aa388e2
commit
2bc34bc860
|
|
@ -225,6 +225,7 @@ def check_other_players(self, tile):
|
||||||
|
|
||||||
if not actions_taken:
|
if not actions_taken:
|
||||||
logger.info(f"玩家 {current_player} 打出的牌 {tile} 没有触发其他玩家的操作")
|
logger.info(f"玩家 {current_player} 打出的牌 {tile} 没有触发其他玩家的操作")
|
||||||
|
return actions_taken
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -42,55 +42,60 @@ class ChengduMahjongEngine:
|
||||||
logger.info("发牌结束并完成缺门设置!")
|
logger.info("发牌结束并完成缺门设置!")
|
||||||
|
|
||||||
def play_turn(self):
|
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(
|
tianhu = self.state.can_win(
|
||||||
self.state.hands[self.current_player],
|
self.state.hands[current_player],
|
||||||
self.state.melds[self.current_player],
|
self.state.melds[current_player],
|
||||||
self.state.missing_suits[self.current_player],
|
self.state.missing_suits[current_player],
|
||||||
)
|
)
|
||||||
|
|
||||||
if tianhu:
|
if tianhu:
|
||||||
# 天胡结算
|
# 天胡结算
|
||||||
self.state.winners.append(self.current_player)
|
self.state.winners.append(current_player)
|
||||||
self.state.print_game_state(self.current_player)
|
self.state.print_game_state(current_player)
|
||||||
for i in range(4):
|
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[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:
|
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 决策是否杠牌
|
# AI 决策是否杠牌
|
||||||
if should_gang(self.current_player, self.state, gang_type):
|
if should_gang(current_player, self.state, gang_type):
|
||||||
self.state.hands[self.current_player].perform_gang() # 执行杠操作
|
self.state.hands[current_player].perform_gang() # 执行杠操作
|
||||||
self.state.print_game_state(self.current_player)
|
self.state.print_game_state(current_player)
|
||||||
|
|
||||||
# 计算杠牌得分
|
# 计算杠牌得分
|
||||||
if gang_type == "暗杠":
|
if gang_type == "暗杠":
|
||||||
# 暗杠分数结算
|
# 暗杠分数结算
|
||||||
for i in range(4):
|
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[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 == "明杠":
|
elif gang_type == "明杠":
|
||||||
# 明杠分数结算
|
# 明杠分数结算
|
||||||
for i in range(4):
|
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[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:
|
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):
|
def check_game_over(self):
|
||||||
"""
|
"""
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue