mjAi/src/engine/chengdu_mahjong_engine.py

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("杠牌条件不满足")