Files
card-game-engine/dsl-examples/nanchang.yaml
xiaoou 196786f1a7 fix(DSL): 南昌删除非南昌规则番型(清一色/混一色/带幺九/缺一门/无字)
南昌麻将无清一色/混一色/带幺九概念,只保留:
对对胡(碰碰胡)/暗七对(七对)/杠上开花/海底捞月/抢杠胡/天胡/地胡/癞子胡/鸡胡

--check: 6→5条警告(去掉base_fan=0误报)
2026-07-05 01:45:32 +08:00

101 lines
2.6 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

game:
name: 南昌麻将
type: mahjong
engine_type: mahjong
players: { min: 4, max: 4 }
requires:
- deck.generator_mahjong
- meldsolver.standard_win
- meldsolver.seven_pairs
- meldsolver.wildcard
- meldsolver.all_orphans
- phase.mahjong_turn
- phase.priority_arbitration
- scoring.fan_exclusion
deck:
generator: mahjong
include_honors: true
include_flowers: false
total: 136
deal:
cards_per_player: 13
dealer_extra: 1
# 南昌麻将的精(癞子)系统:骰子翻牌定精
# 翻到X则X+1为正精X+2为副精。字牌按序循环。
wildcard_rules:
type: random
meld_mode: any
random_count: 2
wildcard_encoding: 50
behavior: substitute
fan_calculation_policy: optimal
scoring:
per_wildcard_in_win: 2
independent_bonus: true
fan_types:
# 南昌麻将基础番型(无清一色/混一色/带幺九——这些不是南昌规则)
- { name: 对对胡, base_fan: 2 } # 碰碰胡
- { name: 暗七对, base_fan: 4 } # 七对
# 事件番型
- { name: 杠上开花, base_fan: 1, excludes: [海底捞月] }
- { name: 海底捞月, base_fan: 1 }
- { name: 抢杠胡, base_fan: 1 }
- { name: 天胡, base_fan: 10 }
- { name: 地胡, base_fan: 5 }
# 癞子相关
- { name: 癞子胡, base_fan: 1, condition: hand_contains_wildcard }
# 兜底
- { name: 鸡胡, base_fan: 1 }
fan_stacking: add
max_fan: 999
phases:
- name: deal
type: auto
action: deal_cards
next: play
- name: play
type: mahjong_turn
turn_order: counter_clockwise
sub_phases:
draw:
type: auto
action: draw_card
on_empty_deck: exhausted
self_action:
options:
- { action: discard }
- { action: an_kong }
- { action: bu_kong, condition: has_punged_pair }
- { action: win, condition: can_win_tumo }
others_reaction:
options:
- { action: chi, priority: 1, condition: can_chi }
- { action: pung, priority: 2, condition: has_two_same }
- { action: ming_kong, priority: 3, condition: has_three_same }
- { action: win, priority: 4, condition: can_win }
- { action: pass, priority: 0 }
priority_policy: highest_wins
on_win: game_over
end_conditions:
- { type: player_wins, action: settle }
- { type: deck_exhausted, action: draw_game }
- name: settle
type: auto
action: calculate_scores
next: null
scoring:
mode: fan_table
max_cap: 999
self_draw_multiplier: 1 # 自摸每家付1倍
discard_win_multiplier: 1 # 放炮付1倍(南昌麻将放炮不翻倍)
dealer_multiplier: 2 # 庄家输赢×2