fix: 鸡胡 FanValue=0 导致武汉麻将赢家得0分
根因: IdentifyFans 生成的无字/平胡/断幺九等标记番型(base_fan=0) → fans.Count>0 → 鸡胡不添加 → FanValue只有0值番型 → baseFan=0 修复(2处): 1. ScoreEngine.FanValue + PhaseMachine.GetFanValue: 鸡胡硬编码 fallback=1 2. IdentifyFans allZeroValue: 当所有番型都是0值(不在_fanConfig且不在硬编码列表) 时强制添加鸡胡。0值判断依据: 在_fanConfig中base_fan≤0, 或不在9个硬编码fallback番型中(清一色/混一色/对对胡/碰碰和/暗七对/七对/带幺九/十三幺/鸡胡) 验证: 武汉麻将赢家分数从0变成非零(3/6/9分), 58 tests pass, 5 variants 0 errors
This commit is contained in:
@ -749,8 +749,17 @@ public class MeldsSolver
|
||||
fans.Add("地胡");
|
||||
}
|
||||
|
||||
// 鸡胡: base-level fan when no other structural fan matches
|
||||
if (fans.Count == 0)
|
||||
// 鸡胡: base-level fan when no other fan with positive value exists.
|
||||
// A fan has positive value if it's in _fanConfig with base_fan>0,
|
||||
// or in the hardcoded fallback list (清一色/混一色/对对胡/碰碰和/暗七对/七对/带幺九/十三幺/鸡胡).
|
||||
bool allZeroValue = fans.Count > 0 && fans.All(f =>
|
||||
{
|
||||
if (_fanConfig.TryGetValue(f, out var fc)) return fc.BaseFan <= 0;
|
||||
// No DSL config → check if hardcoded fallback gives a value
|
||||
return f is not ("清一色" or "混一色" or "对对胡" or "碰碰和"
|
||||
or "暗七对" or "七对" or "带幺九" or "十三幺" or "鸡胡");
|
||||
});
|
||||
if (fans.Count == 0 || allZeroValue)
|
||||
fans.Add("鸡胡");
|
||||
|
||||
// Filter: only keep fans that exist in DSL config or are well-known
|
||||
|
||||
@ -180,6 +180,7 @@ public class MahjongPhaseMachine
|
||||
{
|
||||
"清一色" => 24, "混一色" => 6, "对对胡" => 2, "碰碰和" => 6,
|
||||
"暗七对" => 8, "七对" => 8, "带幺九" => 2, "十三幺" => 88,
|
||||
"鸡胡" => 1,
|
||||
_ => 0
|
||||
};
|
||||
}
|
||||
|
||||
@ -173,6 +173,7 @@ public class MahjongScoreEngine
|
||||
"七对" => 8,
|
||||
"带幺九" => 2,
|
||||
"十三幺" => 88,
|
||||
"鸡胡" => 1,
|
||||
_ => 0
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user