using MiniJeuxFinal.Games; using MiniJeuxFinal.Wrappers; namespace MiniJeuxFinal.Ui { public class GameRunnerConsole : IDisposable { private readonly IGame _game; private readonly IConsole _console; public GameRunnerConsole(IConsole console, IGame game) { _console = console; _game = game; _game.TurnStarted += OnTurnStarted; _game.TurnEnded += OnTurnEnded; _game.GameEnded += OnGameEnded; } public void Dispose() { _game.TurnStarted -= OnTurnStarted; _game.TurnEnded -= OnTurnEnded; _game.GameEnded -= OnGameEnded; } public void Run() { _console.WriteLine(_game.Name); _console.WriteLine(); _game.Start(); } private void OnTurnStarted(object? sender, (string playerChoice, string computerChoice) e) { _console.WriteLine($"Tu joues : {e.playerChoice}"); _console.WriteLine($"L'ordinateur joue : {e.computerChoice}"); } private void OnTurnEnded(object? sender, (IPlayer? winner, IPlayer[] players) e) { Thread.Sleep(2000); _console.Clear(); if (e.winner == null) _console.WriteLine("Égalité !"); else _console.WriteLine($"{e.winner.Name} gagne la manche"); _console.WriteLine(); _console.WriteLine($"Score : {e.players[0]} - {e.players[1]}"); _console.WriteLine(); } private void OnGameEnded(object? sender, (IPlayer winner, IPlayer[] players) e) { _console.WriteLine($"{e.winner.Name} A GAGNÉ ! 🎉🎉🎉"); var loser = e.players.First(p => p.Name != e.winner.Name); _console.WriteLine($"Score final : {e.winner.Score} - {loser.Score}"); } } }