Update calculate_fan.py

pull/1/head
wsy182 2024-11-30 16:32:00 +08:00
parent 839cb9f2f9
commit cd74bd3eb5
1 changed files with 24 additions and 13 deletions

View File

@ -16,16 +16,28 @@ 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,# 基本胡牌四坎牌加一对将四坎牌可以是刻子或顺子计为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番。
"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) or
conditions.get("is_pure_cleared", False) or
conditions.get("is_double_pure_cleared", False)) else 0,
"is_cleared": lambda: 2 if is_cleared and not (conditions.get("is_pure_cleared", False) or
conditions.get("is_double_pure_cleared", False)) else 0,
"is_pure_cleared": lambda: 3 if is_cleared and len(melds) >= 1 and not conditions.get("is_double_pure_cleared",
False) else 0,
"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_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番。
@ -33,15 +45,16 @@ def calculate_fan(hand, melds, is_self_draw, is_cleared, conditions):
"is_di_hu": lambda: 12 if conditions.get("is_di_hu", False) else 0, # 地胡闲家在第一轮打牌时就胡牌计为12番。
}
# 逐一应用规则
# 逐一应用规则
for rule, func in rules.items():
fan += func()
result = func()
fan += result
print(f"Rule: {rule}, Fan: {result}") # 调试输出
return fan
def is_seven_pairs(hand):
"""
检查手牌是否是七对
@ -68,5 +81,3 @@ def is_big_pairs(hand):
result = counts.count(2) == 1 and counts.count(3) >= 3
print(f"Big pairs check: {result}, Counter: {Counter(counts)}")
return result