diff --git a/Correction/MiniJeuxFinal/GameFactory/PierrePapierCiseauxGameFactory.cs b/Correction/MiniJeuxFinal/GameFactory/PierrePapierCiseauxGameFactory.cs new file mode 100644 index 0000000..1df7cf1 --- /dev/null +++ b/Correction/MiniJeuxFinal/GameFactory/PierrePapierCiseauxGameFactory.cs @@ -0,0 +1,28 @@ +using MiniJeuxFinal.Games; +using MiniJeuxFinal.Games.PierrePapierCiseaux; +using MiniJeuxFinal.Games.PierrePapierCiseaux.Actions; +using MiniJeuxFinal.Games.PierrePapierCiseaux.Factories; +using MiniJeuxFinal.Games.PierrePapierCiseaux.Players; +using MiniJeuxFinal.Wrappers; + +namespace MiniJeuxFinal.GameFactory +{ + public static class PierrePapierCiseauxGameFactory + { + public static PierrePapierCiseauxGame CreateGame() + { + var consoleService = new ConsoleService(); + consoleService.WriteLine("Entrer votre nom de joueur:"); + var userName = consoleService.ReadLine(); + consoleService.WriteLine("Entrer le nombre de round:"); + var roundNumber = consoleService.ReadLine(); + var player = new PlayerPpc(userName, new InputActionFactory(new ConsoleService())); + var computer = new PlayerPpc("Ordi", new RandomActionFactory()); + IAction[] lstActions = [new StoneAction(), new PaperAction(), new ScissorsAction()]; + player.AddAction(lstActions); + computer.AddAction(lstActions); + + return new PierrePapierCiseauxGame(int.Parse(roundNumber), player, computer); + } + } +} diff --git a/Correction/MiniJeuxFinal/Program.cs b/Correction/MiniJeuxFinal/Program.cs index 6a8eb35..4512f35 100644 --- a/Correction/MiniJeuxFinal/Program.cs +++ b/Correction/MiniJeuxFinal/Program.cs @@ -1,46 +1,11 @@ -using MiniJeuxFinal.Games; -using MiniJeuxFinal.Games.PierrePapierCiseaux; -using MiniJeuxFinal.Games.PierrePapierCiseaux.Actions; -using MiniJeuxFinal.Games.PierrePapierCiseaux.Factories; -using MiniJeuxFinal.Games.PierrePapierCiseaux.Players; -using MiniJeuxFinal.Wrappers; +using MiniJeuxFinal.GameFactory; +using MiniJeuxFinal.Ui; class Program() { public static void Main() { - Console.WriteLine("Entrer votre nom de joueur:"); - var userName = Console.ReadLine(); - var player = new PlayerPpc(userName, new InputActionFactory(new ConsoleService())); - var computer = new PlayerPpc("Ordi", new RandomActionFactory()); - IAction[] lstActions = [new StoneAction(), new PaperAction(), new ScissorsAction()]; - player.AddAction(lstActions); - computer.AddAction(lstActions); - var game = new PierrePapierCiseauxGame(3, player, computer); - game.TurnStarted += (sender, tuple) => - { - Console.WriteLine($"Tu joues : {tuple.playerChoice}"); - Console.WriteLine($"L’ordinateur joue : {tuple.computerChoice}"); - }; - game.TurnEnded += (sender, result) => - { - Thread.Sleep(2000); - Console.Clear(); - if (result.winner == null) - Console.WriteLine($"Egalitée !"); - else - Console.WriteLine($"{result.winner.Name} gagne la manche"); - Console.WriteLine(); - Console.WriteLine($"Score : {result.players[0]} - {result.players[1]}"); - Console.WriteLine(); - }; - game.GameEnded += (sender, result) => - { - Console.WriteLine($"{result.winner.Name} AS GAGNÉ ! 🎉🎉🎉"); - Console.WriteLine($"Score final : {result.winner.Score} - {result.players.FirstOrDefault(_ => _.Name != result.winner.Name)?.Score}"); - }; - Console.WriteLine(game.Name); - Console.WriteLine(); - game.Start(); + var runner = new GameRunnerConsole(PierrePapierCiseauxGameFactory.CreateGame()); + runner.Run(); } } diff --git a/Correction/MiniJeuxFinal/Ui/GameRunnerConsole.cs b/Correction/MiniJeuxFinal/Ui/GameRunnerConsole.cs new file mode 100644 index 0000000..7ea189d --- /dev/null +++ b/Correction/MiniJeuxFinal/Ui/GameRunnerConsole.cs @@ -0,0 +1,57 @@ +using MiniJeuxFinal.Games; + +namespace MiniJeuxFinal.Ui +{ + public class GameRunnerConsole + { + private readonly IGame _game; + + public GameRunnerConsole(IGame game) + { + _game = game; + SetupEvents(); + } + + private void SetupEvents() + { + _game.TurnStarted += OnTurnStarted; + _game.TurnEnded += OnTurnEnded; + _game.GameEnded += OnGameEnded; + } + + 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}"); + } + + public void Run() + { + Console.WriteLine(_game.Name); + Console.WriteLine(); + _game.Start(); + } + } +}