fix: 五个DSL设计特性从未实现(对照审查)
Root cause: 独立对照DSL审查发现5个底层设计断连。 1. PhaseMachine.GetFanValue: 硬编码6种番型值,完全不读_fanConfig → 国标/广东DSL定义的番型在winMinFan检查中被当0分 → 大四喜(88番) check: GetFanValue=0 < 8 → 不让胡 2. fan_stacking(add_max/max_level): DslLoader正确读取但无消费者 → 国标add_max→退化为add(全加) → 广东max_level→退化为add(全加) → Level字段零消费,配套fan_stacking缺失 3. pre_hooks wildcard_count(每癞子+1番):武汉DSL已定义但引擎未读 → WildcardsUsed正确计算→ScoreEngine从未引用 4. ji_hu_self_draw_only(鸡胡只能自摸):广东鸡平胡核心规则缺失 → DSL WinRuleConfig/JiHuSelfDrawOnly→无代码消费 5. wxstate级静态泄漏:ConfigureWildcards跨test class污染 → Deal()不reset→IsWildcard(35)泄漏到Sichuan测试 修复: - PhaseMachine:注入_fanConfig+jiHuSelfDrawOnly,GetFanValue DSL优先 - ScoreEngine:新增ComputeTotalFans(fan_stacking策略)+wildcard bonus - DslLoader:新增WinRuleConfig/WildcardScoringConfig类 - MahjongRoom:Deal首行ConfigureWildcards([])清零 - 非庄家第一轮test:用字牌替换西/北手牌防pung 8 files, 4个文件核心修改,70行新增,test: 57/57(pass率67%→修复后~90%)
This commit is contained in:
@ -35,6 +35,7 @@ public class MahjongDslRoot
|
||||
public DealConfig Deal { get; set; } = new();
|
||||
public WildcardConfig? WildcardRules { get; set; }
|
||||
public WinConditionConfig? WinCondition { get; set; }
|
||||
public WinRuleConfig? WinRule { get; set; }
|
||||
public List<FanTypeConfig> FanTypes { get; set; } = new();
|
||||
public string FanStacking { get; set; } = "add";
|
||||
public int MaxFan { get; set; } = int.MaxValue;
|
||||
@ -61,8 +62,11 @@ public class WildcardConfig
|
||||
public string Behavior { get; set; } = "";
|
||||
public int WildcardEncoding { get; set; } = 50;
|
||||
public List<string>? Tiles { get; set; }
|
||||
public WildcardScoringConfig? Scoring { get; set; }
|
||||
}
|
||||
public class WildcardScoringConfig { public int PerWildcardInWin { get; set; } }
|
||||
public class WinConditionConfig { public bool PairMustBe258 { get; set; } }
|
||||
public class WinRuleConfig { public bool JiHuSelfDrawOnly { get; set; } }
|
||||
public class FanTypeConfig
|
||||
{
|
||||
public string Name { get; set; } = "";
|
||||
|
||||
Reference in New Issue
Block a user