diff --git a/RuleEngine/AI/HumanMahjongPlayer.cs b/RuleEngine/AI/HumanMahjongPlayer.cs index b3b8438..e68f336 100644 --- a/RuleEngine/AI/HumanMahjongPlayer.cs +++ b/RuleEngine/AI/HumanMahjongPlayer.cs @@ -21,13 +21,22 @@ public class HumanMahjongPlayer var hand = state.Hands.GetValueOrDefault(Name, new List()); var sorted = hand.OrderBy(t => t).ToList(); + // Highlight last drawn tile + int? drawnTile = state.LastDrawnTile; + int drawnIdx = drawnTile.HasValue ? sorted.IndexOf(drawnTile.Value) : -1; + while (true) { Console.WriteLine(); Console.WriteLine($"=== {Name} 的回合 ==="); + if (drawnTile.HasValue && drawnIdx >= 0) + Console.WriteLine($" 🀫 刚刚摸到: {MahjongTile.ToString(drawnTile.Value)}"); Console.WriteLine($"手牌 ({hand.Count}张):"); for (int i = 0; i < sorted.Count; i++) - Console.WriteLine($" [{i + 1}] {MahjongTile.ToString(sorted[i])}"); + { + bool isDrawn = (i == drawnIdx); + Console.WriteLine($" [{i + 1}] {(isDrawn ? "→ " : " ")}{MahjongTile.ToString(sorted[i])}{(isDrawn ? " ← 新摸" : "")}"); + } Console.WriteLine(); // Show available actions diff --git a/RuleEngine/Core/GameState.cs b/RuleEngine/Core/GameState.cs index 34fdd2e..e85808a 100644 --- a/RuleEngine/Core/GameState.cs +++ b/RuleEngine/Core/GameState.cs @@ -31,6 +31,7 @@ public class MahjongGameState public bool IsDeckExhausted { get; set; } public List RecentEvents { get; set; } = new(); public int FlowerReplaced { get; set; } + public int? LastDrawnTile { get; set; } public MahjongGameState Clone() { diff --git a/RuleEngine/MahjongRoom.cs b/RuleEngine/MahjongRoom.cs index b7517cc..88c4de9 100644 --- a/RuleEngine/MahjongRoom.cs +++ b/RuleEngine/MahjongRoom.cs @@ -135,13 +135,16 @@ public class MahjongRoom // Phase 2: Draw card (skip for dealer on first turn — they already have 14) bool isDealerFirstTurn = (player == State.Dealer && State.RoundNumber == 0); - if (!isDealerFirstTurn) + if (isDealerFirstTurn) + State.LastDrawnTile = null; + else { if (State.Deck.Count > 0) { int drawn = State.Deck[^1]; State.Deck.RemoveAt(State.Deck.Count - 1); State.Hands[player].Add(drawn); + State.LastDrawnTile = drawn; State.AddEvent("draw", player, drawn, $"摸牌: {MahjongTile.ToString(drawn)}");