refactor: FanValue fallback 集中到 PhaseMachine.DefaultFanValue()
ScoreEngine.FanValue 和 PhaseMachine.GetFanValue 之前各自维护 一份相同的硬编码 fallback 列表。改为 ScoreEngine 调用 PhaseMachine.DefaultFanValue() 单例消除重复。 硬编码审计结论: 所有影响变体适配的硬编码已全部修复, 剩余的是麻将基础规则(碰2/杠3/暗杠4/13/14张)和牌编码定义。
This commit is contained in:
@ -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)
|
||||
|
||||
@ -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
|
||||
|
||||
Reference in New Issue
Block a user