1
1
This commit is contained in:
37
src/engine/hand.py
Normal file
37
src/engine/hand.py
Normal file
@@ -0,0 +1,37 @@
|
||||
from collections import defaultdict
|
||||
|
||||
class Hand:
|
||||
def __init__(self):
|
||||
# 存储所有的牌
|
||||
self.tiles = []
|
||||
# 存储每种牌的数量,默认值为 0
|
||||
self.tile_count = defaultdict(int)
|
||||
|
||||
def add_tile(self, tile):
|
||||
""" 向手牌中添加一张牌 """
|
||||
self.tiles.append(tile) # 将牌添加到手牌中
|
||||
self.tile_count[tile] += 1 # 增加牌的数量
|
||||
|
||||
def remove_tile(self, tile):
|
||||
""" 从手牌中移除一张牌 """
|
||||
if self.tile_count[tile] > 0:
|
||||
self.tiles.remove(tile)
|
||||
self.tile_count[tile] -= 1
|
||||
else:
|
||||
raise ValueError(f"手牌中没有该牌: {tile}")
|
||||
|
||||
def get_tile_count(self, tile):
|
||||
""" 获取手牌中某张牌的数量 """
|
||||
return self.tile_count[tile]
|
||||
|
||||
def can_pong(self, tile):
|
||||
""" 判断是否可以碰(即是否有3张相同的牌) """
|
||||
return self.tile_count[tile] >= 2
|
||||
|
||||
def can_gang(self, tile):
|
||||
""" 判断是否可以杠(即是否有4张相同的牌) """
|
||||
return self.tile_count[tile] >= 3
|
||||
|
||||
def __repr__(self):
|
||||
""" 返回手牌的字符串表示 """
|
||||
return f"手牌: {self.tiles}, 牌的数量: {dict(self.tile_count)}"
|
||||
Reference in New Issue
Block a user