fix: 人类模式主回合听牌显示具体张数和牌名

CheckTing→GetTingTiles: 返回可胡牌列表而非bool
主回合显示: 🀄听 4张(🀫3万 🀫4万 中 白) — 与反应提示一致
This commit is contained in:
xiaoou
2026-07-05 00:55:53 +08:00
parent 4bc64eda04
commit 84681297c0

View File

@ -86,8 +86,8 @@ public class HumanMahjongPlayer
var pungOpt = legalActions.FirstOrDefault(a => a.Action == "pung");
var kongOpts = legalActions.Where(a => a.Action is "ming_kong" or "an_kong" or "bu_kong").ToList();
// Check if we're one tile away from winning (ting)
bool isTing = CheckTing(state);
// Check if we're one tile away from winning (ting) — returns list of winning tiles
var tingTiles = GetTingTiles(state);
Console.Write(" 可选操作: ");
var ops = new List<string>();
@ -95,7 +95,11 @@ public class HumanMahjongPlayer
if (pungOpt != null) ops.Add("p(碰)");
if (kongOpts.Count > 0) ops.Add($"k(杠: {string.Join("/", kongOpts.Select(o => o.Action))})");
if (winOpt != null) ops.Add("h✨(胡!)");
if (isTing) ops.Add("🀄听牌!");
if (tingTiles.Count > 0)
{
var names = tingTiles.Select(t => MahjongTile.ToString(t, state.Wildcards));
ops.Add($"🀄听 {tingTiles.Count}张({string.Join(" ", names)})");
}
ops.Add("q(退出)");
Console.WriteLine(string.Join(" ", ops));
Console.Write("> ");
@ -115,8 +119,9 @@ public class HumanMahjongPlayer
}
}
private bool CheckTing(MahjongGameState state)
private List<int> GetTingTiles(MahjongGameState state)
{
var result = new List<int>();
var hand = state.Hands.GetValueOrDefault(Name, new List<int>());
// Combine with exposed melds
var fullHand = new List<int>(hand);
@ -131,8 +136,8 @@ public class HumanMahjongPlayer
{
if (hand.Count(t => t == tile) >= 4) continue;
var r = _solver.CheckWin(fullHand, newTile: tile, wildcardCount: wc);
if (r != null && r.IsWin) return true;
if (r != null && r.IsWin) result.Add(tile);
}
return false;
return result;
}
}