fix: StepTurn回合流转重构 + 碰/杠牌数修正
Root cause: 1. 摸牌在碰/杠检测之前→摸的牌浪费→手牌净减 2. RemoveAll一次删光所有同牌→碰2张变删N张 3. 碰/杠后没让玩家出牌→手牌只减不补 4. 显示只展示手牌不展示暴露副露 修复: - 重构StepTurn: 先处理LastDiscard反应(碰/杠/胡) 没人反应才摸牌→决定→出牌 - RemoveAll→Remove 精准删除 - 碰/杠后强制出一张牌 - HandleDiscardReactions替代旧CheckReactions - RenderFinal展示Exposed副露
This commit is contained in:
@ -181,12 +181,19 @@ void RenderFinal(MahjongRoom room)
|
||||
Console.WriteLine($" 游戏结束,牌墙剩余 {state.Deck.Count} 张");
|
||||
|
||||
Console.WriteLine();
|
||||
Console.WriteLine(" 最终手牌:");
|
||||
Console.WriteLine(" 最终状态:");
|
||||
foreach (var p in state.PlayerOrder)
|
||||
{
|
||||
var hand = state.Hands[p];
|
||||
var sorted = string.Join(", ", hand.OrderBy(t => t).Select(MahjongTile.ToString));
|
||||
Console.WriteLine($" {p}{(p == state.Dealer ? "(庄)" : "")}: {sorted} ({hand.Count}张)");
|
||||
var exposedStr = "";
|
||||
if (state.Exposed.TryGetValue(p, out var melds) && melds.Count > 0)
|
||||
{
|
||||
var meldDescs = melds.Select(m =>
|
||||
$"{m.Type}[{string.Join(",", m.Tiles.Select(MahjongTile.ToString))}]");
|
||||
exposedStr = $" | 已碰/杠: {string.Join(" ", meldDescs)}";
|
||||
}
|
||||
Console.WriteLine($" {p}{(p == state.Dealer ? "(庄)" : "")}: {sorted} ({hand.Count}张){exposedStr}");
|
||||
}
|
||||
|
||||
if (state.HuPlayers.Count > 0)
|
||||
|
||||
Reference in New Issue
Block a user