diff --git a/RuleEngine/Phase/PhaseMachine.cs b/RuleEngine/Phase/PhaseMachine.cs index 82f8636..879ba26 100644 --- a/RuleEngine/Phase/PhaseMachine.cs +++ b/RuleEngine/Phase/PhaseMachine.cs @@ -174,18 +174,20 @@ public class MahjongPhaseMachine return actions; } + /// Shared fan value fallback — single source of truth for both PhaseMachine and ScoreEngine. + public static int DefaultFanValue(string fanName) => fanName switch + { + "清一色" => 24, "混一色" => 6, "对对胡" => 2, "碰碰和" => 6, + "暗七对" => 8, "七对" => 8, "带幺九" => 2, "十三幺" => 88, + "鸡胡" => 1, + _ => 0 + }; + private int GetFanValue(string fanName) { if (_fanConfig.TryGetValue(fanName, out var def)) return def.BaseFan; - // Fallback for well-known fans when DSL doesn't define them - return fanName switch - { - "清一色" => 24, "混一色" => 6, "对对胡" => 2, "碰碰和" => 6, - "暗七对" => 8, "七对" => 8, "带幺九" => 2, "十三幺" => 88, - "鸡胡" => 1, - _ => 0 - }; + return DefaultFanValue(fanName); } private bool CanPung(MahjongGameState state, string playerId, int tile) diff --git a/RuleEngine/Scoring/ScoreEngine.cs b/RuleEngine/Scoring/ScoreEngine.cs index 5fc6240..be30df6 100644 --- a/RuleEngine/Scoring/ScoreEngine.cs +++ b/RuleEngine/Scoring/ScoreEngine.cs @@ -162,20 +162,7 @@ public class MahjongScoreEngine { if (_fanConfig.TryGetValue(fan, out var def)) return def.BaseFan; - // Hardcoded values for well-known fans not in every DSL - return fan switch - { - "清一色" => 24, - "混一色" => 6, - "对对胡" => 2, - "碰碰和" => 6, - "暗七对" => 8, - "七对" => 8, - "带幺九" => 2, - "十三幺" => 88, - "鸡胡" => 1, - _ => 0 - }; + return Phase.MahjongPhaseMachine.DefaultFanValue(fan); } private static string FlowerName(int tile) => tile switch