|
|
e3ff0f057e
|
feat: DSL字段 wildcard_rules.meld_mode (standard/any)
之前: 特殊风牌组合是'隐式规则',硬编码在type=random检查中
现在: YAML声明 meld_mode: any (南昌麻将),引擎检查并报告不支持
WildcardConfig新增MeldMode字段(默认standard):
- standard: 仅顺子/刻子/对子(引擎支持)
- any: 任意3张可配面子(南昌麻将,引擎不支持)
--check: meld_mode=any → '引擎未实现→仅支持standard'
规则从'隐式'变为DSL可表达的显式规则
|
2026-07-05 00:40:03 +08:00 |
|
|
|
248af7642d
|
feat: 计分倍数可配置化 (自摸/点炮/庄家)
ScoringDslConfig + ScoringConfig 新增:
- self_draw_multiplier (默认1): 自摸每家付 baseFan × N
- discard_win_multiplier (默认3): 放炮者付 baseFan × N
- dealer_multiplier (默认1): 庄家输赢 × N
ScoreEngine.Settle:
- 硬编码 *3 → 读 DiscardWinMultiplier
- 庄家倍数: dealerWon→所有人付倍数; 闲家赢→仅庄家付倍数
南昌麻将 DSL: self_draw=1, discard_win=1, dealer=2
58 tests pass, 5 variants all 0 errors
|
2026-07-04 21:12:45 +08:00 |
|
|
|
ae9c4c4142
|
feat: EndConditions映射 + 骰子翻牌定精(random wildcard)
EndConditions:
- BuildPhases 现在映射 PhaseConfig.Endconditions (之前 DslLoader 解析但 BuildPhases 忽略)
- 4处 _rules.Phases.Any(p => p.ParallelElimination) → _playPhase.ParallelElimination
- 新增 _playPhase 字段, 游戏不再依赖原始 DSL 做运行时判断
Random wildcard (骰子翻牌定精):
- WildcardRegistry.ComputeNextTiles(): 翻到 X → 正精=X+1, 副精=X+2 (9→1 循环, 字牌序循环)
- WildcardRegistry.RevealedTile 记录翻到的牌
- Deal() 发牌后翻一张牌确定精, 支持 random_count 控制精数量
- WildcardConfig 新增 RandomCount 字段 (默认2=正精+副精)
- ValidateRuleCompliance 接受 random 类型
南昌麻将 DSL:
- 新增 dsl-examples/nanchang.yaml (136张, random精, 无吃)
- 引擎加载 7/7, 1000局 0错误, 胡牌率 61%
58 tests pass, 5 种玩法全部 0 错误验证通过
|
2026-07-04 21:06:16 +08:00 |
|