wsy182 2024-12-01 17:24:25 +08:00
parent ff15ecb1a1
commit 5f22c0b6eb
3 changed files with 29 additions and 12 deletions

View File

@ -104,6 +104,9 @@ class ChengduMahjongEngine:
def check_game_over(self): def check_game_over(self):
""" """
检查游戏是否结束 检查游戏是否结束
游戏结束条件
1. 牌堆已空
2. 赢的玩家数量 >= 3
""" """
# 检查是否已无牌可摸 # 检查是否已无牌可摸
if self.state.remaining_tiles == 0: if self.state.remaining_tiles == 0:
@ -111,8 +114,14 @@ class ChengduMahjongEngine:
logger.info("游戏结束:牌堆已空") logger.info("游戏结束:牌堆已空")
return return
# 检查是否满足血战结束条件 # 检查是否满足血战结束条件:赢家数量 >= 3
check_blood_battle(self) if len(self.state.winners) >= 3:
self.game_over = True
logger.info(f"游戏结束:赢家数量达到 {len(self.state.winners)}")
return
# 如果没有触发结束条件,继续游戏
logger.info(f"当前赢家数量: {len(self.state.winners)},游戏继续")
def run(self): def run(self):
""" """

View File

@ -117,7 +117,7 @@ class ChengduMahjongState:
# **第一步:检查花色限制** # **第一步:检查花色限制**
suits = {tile.suit for tile in hand.tiles} suits = {tile.suit for tile in hand.tiles}
if len(suits) > 2: if len(suits) > 2:
logger.info("花色超过两种,不能胡牌") # logger.info("花色超过两种,不能胡牌")
return False # 花色超过两种,不能胡牌 return False # 花色超过两种,不能胡牌
# 检查是否打完缺门的花色 # 检查是否打完缺门的花色

View File

@ -1,5 +1,5 @@
from src.engine.chengdu_mahjong_engine import ChengduMahjongEngine from src.engine.chengdu_mahjong_engine import ChengduMahjongEngine
from loguru import logger
def test_mahjong_engine(): def test_mahjong_engine():
""" """
@ -15,24 +15,32 @@ def test_mahjong_engine():
engine.deal_tiles() engine.deal_tiles()
# 检查发牌后的状态 # 检查发牌后的状态
print(f"庄家: 玩家 {engine.state.current_player}") logger.info(f"庄家: 玩家 {engine.state.current_player}")
for player in range(4): for player in range(4):
hand = engine.state.hands[player] hand = engine.state.hands[player]
print(f"玩家 {player} 的手牌: {hand}") logger.info(f"玩家 {player} 的手牌: {hand}")
print(f"玩家 {player} 的缺门: {engine.state.missing_suits[player]}") logger.info(f"玩家 {player} 的缺门: {engine.state.missing_suits[player]}")
# 模拟游戏主循环 # 模拟游戏主循环
try: try:
engine.run() engine.run()
except Exception as e: except Exception as e:
print(f"运行时出错: {e}") logger.error(f"测试引擎时出错: {e}")
# 打印游戏结束后的状态 # 打印游戏结束后的状态
print("\n游戏结束!") logger.info("游戏结束!")
for player in range(4): for player in range(4):
print(f"玩家 {player} 的分数: {engine.state.scores[player]}") logger.info(f"玩家 {player} 的分数: {engine.state.scores[player]}")
print(f"玩家 {player} 的明牌: {engine.state.melds[player]}") logger.info(f"玩家 {player} 的明牌: {engine.state.melds[player]}")
print(f"赢家: {engine.state.winners}") logger.info(f"玩家 {player} 的手牌: {engine.state.hands[player]}")
logger.info(f"玩家 {player} 的缺门: {engine.state.missing_suits[player]}")
# 记录赢家信息
if engine.state.winners:
logger.info(f"赢家: {engine.state.winners}")
else:
logger.info("没有赢家!")
# 运行测试 # 运行测试
if __name__ == "__main__": if __name__ == "__main__":