refactor: FanValue fallback 集中到 PhaseMachine.DefaultFanValue()

ScoreEngine.FanValue 和 PhaseMachine.GetFanValue 之前各自维护
一份相同的硬编码 fallback 列表。改为 ScoreEngine 调用
PhaseMachine.DefaultFanValue() 单例消除重复。

硬编码审计结论: 所有影响变体适配的硬编码已全部修复,
剩余的是麻将基础规则(碰2/杠3/暗杠4/13/14张)和牌编码定义。
This commit is contained in:
xiaoou
2026-07-04 21:51:40 +08:00
parent 4e9f06d5cd
commit b7fb93d4e4
2 changed files with 11 additions and 22 deletions

View File

@ -174,18 +174,20 @@ public class MahjongPhaseMachine
return actions;
}
/// <summary>Shared fan value fallback — single source of truth for both PhaseMachine and ScoreEngine.</summary>
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)

View File

@ -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