From b17e775163b11a7180acd3976ab8d49428057592 Mon Sep 17 00:00:00 2001 From: wangsiyuan <2392948297@qq.com> Date: Sun, 1 Dec 2024 00:41:35 +0800 Subject: [PATCH] Update chengdu_mahjong_state.py --- src/engine/chengdu_mahjong_state.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/engine/chengdu_mahjong_state.py b/src/engine/chengdu_mahjong_state.py index 23411e9..638886d 100644 --- a/src/engine/chengdu_mahjong_state.py +++ b/src/engine/chengdu_mahjong_state.py @@ -1,8 +1,10 @@ from collections import Counter from .hand import Hand from .mahjong_tile import MahjongTile +from .meld import Meld # 导入 Meld 类 from loguru import logger + class ChengduMahjongState: def __init__(self): # 每个玩家的手牌 @@ -10,7 +12,7 @@ class ChengduMahjongState: # 每个玩家的打出的牌 self.discards = [[] for _ in range(4)] # 每个玩家的弃牌列表 # 每个玩家的明牌(碰、杠) - self.melds = [[] for _ in range(4)] + self.melds = [[] for _ in range(4)] # 每个玩家的明牌列表,存储 Meld 对象 # 剩余的牌堆 self.deck = [MahjongTile(suit, value) for suit in ["条", "筒", "万"] for value in range(1, 10)] * 4 # 108张牌 # 当前玩家索引 @@ -40,11 +42,11 @@ class ChengduMahjongState: raise ValueError("缺门设置无效") self.missing_suits[player] = missing_suit - def can_win(self, hand: Hand, melds: list, missing_suit: str): + def can_win(self, hand: Hand, melds: list[Meld], missing_suit: str): """ 判断玩家是否能胡牌。 :param hand: 玩家手牌(Hand 对象)。 - :param melds: 玩家已明牌的列表(碰、杠)。 + :param melds: 玩家已明牌的列表(Meld 对象列表)。 :param missing_suit: 玩家设置的缺门花色。 :return: True 表示能胡牌,False 表示不能胡牌。 """ @@ -93,8 +95,10 @@ class ChengduMahjongState: # **第二步:合并暗牌和明牌** all_tiles = hand.tiles[:] for meld in melds: - if meld[0] == "碰" or meld[0] == "杠": # 将明牌的 AAA 加入检查 - all_tiles.extend([meld[1], meld[1], meld[1]]) + if meld.type == "碰": # 添加碰牌(3 张) + all_tiles.extend([meld.tile] * 3) + elif meld.type == "杠": # 添加杠牌(4 张) + all_tiles.extend([meld.tile] * 4) # **第三步:寻找对子并分组** # 找到所有对子(至少两张相同的牌)