From 5e4f49edbb9fe04dcdc882c69917bf65604fb69c Mon Sep 17 00:00:00 2001 From: wangsiyuan <2392948297@qq.com> Date: Sun, 1 Dec 2024 03:06:12 +0800 Subject: [PATCH] 1 --- src/engine/fan_type.py | 2 +- src/engine/utils.py | 30 ++++++------------------------ tests/test_fan_type.py | 5 ++++- 3 files changed, 11 insertions(+), 26 deletions(-) diff --git a/src/engine/fan_type.py b/src/engine/fan_type.py index 7278f75..b86828c 100644 --- a/src/engine/fan_type.py +++ b/src/engine/fan_type.py @@ -32,7 +32,7 @@ def is_cleared(hand, melds): 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 gang_count == 0: return 2 # 素清 diff --git a/src/engine/utils.py b/src/engine/utils.py index 0d39a7e..cea81c1 100644 --- a/src/engine/utils.py +++ b/src/engine/utils.py @@ -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): """ 判断是否是合法的刻子(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)): group = [remaining_tiles[i], remaining_tiles[j], remaining_tiles[k]] if is_valid_group(group): - temp_tiles = remaining_tiles[:i] + remaining_tiles[i + 1:j] + \ - remaining_tiles[j + 1:k] + remaining_tiles[k + 1:] + temp_tiles = ( + 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): return True diff --git a/tests/test_fan_type.py b/tests/test_fan_type.py index 10e8985..3824bef 100644 --- a/tests/test_fan_type.py +++ b/tests/test_fan_type.py @@ -73,7 +73,10 @@ def test_is_cleared_with_one_gang(): 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 番" print("测试通过:极品")