diff --git a/src/engine/utils.py b/src/engine/utils.py index 442a420..0d39a7e 100644 --- a/src/engine/utils.py +++ b/src/engine/utils.py @@ -39,21 +39,21 @@ def is_valid_group(tiles): return False -def try_win(remaining_tiles, groups_formed=0): +def try_win(remaining_tiles, groups_formed=0, has_pair=False): """ 尝试将剩余牌分组为合法的刻子或顺子,并检查是否有一对将牌。 """ - # 如果没有剩余牌,检查是否形成了四坎牌 + # 如果没有剩余牌,检查是否形成了四坎牌且有一对将牌 if not remaining_tiles: - return groups_formed == 4 + return groups_formed == 4 and has_pair # 检查是否可以找到一对将牌 - for i in range(len(remaining_tiles) - 1): - if remaining_tiles[i] == remaining_tiles[i + 1]: # 找到对子 - temp_tiles = remaining_tiles[:i] + remaining_tiles[i + 2:] # 移除对子 - # 尝试分组剩余牌 - if try_win(temp_tiles, groups_formed): - return True + if not has_pair: # 如果还没有找到将牌 + for i in range(len(remaining_tiles) - 1): + if remaining_tiles[i] == remaining_tiles[i + 1]: # 找到对子 + temp_tiles = remaining_tiles[:i] + remaining_tiles[i + 2:] # 移除对子 + if try_win(temp_tiles, groups_formed, has_pair=True): + return True # 检查是否可以形成合法组(刻子或顺子) for i in range(len(remaining_tiles)): @@ -63,7 +63,7 @@ def try_win(remaining_tiles, groups_formed=0): if is_valid_group(group): 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): + if try_win(temp_tiles, groups_formed + 1, has_pair): return True return False