42 lines
1.6 KiB
Python
42 lines
1.6 KiB
Python
class ChengduMahjongEngine:
|
|
def __init__(self):
|
|
self.state = ChengduMahjongState()
|
|
self.game_over = False
|
|
|
|
def draw_tile(self):
|
|
# 当前玩家摸牌
|
|
if self.state.remaining_tiles == 0:
|
|
self.game_over = True
|
|
return "牌堆已空"
|
|
tile = self.state.deck.pop(0)
|
|
self.state.remaining_tiles -= 1
|
|
self.state.hands[self.state.current_player][tile] += 1
|
|
return tile
|
|
|
|
def discard_tile(self, tile):
|
|
# 当前玩家打牌
|
|
if self.state.hands[self.state.current_player][tile] == 0:
|
|
raise ValueError("当前玩家没有这张牌")
|
|
self.state.hands[self.state.current_player][tile] -= 1
|
|
self.state.discards[self.state.current_player].append(tile)
|
|
|
|
def peng(self, tile):
|
|
# 碰牌逻辑
|
|
player = self.state.current_player
|
|
if self.state.hands[player][tile] < 2:
|
|
raise ValueError("碰牌条件不满足")
|
|
self.state.hands[player][tile] -= 2
|
|
self.state.melds[player].append(("peng", tile))
|
|
|
|
def gang(self, tile, mode="ming"):
|
|
# 杠牌逻辑
|
|
player = self.state.current_player
|
|
if mode == "ming" and self.state.hands[player][tile] == 3:
|
|
self.state.hands[player][tile] -= 3
|
|
self.state.melds[player].append(("ming_gang", tile))
|
|
elif mode == "an" and self.state.hands[player][tile] == 4:
|
|
self.state.hands[player][tile] -= 4
|
|
self.state.melds[player].append(("an_gang", tile))
|
|
else:
|
|
raise ValueError("杠牌条件不满足")
|