dev
parent
91ac18c8e6
commit
5e4f49edbb
|
|
@ -32,7 +32,7 @@ def is_cleared(hand, melds):
|
||||||
gang_count = sum(1 for meld in melds if meld.is_kong())
|
gang_count = sum(1 for meld in melds if meld.is_kong())
|
||||||
|
|
||||||
# 根据杠的数量和是否符合基本胡规则确定番数
|
# 根据杠的数量和是否符合基本胡规则确定番数
|
||||||
sorted_tiles = sorted(all_tiles, key=lambda t: (t.suit, t.value))
|
sorted_tiles = sorted(hand.tiles, key=lambda t: (t.suit, t.value))
|
||||||
if try_win(sorted_tiles): # 检查是否符合基本胡(四坎牌加一对将)
|
if try_win(sorted_tiles): # 检查是否符合基本胡(四坎牌加一对将)
|
||||||
if gang_count == 0:
|
if gang_count == 0:
|
||||||
return 2 # 素清
|
return 2 # 素清
|
||||||
|
|
|
||||||
|
|
@ -1,25 +1,3 @@
|
||||||
def get_suit(tile_index):
|
|
||||||
"""
|
|
||||||
根据牌的索引返回花色。
|
|
||||||
"""
|
|
||||||
if 0 <= tile_index <= 35:
|
|
||||||
return "条"
|
|
||||||
elif 36 <= tile_index <= 71:
|
|
||||||
return "筒"
|
|
||||||
elif 72 <= tile_index <= 107:
|
|
||||||
return "万"
|
|
||||||
else:
|
|
||||||
raise ValueError(f"无效的牌索引: {tile_index}")
|
|
||||||
|
|
||||||
|
|
||||||
def get_tile_name(tile_index):
|
|
||||||
"""
|
|
||||||
根据牌的索引返回牌名(例如:1条,2筒等)。
|
|
||||||
"""
|
|
||||||
suit = get_suit(tile_index)
|
|
||||||
return f"{tile_index % 36 + 1}{suit}"
|
|
||||||
|
|
||||||
|
|
||||||
def is_valid_group(tiles):
|
def is_valid_group(tiles):
|
||||||
"""
|
"""
|
||||||
判断是否是合法的刻子(AAA)或顺子(ABC)。
|
判断是否是合法的刻子(AAA)或顺子(ABC)。
|
||||||
|
|
@ -61,8 +39,12 @@ def try_win(remaining_tiles, groups_formed=0, has_pair=False):
|
||||||
for k in range(j + 1, len(remaining_tiles)):
|
for k in range(j + 1, len(remaining_tiles)):
|
||||||
group = [remaining_tiles[i], remaining_tiles[j], remaining_tiles[k]]
|
group = [remaining_tiles[i], remaining_tiles[j], remaining_tiles[k]]
|
||||||
if is_valid_group(group):
|
if is_valid_group(group):
|
||||||
temp_tiles = remaining_tiles[:i] + remaining_tiles[i + 1:j] + \
|
temp_tiles = (
|
||||||
remaining_tiles[j + 1:k] + remaining_tiles[k + 1:]
|
remaining_tiles[:i]
|
||||||
|
+ remaining_tiles[i + 1:j]
|
||||||
|
+ remaining_tiles[j + 1:k]
|
||||||
|
+ remaining_tiles[k + 1:]
|
||||||
|
)
|
||||||
if try_win(temp_tiles, groups_formed + 1, has_pair):
|
if try_win(temp_tiles, groups_formed + 1, has_pair):
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -73,7 +73,10 @@ def test_is_cleared_with_one_gang():
|
||||||
hand.add_tile(MahjongTile("筒", 9))
|
hand.add_tile(MahjongTile("筒", 9))
|
||||||
hand.add_tile(MahjongTile("筒", 9))
|
hand.add_tile(MahjongTile("筒", 9))
|
||||||
|
|
||||||
melds = [Meld(MahjongTile("筒", 7), "杠")] # 带 1 杠
|
# 添加明牌(1 杠)
|
||||||
|
melds = [Meld(MahjongTile("筒", 7), "杠")]
|
||||||
|
|
||||||
|
# 检查是否为极品(带 1 杠的清一色)
|
||||||
assert is_cleared(hand, melds) == 3, "测试失败:极品应为 3 番"
|
assert is_cleared(hand, melds) == 3, "测试失败:极品应为 3 番"
|
||||||
print("测试通过:极品")
|
print("测试通过:极品")
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue