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):
"""
检查游戏是否结束
游戏结束条件
1. 牌堆已空
2. 赢的玩家数量 >= 3
"""
# 检查是否已无牌可摸
if self.state.remaining_tiles == 0:
@ -111,8 +114,14 @@ class ChengduMahjongEngine:
logger.info("游戏结束:牌堆已空")
return
# 检查是否满足血战结束条件
check_blood_battle(self)
# 检查是否满足血战结束条件:赢家数量 >= 3
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):
"""

View File

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

View File

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