Commit Graph

3 Commits

Author SHA1 Message Date
cadf76999e fix: DSL total字段从未被引擎校验+广东牌库数修正
Root cause:
1. Deal()完全忽略 _rules.Deck.Total → 牌库大小由 includeFlags 决定
2. Guangdong DSL: total=136 但 include_flowers=true → 实际144张
3. DS与引擎脱节导致广东无限对局(flaky test根因之一)

修复:
- Deck构造加 expectedTotal 可选参数,不一致时抛 InvalidOperationException
- Deal()传 _rules.Deck.Total → 所有DSL变更牌数时必须引擎一致
- Guangdong DSL: total 136→144(广东麻将含花牌=144张)

Breaks: 无(向后兼容,expectedTotal默认null=不校验)
2026-07-04 18:38:15 +08:00
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
3c6748bf06 [verified] feat: 麻将规则引擎 Demo 完整实现
RuleEngine 核心类:
- MahjongTile.cs — int编码 (1-29万条筒, 31-37字, 41-48花, 50-59宝牌)
- MeldsSolver.cs — 标准回溯 + wildcard缺口填充 + 七对/十三幺/全不靠
- PhaseMachine.cs — 回合机(摸打碰杠胡 + 优先级仲裁)
- ScoreEngine.cs — 番型计分 + 互斥图
- DslLoader.cs — YAML DSL加载 + 能力检查

4个DSL: 四川血战/广东鸡平胡/国标麻将/武汉麻将
控制台Demo: 交互模式 + 自动模式(--auto)
测试: 33个测试用例, 32个通过
2026-07-03 17:51:59 +08:00