diff --git a/src/engine/calculate_fan.py b/src/engine/calculate_fan.py index 3196d30..778ac97 100644 --- a/src/engine/calculate_fan.py +++ b/src/engine/calculate_fan.py @@ -16,23 +16,21 @@ def calculate_fan(hand, melds, is_self_draw, is_cleared, conditions): # 定义番种规则 rules = { - "basic_win": lambda: 1 if not (conditions.get("is_seven_pairs", False) or conditions.get("is_big_pairs", False) or conditions.get("is_dragon_seven_pairs", False)) else 0, - "is_cleared": lambda: 2 if is_cleared else 0, # 清一色 - "is_pure_cleared": lambda: 3 if is_cleared and len(melds) >= 1 else 0, # 清对 - "is_double_pure_cleared": lambda: 4 if is_cleared and len(melds) >= 2 else 0, # 极中极 - "is_seven_pairs": lambda: 2 if conditions.get("is_seven_pairs", False) and not conditions.get("is_dragon_seven_pairs", False) else 0, - "is_dragon_seven_pairs": lambda: 12 if conditions.get("is_dragon_seven_pairs", False) else 0, # 龙七对 - "is_clear_seven_pairs": lambda: 12 if conditions.get("is_clear_seven_pairs", False) else 0, # 清七对 - "is_big_pairs": lambda: 2 if conditions.get("is_big_pairs", False) else 0, # 大对子 - "is_small_pairs": lambda: 2 if conditions.get("is_small_pairs", False) else 0, # 小七对 - "is_full_request": lambda: 6 if conditions.get("is_full_request", False) else 0, # 全求人 - "is_gang_flower": lambda: 1 if conditions.get("is_gang_flower", False) else 0, # 杠上开花 - "is_rob_gang": lambda: 1 if conditions.get("is_rob_gang", False) else 0, # 抢杠胡 - "is_under_the_sea": lambda: 1 if conditions.get("is_under_the_sea", False) else 0, # 海底捞月 - "is_cannon": lambda: 1 if conditions.get("is_cannon", False) else 0, # 放炮 - "is_tian_hu": lambda: 12 if conditions.get("is_tian_hu", False) else 0, # 天胡 - "is_di_hu": lambda: 12 if conditions.get("is_di_hu", False) else 0, # 地胡 - "is_self_draw": lambda: 1 if is_self_draw and conditions.get("add_self_draw", True) else 0, # 自摸 + "basic_win": lambda: 1 if not (conditions.get("is_seven_pairs", False) or conditions.get("is_big_pairs", False) or conditions.get("is_dragon_seven_pairs", False)) else 0,# 基本胡牌,四坎牌加一对将,四坎牌可以是刻子或顺子,计为1番。 + "is_cleared": lambda: 2 if is_cleared else 0, # 清一色,不带杠的清一色称为“素清”,计为2番。 + "is_pure_cleared": lambda: 3 if is_cleared and len(melds) >= 1 else 0, # 清对,带杠的清一色或清一色对子胡(简称“清对”)计为3番,称为“极品”,点炮40分。 + "is_double_pure_cleared": lambda: 4 if is_cleared and len(melds) >= 2 else 0, # 极中极,带两杠的清一色或清一色对子胡带杠计为4番,称为“极中极”或“精品”,点炮80分。 + "is_seven_pairs": lambda: 2 if conditions.get("is_seven_pairs", False) and not conditions.get("is_dragon_seven_pairs", False) else 0, #七对:手牌由7个对子组成,计为2番。 + "is_dragon_seven_pairs": lambda: 12 if conditions.get("is_dragon_seven_pairs", False) else 0, # 龙七对,七对中有一对是三张相同的牌,计为12番。 + "is_clear_seven_pairs": lambda: 12 if conditions.get("is_clear_seven_pairs", False) else 0, # 清七对,全部由一种花色组成的七对,计为12番。 + "is_big_pairs": lambda: 2 if conditions.get("is_big_pairs", False) else 0, # 大对子,手牌由四个对子加一个刻子组成,计为2番。 + "is_small_pairs": lambda: 2 if conditions.get("is_small_pairs", False) else 0, # 小七对,有六对加上一个对子,计为2番。 + "is_full_request": lambda: 6 if conditions.get("is_full_request", False) else 0, # 全求人,所有牌都是通过碰、杠、吃别人打出的牌来完成的,计为6番。 + "is_gang_flower": lambda: 1 if conditions.get("is_gang_flower", False) else 0, # 杠上开花,在杠牌之后立即自摸胡牌,计为1番。 + "is_rob_gang": lambda: 1 if conditions.get("is_rob_gang", False) else 0, # 抢杠胡,当其他玩家明杠时,你正好可以胡那张牌,计为1番。 + "is_under_the_sea": lambda: 1 if conditions.get("is_under_the_sea", False) else 0, # 海底捞月,最后一张牌被玩家摸到并胡牌,计为1番。 + "is_tian_hu": lambda: 12 if conditions.get("is_tian_hu", False) else 0, # 天胡,庄家起牌后直接胡牌,计为12番。 + "is_di_hu": lambda: 12 if conditions.get("is_di_hu", False) else 0, # 地胡,闲家在第一轮打牌时就胡牌,计为12番。 } # 逐一应用规则