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