Update calculate_fan.py
parent
0c8a2ff668
commit
54a9161c0a
|
|
@ -16,38 +16,37 @@ def calculate_fan(hand, melds, is_self_draw, is_cleared, conditions):
|
||||||
|
|
||||||
# 定义番种规则
|
# 定义番种规则
|
||||||
rules = {
|
rules = {
|
||||||
# 基本胡:当清对或更高级规则生效时,屏蔽
|
"is_pure_cleared": lambda: 3 if is_cleared and len(melds) == 3 and not conditions.get("is_double_pure_cleared",
|
||||||
# 清对:高级规则,优先处理
|
False) else 0,
|
||||||
"is_pure_cleared": lambda: 3 if is_cleared and len(melds) == 3 and not conditions.get("is_double_pure_cleared", False) else 0,
|
"is_double_pure_cleared": lambda: 4 if is_cleared and len(melds) >= 2 and conditions.get(
|
||||||
# 极中极:高级规则
|
"is_double_pure_cleared", False) else 0,
|
||||||
"is_double_pure_cleared": lambda: 4 if is_cleared and len(melds) >= 2 and 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
|
"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,
|
conditions.get("is_double_pure_cleared", False) or
|
||||||
|
conditions.get("is_clear_seven_pairs", False)) else 0,
|
||||||
"is_seven_pairs": lambda: 2 if conditions.get("is_seven_pairs", False) and not conditions.get(
|
"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", False) else 0,
|
||||||
# 七对:手牌由7个对子组成,计为2番。
|
|
||||||
"is_dragon_seven_pairs": lambda: 12 if 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,
|
||||||
# 龙七对,七对中有一对是三张相同的牌,计为12番。
|
|
||||||
"is_clear_seven_pairs": lambda: 12 if conditions.get("is_clear_seven_pairs", False) else 0,
|
"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,
|
||||||
"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,
|
||||||
"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,
|
"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,
|
||||||
"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,
|
||||||
"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,
|
||||||
"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,
|
||||||
"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,
|
||||||
"is_di_hu": lambda: 12 if conditions.get("is_di_hu", False) else 0, # 地胡,闲家在第一轮打牌时就胡牌,计为12番。
|
|
||||||
# 基本胡:基础规则,仅在高级规则未生效时计算
|
|
||||||
"basic_win": lambda: 1 if not (conditions.get("is_seven_pairs", False) or
|
"basic_win": lambda: 1 if not (conditions.get("is_seven_pairs", False) or
|
||||||
conditions.get("is_big_pairs", False) or
|
conditions.get("is_big_pairs", False) or
|
||||||
conditions.get("is_dragon_seven_pairs", False) or
|
conditions.get("is_dragon_seven_pairs", False) or
|
||||||
conditions.get("is_pure_cleared", False) or
|
conditions.get("is_pure_cleared", False) or
|
||||||
conditions.get("is_double_pure_cleared", False)) else 0,
|
conditions.get("is_double_pure_cleared", False) or
|
||||||
|
conditions.get("is_small_pairs", False) or
|
||||||
|
conditions.get("is_clear_seven_pairs", False) or
|
||||||
|
conditions.get("is_full_request", False)) else 0,
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
print("\nCalculating fan...")
|
print("\nCalculating fan...")
|
||||||
# 逐一应用规则
|
# 逐一应用规则
|
||||||
for rule, func in rules.items():
|
for rule, func in rules.items():
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue