Files
card-game-engine/dsl-examples/guobiao.yaml
xiaoou 21bf35c453 fix: DSL命名不一致 — camelCase→underscore_case (UnderscoredNamingConvention)
DSL YAML字段includeHonors/includeFlowers/wildcardCount等使用了camelCase,
但DslLoader配置了UnderscoredNamingConvention(期望include_honors)。
导致所有DSL的deck配置(字牌/花牌/wildcard)从未生效:
- 武汉: 108张(只有数牌) → 现140张(136+4wildcard)
- 国标: 108张 → 现144张(+花+字)
- 广东: 108张 → 现136张(+花+字)

修复: 4个YAML文件统一改为underscore_case
2026-07-04 17:33:42 +08:00

104 lines
2.9 KiB
YAML

game:
name: 国标麻将
type: mahjong
engine_type: mahjong
players: { min: 4, max: 4 }
requires:
- deck.generator_mahjong
- deck.flower_cards
- meldsolver.standard_win
- meldsolver.seven_pairs
- meldsolver.thirteen_orphans
- meldsolver.all_orphans
- meldsolver.double_dragon
- phase.mahjong_turn
- phase.priority_arbitration
- scoring.fan_exclusion
deck:
generator: mahjong
include_honors: true
include_flowers: true
total: 144
deal:
cards_per_player: 13
dealer_extra: 1
flower_rules:
on_draw: replace_and_draw
scoring:
normal: 1
matching:
value: 1
mapping:
1: [春, 梅]
2: [夏, 兰]
3: [秋, 竹]
4: [冬, 菊]
win_min_fan: 8
fan_stacking: add_max
fan_types:
# 88番
- { name: 大四喜, base_fan: 88, level: 12, excludes: [圈风, 门风, 三风] }
- { name: 大三元, base_fan: 88, level: 12, excludes: [双箭刻] }
- { name: 十三幺, base_fan: 88, level: 12, excludes: [五门齐, 门前清, 单钓将, 混幺九] }
- { name: 连七对, base_fan: 88, level: 12, excludes: [七对, 门前清, 单钓将, 清一色, 无字] }
# 64番
- { name: 小四喜, base_fan: 64, level: 11, excludes: [三风] }
- { name: 小三元, base_fan: 64, level: 11, excludes: [双箭刻] }
- { name: 字一色, base_fan: 64, level: 11, excludes: [碰碰和, 全带幺, 混幺九, 缺一门] }
# 48番
- { name: 一色四同顺, base_fan: 48, level: 10, excludes: [一色三同顺, 四归一, 一般高] }
# 24番
- { name: 清一色, base_fan: 24, level: 8, excludes: [无字, 缺一门] }
- { name: 七对, base_fan: 24, level: 8, excludes: [门前清, 单钓将] }
- { name: 全双, base_fan: 24, level: 8 }
# ... Demo阶段只列关键番种
phases:
- name: deal
type: auto
action: deal_cards_with_flowers
next: play
- name: play
type: mahjong_turn
turn_order: counter_clockwise
sub_phases:
draw:
type: auto
action: draw_card
on_draw_flower: replace
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_and_fan_ge_8 }
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_and_fan_ge_8 }
- { 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