diff --git a/Sources/ConsoleApp/Evenements.cs b/Sources/ConsoleApp/Evenements.cs new file mode 100644 index 0000000..662f9ce --- /dev/null +++ b/Sources/ConsoleApp/Evenements.cs @@ -0,0 +1,121 @@ +using CoreLibrary.Events; +using CoreLibrary; + +namespace ConsoleApp +{ + public class Evenements + { + public static string? DemanderJoueur(Object? sender, DemanderJoueurEventArgs e) + { + Console.WriteLine($"Joueur {e.Numero}"); + Console.Write(">>> "); + + string? nom = Console.ReadLine(); + + Console.WriteLine(); + + return nom; + } + + + public static void CommencerLaPartie(Object? sender, DebutPartieEventArgs e) + { + Utils.DessinerSeparateur(); + + Console.WriteLine("La partie commence, bonne chance à tous !\n"); + } + + + 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(); + + } + + public static Jeton? DemanderJeton(Object? sender, DemanderJetonEventArgs e) + { + Console.TreatControlCAsInput = true; + + 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: + return null; + + default: + break; + } + + if (indice < 0) + indice = couleurs.Length - 1; + else if (indice >= couleurs.Length) + indice = 0; + } + + Console.TreatControlCAsInput = false; + + return new Jeton(couleurs[indice]); + } + + public static void AjouterJeton(Object? sender, AjouterJetonEventArgs e) + { + Utils.DessinerPion(e.Jeton.Couleur); + } + + public static void SupprimerDernierJeton(Object? sender, SupprimerDernierJetonEventArgs e) + { + Console.Write("\b\b\b \b\b\b\b\b\b"); + } + + public static void AjouterCode(Object? sender, AjouterCodeEventArgs e) + { + Console.WriteLine(); + + Utils.DessinerSeparateur(); + } + + 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..."); + } + } + } +} diff --git a/Sources/ConsoleApp/Program.cs b/Sources/ConsoleApp/Program.cs index c7dc2de..cb384c3 100644 --- a/Sources/ConsoleApp/Program.cs +++ b/Sources/ConsoleApp/Program.cs @@ -8,14 +8,13 @@ Utils.DessinerTitre(); Partie maPartie = new Partie(new ReglesClassiques()); -maPartie.DemanderJoueur += Utils.DemanderJoueur; - -maPartie.DebutPartie += Utils.CommencerLaPartie; -maPartie.NouveauTour += Utils.NouveauTour; -maPartie.DemanderJeton += Utils.DemanderJeton; -maPartie.AjouterJeton += Utils.AjouterJeton; -maPartie.AjouterCode += Utils.AjouterCode; -maPartie.PartieTerminee += Utils.PartieTerminee; - - -maPartie.Jouer(); \ No newline at end of file +maPartie.DemanderJoueur += Evenements.DemanderJoueur; +maPartie.DebutPartie += Evenements.CommencerLaPartie; +maPartie.NouveauTour += Evenements.NouveauTour; +maPartie.DemanderJeton += Evenements.DemanderJeton; +maPartie.AjouterJeton += Evenements.AjouterJeton; +maPartie.SupprimerDernierJeton += Evenements.SupprimerDernierJeton; +maPartie.AjouterCode += Evenements.AjouterCode; +maPartie.PartieTerminee += Evenements.PartieTerminee; + +maPartie.Jouer(); diff --git a/Sources/ConsoleApp/Utils.cs b/Sources/ConsoleApp/Utils.cs index d6157ee..442fac5 100644 --- a/Sources/ConsoleApp/Utils.cs +++ b/Sources/ConsoleApp/Utils.cs @@ -1,7 +1,4 @@ using CoreLibrary; -using CoreLibrary.Events; -using System.Collections.Generic; -using System.Reflection; namespace ConsoleApp { @@ -34,7 +31,7 @@ namespace ConsoleApp DessinerSeparateur(); } - + public static void DessinerSeparateur() { @@ -50,9 +47,9 @@ namespace ConsoleApp { Console.Write(" "); - Console.ForegroundColor = pion.GetType().Equals(typeof(Couleur)) ? - couleursTerminal.GetValueOrDefault((Couleur) pion) : - indicateursTerminal.GetValueOrDefault((Indicateur) pion); + Console.ForegroundColor = pion.GetType().Equals(typeof(Couleur)) ? + couleursTerminal.GetValueOrDefault((Couleur)pion) : + indicateursTerminal.GetValueOrDefault((Indicateur)pion); Console.BackgroundColor = Console.ForegroundColor.Equals(ConsoleColor.Black) ? ConsoleColor.White : ConsoleColor.Black; @@ -65,8 +62,8 @@ namespace ConsoleApp public static void DessinerPlateau(IEnumerable> grille, IEnumerable> indicateurs) { - IEnumerable[] grilleTableau = (IEnumerable[]) grille.ToArray(); - IEnumerable[] indicateursTableau = (IEnumerable[]) indicateurs.ToArray(); + IEnumerable[] grilleTableau = (IEnumerable[])grille.ToArray(); + IEnumerable[] indicateursTableau = (IEnumerable[])indicateurs.ToArray(); Console.WriteLine(" Codes Indicateurs "); Console.WriteLine("──────────────── ────────────────"); @@ -82,7 +79,7 @@ namespace ConsoleApp { Jeton? jeton = ligneGrille[j]; - if(jeton.HasValue) + if (jeton.HasValue) { DessinerPion(jeton.Value.Couleur); } @@ -90,12 +87,12 @@ namespace ConsoleApp { Console.Write(" "); } - + } Console.Write(" │ │ "); - - if(indicateursTableau[i] != null) + + if (indicateursTableau[i] != null) { Indicateur[] ligneIndicateurs = indicateursTableau[i].ToArray(); @@ -121,114 +118,5 @@ namespace ConsoleApp Console.WriteLine("│ │ │ │"); Console.WriteLine("──────────────── ────────────────"); } - - - public static string? DemanderJoueur(Object? sender, DemanderJoueurEventArgs e) - { - Console.WriteLine($"Joueur {e.Numero}"); - Console.Write(">>> "); - - string? nom = Console.ReadLine(); - - Console.WriteLine(); - - return nom; - } - - - public static void CommencerLaPartie(Object? sender, DebutPartieEventArgs e) - { - DessinerSeparateur(); - - Console.WriteLine("La partie commence, bonne chance à tous !\n"); - } - - - public static void NouveauTour(Object? sender, NouveauTourEventArgs e) - { - DessinerSeparateur(); - - Console.WriteLine($"Tour {e.Tour} - {e.Joueur.Nom}\n"); - - DessinerPlateau(e.Grille, e.Indicateurs); - - Console.WriteLine(); - - } - - public static Jeton DemanderJeton(Object? sender, DemanderJetonEventArgs e) - { - Console.TreatControlCAsInput = true; - - bool aChoisi = false; - int indice = 0; - Couleur[] couleurs = (Couleur[])Enum.GetValues(typeof(Couleur)); - - while (!aChoisi) - { - 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: - return null;*/ - - default: - break; - } - - if (indice < 0) - indice = couleurs.Length - 1; - else if (indice >= couleurs.Length) - indice = 0; - } - - Console.TreatControlCAsInput = false; - - return new Jeton(couleurs[indice]); - } - - public static void AjouterJeton(Object? sender, AjouterJetonEventArgs e) - { - DessinerPion(e.Jeton.Couleur); - } - - public static void AjouterCode(Object? sender, AjouterCodeEventArgs e) - { - Console.WriteLine(); - - DessinerSeparateur(); - } - - 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..."); - } - } } } diff --git a/Sources/CoreLibrary/Events/SupprimerDernierJetonEventArgs.cs b/Sources/CoreLibrary/Events/SupprimerDernierJetonEventArgs.cs new file mode 100644 index 0000000..4796efd --- /dev/null +++ b/Sources/CoreLibrary/Events/SupprimerDernierJetonEventArgs.cs @@ -0,0 +1,6 @@ +namespace CoreLibrary.Events +{ + public class SupprimerDernierJetonEventArgs : EventArgs + { + } +} diff --git a/Sources/CoreLibrary/Partie.cs b/Sources/CoreLibrary/Partie.cs index c41b587..d59ba5e 100644 --- a/Sources/CoreLibrary/Partie.cs +++ b/Sources/CoreLibrary/Partie.cs @@ -1,4 +1,5 @@ using CoreLibrary.Events; +using CoreLibrary.Exceptions; namespace CoreLibrary { @@ -7,7 +8,7 @@ namespace CoreLibrary private readonly IRegles regles; public delegate string? StringEventHandler(Object? sender, TEventArgs e); - public delegate Jeton JetonEventHandler(Object? sender, TEventArgs e); + public delegate Jeton? JetonEventHandler(Object? sender, TEventArgs e); public event StringEventHandler? DemanderJoueur; public event JetonEventHandler? DemanderJeton; @@ -16,6 +17,7 @@ namespace CoreLibrary public event EventHandler? DebutPartie; public event EventHandler? NouveauTour; public event EventHandler? AjouterJeton; + public event EventHandler? SupprimerDernierJeton; public event EventHandler? AjouterCode; public event EventHandler? PasserMain; public event EventHandler? PartieTerminee; @@ -28,6 +30,7 @@ namespace CoreLibrary private void QuandDebutPartie() => DebutPartie?.Invoke(this, new DebutPartieEventArgs()); private void QuandNouveauTour(Joueur joueur, int tour, IEnumerable> grille, IEnumerable> indicateurs) => NouveauTour?.Invoke(this, new NouveauTourEventArgs(joueur, tour, grille, indicateurs)); private void QuandNouveauJeton(Jeton jeton) => AjouterJeton?.Invoke(this, new AjouterJetonEventArgs(jeton)); + private void QuandSupprimerDernierJeton() => SupprimerDernierJeton?.Invoke(this, new SupprimerDernierJetonEventArgs()); private void QuandNouveauCode(Code code) => AjouterCode?.Invoke(this, new AjouterCodeEventArgs(code)); private void QuandPasserMain() => PasserMain?.Invoke(this, new PasserMainEventArgs()); private void QuandPartieTerminee(IEnumerable gagnants, IEnumerable perdants) => PartieTerminee?.Invoke(this, new PartieTermineeEventArgs(gagnants, perdants)); @@ -61,9 +64,32 @@ namespace CoreLibrary while (!code.EstComplet()) { - Jeton jeton = QuandDemanderJeton() ?? new Jeton(); - code.AjouterJeton(jeton); - QuandNouveauJeton(jeton); + Jeton? jeton = QuandDemanderJeton(); + + if(jeton == null) + { + if(DemanderJeton != null) + { + // Si quelqu'un écoute l'événement mais ne renvoie rien, alors on supprime le dernier jeton + try + { + code.SupprimerDernierJeton(); + QuandSupprimerDernierJeton(); + } + catch(CodeVideException){} + } + else + { + // Si personne n'écoute l'évenment, on met un jeton aléatoire + jeton = new Jeton(); + } + } + + if(jeton != null) + { + code.AjouterJeton(jeton.Value); + QuandNouveauJeton(jeton.Value); + } } plateauCourant.AjouterCode(code); QuandNouveauCode(code);