using CoreLibrary.Events; 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 DemanderJoueurEventArgs créée par Partie. /// Le nom du joueur. /// public static string? DemanderJoueur(Object? sender, DemanderJoueurEventArgs e) { Console.WriteLine($"Joueur {e.Numero}"); Console.Write(">>> "); string? nom = Console.ReadLine(); Console.WriteLine(); return nom; } /// /// 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, DebutPartieEventArgs 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, NouveauTourEventArgs e) { Utils.DessinerSeparateur(); Console.WriteLine($"Tour {e.Tour} - {e.Joueur.Nom}\n"); Utils.DessinerPlateau(e.Grille, e.Indicateurs); Console.WriteLine(); } /// /// Ecoute l'événement en rapport avec la demande d'un jeton. /// La classe qui appelle l'événement; ici Partie. /// L'instance de l'événement DemanderJetonEventArgs créée par Partie. /// Le jeton choisi par le joueur. /// public static Jeton? DemanderJeton(Object? sender, DemanderJetonEventArgs e) { Console.TreatControlCAsInput = true; Console.CursorVisible = false; bool aChoisi = false; int indice = 0; Couleur[] couleurs = (Couleur[])Enum.GetValues(typeof(Couleur)); while (!aChoisi) { Utils.DessinerPion(couleurs[indice]); Console.Write("\b\b\b"); switch (Console.ReadKey(true).Key) { case ConsoleKey.Enter: aChoisi = true; break; case ConsoleKey.LeftArrow: --indice; break; case ConsoleKey.RightArrow: ++indice; break; case ConsoleKey.Escape: if (e.Indice != 0) { aChoisi = true; indice = -2; } break; default: break; } if (indice == -1) indice = couleurs.Length - 1; else if (indice == couleurs.Length) indice = 0; } Console.TreatControlCAsInput = false; Console.CursorVisible = true; return indice != -2 ? new Jeton(couleurs[indice]) : null; } /// /// Ecoute l'événement en rapport avec l'ajout d'un jeton dans le code. /// La classe qui appelle l'événement; ici Partie. /// L'instance de l'événement AjouterJetonEventArgs créée par Partie. /// public static void AjouterJeton(Object? sender, AjouterJetonEventArgs e) { Utils.DessinerPion(e.Jeton.Couleur); } /// /// Ecoute l'événement en rapport avec la suppression du dernier jeton ajouté dans le code. /// La classe qui appelle l'événement; ici Partie. /// L'instance de l'événement SupprimerDernierJetonEventArgs créée par Partie. /// public static void SupprimerDernierJeton(Object? sender, SupprimerDernierJetonEventArgs e) { Console.Write("\b\b\b \b\b\b\b\b\b"); } /// /// 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, AjouterCodeEventArgs 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, PartieTermineeEventArgs 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..."); } } } }