using CoreLibrary.Evenements; using CoreLibrary.Joueurs; using CoreLibrary.Core; using System.Diagnostics.CodeAnalysis; namespace ConsoleApp { /// /// Fournit un ensemble de méthodes écoutant les événements liés au déroulement de la partie. /// [ExcludeFromCodeCoverage] public static class Evenements { /// /// Ecoute l'événement en rapport avec la demande du nom d'un joueur. /// La classe qui appelle l'événement; ici Partie. /// L'instance de l'événement DemanderNomEventArgs créée par Partie. /// Le nom du joueur. /// public static void DemanderNom(Object? sender, PartieDemanderJoueurEventArgs e) { Console.WriteLine($"Joueur {e.Indice}"); Console.Write(">>> "); string? nom = Console.ReadLine(); Console.WriteLine(); e.JoueurDemande.SeConnecter(!string.IsNullOrEmpty(nom) ? Program.Manageur.DemanderJoueur(nom) : new Joueur($"Joueur {e.Indice}")); } /// /// Ecoute l'événement en rapport avec le début de la partie. /// La classe qui appelle l'événement; ici Partie. /// L'instance de l'événement DebutPartieEventArgs créée par Partie. /// public static void CommencerLaPartie(Object? sender, PartieDebutPartieEventArgs e) { Utils.DessinerSeparateur(); Console.WriteLine("La partie commence, bonne chance à tous !\n"); } /// /// Ecoute l'événement en rapport avec un nouveau tour. /// La classe qui appelle l'événement; ici Partie. /// L'instance de l'événement NouveauTourEventArgs créée par Partie. /// public static void NouveauTour(Object? sender, PartieNouveauTourEventArgs e) { Utils.DessinerSeparateur(); Console.WriteLine($"Tour {e.Tour} - {e.Joueur.Nom}\n"); (IReadOnlyList> codes, IReadOnlyList> indicateurs) = e.Plateau.Grille; Utils.DessinerPlateau(e.Plateau); Console.WriteLine(); Code code = e.Code; while(!code.Complet) { Jeton? jeton = Utils.SaisirJeton(code.Taille); if (jeton.HasValue) { Utils.DessinerPion(jeton.Value.Couleur); code.AjouterJeton(jeton.Value); } else { Utils.SupprimerDernierJeton(); code.SupprimerDernierJeton(); } } e.Plateau.AjouterCode(code); } /// /// Ecoute l'événement en rapport avec l'ajout d'un code dans le plateau. /// La classe qui appelle l'événement; ici Partie. /// L'instance de l'événement AjouterCodeEventArgs créée par Partie. /// public static void AjouterCode(Object? sender, PartiePasserLaMainEventArgs e) { Console.WriteLine(); Utils.DessinerSeparateur(); } /// /// Ecoute l'événement en rapport avec la fin de la partie. /// La classe qui appelle l'événement; ici Partie. /// L'instance de l'événement PartieTermineeEventArgs créée par Partie. /// public static void PartieTerminee(Object? sender, PartiePartieTermineeEventArgs e) { Joueur[] gagnants = e.Gagnants.ToArray(); if (gagnants.Length > 1) { Console.WriteLine("C'est une égalité !"); } else if (gagnants.Length == 1) { Console.WriteLine($"C'est une victoire de {gagnants[0].Nom}."); } else { Console.WriteLine("C'est une défaite des deux joueurs..."); } } } }