parent
ff15ecb1a1
commit
5f22c0b6eb
|
|
@ -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):
|
||||||
"""
|
"""
|
||||||
|
|
|
||||||
|
|
@ -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 # 花色超过两种,不能胡牌
|
||||||
|
|
||||||
# 检查是否打完缺门的花色
|
# 检查是否打完缺门的花色
|
||||||
|
|
|
||||||
|
|
@ -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__":
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue