Update chengdu_mahjong_state.py

dev
wangsiyuan 2024-12-01 00:41:35 +08:00
parent 8a966890d5
commit b17e775163
1 changed files with 9 additions and 5 deletions

View File

@ -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)
# **第三步:寻找对子并分组**
# 找到所有对子(至少两张相同的牌)