diff --git a/Demo/Program.cs b/Demo/Program.cs index 32886b5..e4939cb 100644 --- a/Demo/Program.cs +++ b/Demo/Program.cs @@ -163,7 +163,13 @@ else $"{m.Type}[{string.Join(",", m.Tiles.Where(t => t != -1).Select(MahjongTile.ToString))}]"); exposedStr = $" | 已{string.Join(" ", descs)}"; } - Console.WriteLine($" {p}: {hand.Count}张手牌{exposedStr}"); + var discardStr = ""; + if (room.State.DiscardHistory.TryGetValue(p, out var discards) && discards.Count > 0) + { + var recent = discards.TakeLast(6).Select(MahjongTile.ToString); + discardStr = $" | 出: {string.Join(" ", recent)}"; + } + Console.WriteLine($" {p}: {hand.Count}张手牌{exposedStr}{discardStr}"); } } else diff --git a/RuleEngine/Core/GameState.cs b/RuleEngine/Core/GameState.cs index e85808a..f26f8ad 100644 --- a/RuleEngine/Core/GameState.cs +++ b/RuleEngine/Core/GameState.cs @@ -18,6 +18,7 @@ public class MahjongGameState public Dictionary> FlowerPool { get; set; } = new(); public List Deck { get; set; } = new(); public List DiscardPool { get; set; } = new(); + public Dictionary> DiscardHistory { get; set; } = new(); public int? LastDiscard { get; set; } public string? LastDiscardPlayer { get; set; } public string CurrentPlayer { get; set; } = ""; diff --git a/RuleEngine/MahjongRoom.cs b/RuleEngine/MahjongRoom.cs index b032b4a..5369f53 100644 --- a/RuleEngine/MahjongRoom.cs +++ b/RuleEngine/MahjongRoom.cs @@ -116,6 +116,14 @@ public class MahjongRoom Settle(); } + private void RecordDiscard(string player, int tile) + { + State.DiscardPool.Add(tile); + if (!State.DiscardHistory.ContainsKey(player)) + State.DiscardHistory[player] = new List(); + State.DiscardHistory[player].Add(tile); + } + public List StepTurn() { State.RecentEvents.Clear(); @@ -223,7 +231,7 @@ public class MahjongRoom State.Hands[player].Remove(tile.Value); State.LastDiscard = tile.Value; State.LastDiscardPlayer = player; - State.DiscardPool.Add(tile.Value); + RecordDiscard(player, tile.Value); State.AddEvent("discard", player, tile.Value, $"出牌: {MahjongTile.ToString(tile.Value)}"); } @@ -350,7 +358,7 @@ public class MahjongRoom State.Hands[p].Remove(tileToDiscard); State.LastDiscard = tileToDiscard; State.LastDiscardPlayer = p; - State.DiscardPool.Add(tileToDiscard); + RecordDiscard(p, tileToDiscard); State.AddEvent("discard", p, tileToDiscard, $"出牌: {MahjongTile.ToString(tileToDiscard)}"); return true; @@ -409,7 +417,7 @@ public class MahjongRoom State.Hands[player].Remove(tileToDiscard); State.LastDiscard = tileToDiscard; State.LastDiscardPlayer = player; - State.DiscardPool.Add(tileToDiscard); + RecordDiscard(player, tileToDiscard); State.AddEvent("discard", player, tileToDiscard, $"出牌: {MahjongTile.ToString(tileToDiscard)}"); }