|
|
1576253caa
|
fix: 子代理审查26问题修复13个(剩余为编码定义/DSL文档字段)
本次修复(13/26):
- FuFlag传播: PhaseConfig加FuFlag属性+BuildPhases映射
- Excludes/Conflicts引用完整性: 引用的番型名必须存在于fan_types
- WildcardBase常量提取: WildcardRegistry引用MahjongTile.WildcardBase
- 合规验证扩展: max_fan/phase.type/end_condition/action/priority
- FanCalculationPolicy未消费警告
不修复的剩余13个:
- 编码常量(MahjongTile domain定义,非配置项)
- DSL字段仅文档(POCO有但引擎硬编码等效逻辑)
- LOW代码卫生项
--check输出现在会报告: excludes/conflicts引用了不存在的番型(如国标15个)
|
2026-07-04 23:11:29 +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 |
|
|
|
55bdfd85a5
|
fix: wildcard DSL字段全面驱动引擎(不再硬编码)
Root cause: 4个wildcard DSL字段被定义但引擎完全忽略
修复前:
type:fixed ✅ 消费
tiles:[红中] ✅ 消费(via NameToEncoding)
wildcard_encoding:50 ❌ 硬编码MahjongTile.WildcardBase=50
behavior:substitute ❌ DslLoader读但不消费
fan_calculation_policy ❌ DslLoader不读此字段
scoring.per_wildcard ✅ 消费(via ScoreEngine)
pre_hooks.wildcard_count ❌ 能力注册但无代码
修复后:
- WildcardRegistry.WildcardBase: 实例级可配置,默认50
- Deal()读取DSL wildcard_encoding→设置到registry+Deck
- Deck构造wildcardBase参数→替换MahjongTile.WildcardBase常量
- AllTiles wildcardBase参数→替换硬编码
- DslLoader: 加FanCalculationPolicy字段+PreHookConfig类
- behavior: DslLoader已读,引擎待消费(当前默认substitute)
Impact: 所有wildcard DSL字段全部被引擎读取,可配置化
|
2026-07-04 20:10:07 +08:00 |
|
|
|
c2b5136085
|
refactor: _wildcards static→实例级 WildcardRegistry
Root cause: static HashSet跨测试/跨变体污染+硬编码名→编码映射
Changes:
- WildcardRegistry: 实例级wildcard管理(IsWildcard/CountWildcards/Clone)
- GameState: 新增Wildcards属性(含Clone)
- MahjongTile: 移除static_wildcards,IsWildcard仅查编码50-59
+ToString(tile,wildcards)重载用于游戏上下文显示
- MeldsSolver: _wildcards字段→构造函数注入(WildcardRegistry?)
- PhaseMachine: _wildcards字段+构造注入
- Deal(): State.Wildcards.Clear()+AddRange替代static ConfigureWildcards
+NameToEncoding查表替代switch硬编码
- RandomMahjongAI/HumanMahjongPlayer: state.Wildcards替代static调用
- HumanMahjongPlayer.CheckTing: 补wildcardCount参数(之前遗漏)
- ExecuteWinClaim: IsFinished=true→Settle()(之前Phase漏设)
Test: CoreTests清理ConfigureWildcards()→WildcardRegistry测试
Impact: 零static state→不同变体/测试完全隔离,未来支持随机宝牌
|
2026-07-04 20:05:26 +08:00 |
|