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 collections import Counter
from .hand import Hand from .hand import Hand
from .mahjong_tile import MahjongTile from .mahjong_tile import MahjongTile
from .meld import Meld # 导入 Meld 类
from loguru import logger from loguru import logger
class ChengduMahjongState: class ChengduMahjongState:
def __init__(self): def __init__(self):
# 每个玩家的手牌 # 每个玩家的手牌
@ -10,7 +12,7 @@ class ChengduMahjongState:
# 每个玩家的打出的牌 # 每个玩家的打出的牌
self.discards = [[] for _ in range(4)] # 每个玩家的弃牌列表 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张牌 self.deck = [MahjongTile(suit, value) for suit in ["", "", ""] for value in range(1, 10)] * 4 # 108张牌
# 当前玩家索引 # 当前玩家索引
@ -40,11 +42,11 @@ class ChengduMahjongState:
raise ValueError("缺门设置无效") raise ValueError("缺门设置无效")
self.missing_suits[player] = missing_suit 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 hand: 玩家手牌Hand 对象
:param melds: 玩家已明牌的列表 :param melds: 玩家已明牌的列表Meld 对象列表
:param missing_suit: 玩家设置的缺门花色 :param missing_suit: 玩家设置的缺门花色
:return: True 表示能胡牌False 表示不能胡牌 :return: True 表示能胡牌False 表示不能胡牌
""" """
@ -93,8 +95,10 @@ class ChengduMahjongState:
# **第二步:合并暗牌和明牌** # **第二步:合并暗牌和明牌**
all_tiles = hand.tiles[:] all_tiles = hand.tiles[:]
for meld in melds: for meld in melds:
if meld[0] == "" or meld[0] == "": # 将明牌的 AAA 加入检查 if meld.type == "": # 添加碰牌3 张)
all_tiles.extend([meld[1], meld[1], meld[1]]) all_tiles.extend([meld.tile] * 3)
elif meld.type == "": # 添加杠牌4 张)
all_tiles.extend([meld.tile] * 4)
# **第三步:寻找对子并分组** # **第三步:寻找对子并分组**
# 找到所有对子(至少两张相同的牌) # 找到所有对子(至少两张相同的牌)