Update chengdu_mahjong_state.py
parent
8a966890d5
commit
b17e775163
|
|
@ -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)
|
||||
|
||||
# **第三步:寻找对子并分组**
|
||||
# 找到所有对子(至少两张相同的牌)
|
||||
|
|
|
|||
Loading…
Reference in New Issue