diff --git a/RuleEngine.Tests/CoreTests.cs b/RuleEngine.Tests/CoreTests.cs index fb9f995..9df8b22 100644 --- a/RuleEngine.Tests/CoreTests.cs +++ b/RuleEngine.Tests/CoreTests.cs @@ -90,7 +90,25 @@ public class DeckTests public class MeldsSolverTests { - private readonly MeldsSolver _solver = new(new Dictionary()); + private readonly MeldsSolver _solver = new(new Dictionary + { + ["清一色"] = new() { BaseFan = 24 }, + ["混一色"] = new() { BaseFan = 6 }, + ["字一色"] = new() { BaseFan = 64 }, + ["对对胡"] = new() { BaseFan = 2 }, + ["碰碰和"] = new() { BaseFan = 6 }, + ["暗七对"] = new() { BaseFan = 8 }, + ["带幺九"] = new() { BaseFan = 2 }, + ["缺一门"] = new() { BaseFan = 0 }, + ["平胡"] = new() { BaseFan = 0 }, + ["断幺九"] = new() { BaseFan = 2 }, + ["无字"] = new() { BaseFan = 0 }, + ["全大"] = new() { BaseFan = 12 }, + ["全中"] = new() { BaseFan = 12 }, + ["全小"] = new() { BaseFan = 12 }, + ["全双"] = new() { BaseFan = 24 }, + ["鸡胡"] = new() { BaseFan = 1 }, + }); // === 标准胡牌 === [Fact] diff --git a/RuleEngine/Patterns/MeldsSolver.cs b/RuleEngine/Patterns/MeldsSolver.cs index c4d8462..174be0e 100644 --- a/RuleEngine/Patterns/MeldsSolver.cs +++ b/RuleEngine/Patterns/MeldsSolver.cs @@ -808,15 +808,16 @@ public class MeldsSolver if (fans.Count == 0 || allZeroValue) fans.Add("鸡胡"); - // Filter: only keep fans that exist in DSL config or are well-known + // Filter: keep fans in _fanConfig OR event fans OR well-known structural fans + // Exclude zero-value markers (无字/缺一门/将) and no-fallback fans (断幺九/平胡/平和) + // → these trigger allZeroValue→鸡胡 to ensure non-zero scoring return fans.Where(f => _fanConfig.ContainsKey(f) || - f is "清一色" or "混一色" or "对对胡" or "碰碰和" or "暗七对" or "七对" - or "带幺九" or "十三幺" or "字一色" or "断幺九" or "无字" or "将" - or "缺一门" or "平胡" or "全大" or "全中" or "全小" or "全双" - or "将一色" or "大四喜" or "大三元" or "小四喜" or "小三元" or "三风" or "双箭刻" + f is "杠上开花" or "海底捞月" or "抢杠胡" or "天胡" or "地胡" or "癞子胡" + or "清一色" or "混一色" or "对对胡" or "碰碰和" or "暗七对" or "七对" or "带幺九" or "十三幺" or "鸡胡" or "字一色" + or "全大" or "全中" or "全小" or "全双" or "大于五" or "小于五" + or "将一色" or "大四喜" or "大三元" or "小四喜" or "小三元" or "一色四同顺" or "一色三同顺" or "一般高" or "五门齐" or "全求人" or "门前清" - or "鸡胡" or "癞子胡" or "平和" - or "圈风" or "门风" or "单钓将" or "四归一" or "杠上开花" or "海底捞月" or "抢杠胡" or "天胡" or "地胡").ToList(); + or "三风" or "双箭刻" or "圈风" or "门风" or "单钓将" or "四归一" or "连七对" or "全不靠" or "一色双龙会").ToList(); } // === 番型互斥应用 ===