diff --git a/Sources/ConsoleApp/Evenements.cs b/Sources/ConsoleApp/Evenements.cs index 2d96edc..596ad52 100644 --- a/Sources/ConsoleApp/Evenements.cs +++ b/Sources/ConsoleApp/Evenements.cs @@ -17,7 +17,7 @@ namespace ConsoleApp /// L'instance de l'événement DemanderJoueurEventArgs créée par Partie. /// Le nom du joueur. /// - public static string? DemanderJoueur(Object? sender, DemanderJoueurEventArgs e) + /*public static string? DemanderJoueur(Object? sender, DemanderJoueurEventArgs e) { Console.WriteLine($"Joueur {e.Numero}"); Console.Write(">>> "); @@ -27,7 +27,7 @@ namespace ConsoleApp Console.WriteLine(); return nom; - } + }*/ /// @@ -65,7 +65,7 @@ namespace ConsoleApp /// 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) + /*public static Jeton? DemanderJeton(Object? sender, DemanderJetonEventArgs e) { Console.TreatControlCAsInput = true; Console.CursorVisible = false; @@ -115,7 +115,7 @@ namespace ConsoleApp 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. diff --git a/Sources/ConsoleApp/Program.cs b/Sources/ConsoleApp/Program.cs index 1ee6d17..d454895 100644 --- a/Sources/ConsoleApp/Program.cs +++ b/Sources/ConsoleApp/Program.cs @@ -17,10 +17,10 @@ namespace ConsoleApp Partie maPartie = new Partie(new ReglesClassiques()); - maPartie.DemanderJoueur += Evenements.DemanderJoueur; + //maPartie.DemanderJoueur += Evenements.DemanderJoueur; maPartie.DebutPartie += Evenements.CommencerLaPartie; maPartie.NouveauTour += Evenements.NouveauTour; - maPartie.DemanderJeton += Evenements.DemanderJeton; + //maPartie.DemanderJeton += Evenements.DemanderJeton; maPartie.AjouterJeton += Evenements.AjouterJeton; maPartie.SupprimerDernierJeton += Evenements.SupprimerDernierJeton; maPartie.AjouterCode += Evenements.AjouterCode; diff --git a/Sources/CoreLibrary/Events/ConstruireJoueurEventArgs.cs b/Sources/CoreLibrary/Events/ConstruireJoueurEventArgs.cs new file mode 100644 index 0000000..8540f8e --- /dev/null +++ b/Sources/CoreLibrary/Events/ConstruireJoueurEventArgs.cs @@ -0,0 +1,14 @@ +using CoreLibrary.Joueurs; + +namespace CoreLibrary.Events +{ + public class ConstruireJoueurEventArgs : EventArgs + { + public string Nom { get; private set; } + + public ConstruireJoueurEventArgs(string nom) + { + Nom = nom; + } + } +} diff --git a/Sources/CoreLibrary/Events/DemanderJetonEventArgs.cs b/Sources/CoreLibrary/Events/DemanderJetonEventArgs.cs deleted file mode 100644 index a8f3bae..0000000 --- a/Sources/CoreLibrary/Events/DemanderJetonEventArgs.cs +++ /dev/null @@ -1,22 +0,0 @@ -namespace CoreLibrary.Events -{ - /// - /// Classe contenant les arguments passées en paramètre lors de l'événement DemanderJeton. - /// - public class DemanderJetonEventArgs : EventArgs - { - /// - /// L'indice du code où le jeton va être ajouté. - /// - public int Indice { get; private set; } - - /// - /// Initialise une nouvelle instance de la classe avec l'indice spécifié. - /// - /// L'indice du jeton qui va été ajouté. - public DemanderJetonEventArgs(int indice) - { - Indice = indice; - } - } -} diff --git a/Sources/CoreLibrary/Events/DemanderJoueurEventArgs.cs b/Sources/CoreLibrary/Events/DemanderJoueurEventArgs.cs deleted file mode 100644 index f297f25..0000000 --- a/Sources/CoreLibrary/Events/DemanderJoueurEventArgs.cs +++ /dev/null @@ -1,23 +0,0 @@ -namespace CoreLibrary.Events -{ - /// - /// Classe contenant les arguments passées en paramètre lors de l'événement DemanderJoueur. - /// - public class DemanderJoueurEventArgs : EventArgs - { - /// - /// Le numéro du joueur (Joueur 1 ou 2, 3..). - /// - public int Numero { get; private set; } - - - /// - /// Initialise une nouvelle instance de la classe avec le numéro du joueur spécifié. - /// - /// Le numéro du joueur qui va être ajouté. - public DemanderJoueurEventArgs(int numero) - { - Numero = numero; - } - } -} diff --git a/Sources/CoreLibrary/Events/DemanderNomEventArgs.cs b/Sources/CoreLibrary/Events/DemanderNomEventArgs.cs new file mode 100644 index 0000000..e099772 --- /dev/null +++ b/Sources/CoreLibrary/Events/DemanderNomEventArgs.cs @@ -0,0 +1,16 @@ +using CoreLibrary.Joueurs; + +namespace CoreLibrary.Events +{ + public class DemanderNomEventArgs : EventArgs + { + public int Indice { get; private set; } + public JoueurBuilder JoueurBuilder { get; private set; } + + public DemanderNomEventArgs(int indice, JoueurBuilder joueurBuilder) + { + Indice = indice; + JoueurBuilder = joueurBuilder; + } + } +} diff --git a/Sources/CoreLibrary/Joueurs/Joueur.cs b/Sources/CoreLibrary/Joueurs/Joueur.cs index e3f9635..0dc4cfc 100644 --- a/Sources/CoreLibrary/Joueurs/Joueur.cs +++ b/Sources/CoreLibrary/Joueurs/Joueur.cs @@ -1,4 +1,7 @@ -namespace CoreLibrary.Joueurs +using CoreLibrary.Core; +using CoreLibrary.Events; + +namespace CoreLibrary.Joueurs { /// /// Classe représentant un joueur. diff --git a/Sources/CoreLibrary/Joueurs/JoueurBuilder.cs b/Sources/CoreLibrary/Joueurs/JoueurBuilder.cs index 6ce2d1f..66236ff 100644 --- a/Sources/CoreLibrary/Joueurs/JoueurBuilder.cs +++ b/Sources/CoreLibrary/Joueurs/JoueurBuilder.cs @@ -1,21 +1,16 @@ -namespace CoreLibrary.Joueurs +using CoreLibrary.Events; + +namespace CoreLibrary.Joueurs { public class JoueurBuilder { - private string nom; + public event EventHandler? ConstruireJoueur; - public JoueurBuilder Nom(string nom) - { - this.nom = nom; - return this; - } + private void QuandConstruireJoueur(string nom) => ConstruireJoueur?.Invoke(this, new ConstruireJoueurEventArgs(nom)); - public Joueur Build() + public void Nom(string nom) { - return new Joueur() + QuandConstruireJoueur(nom); } - - - } } diff --git a/Sources/CoreLibrary/Partie.cs b/Sources/CoreLibrary/Partie.cs index b883db4..70a073a 100644 --- a/Sources/CoreLibrary/Partie.cs +++ b/Sources/CoreLibrary/Partie.cs @@ -26,12 +26,7 @@ namespace CoreLibrary /// /// Événement déclenché lorsqu'il est nécessaire de d'ajouter un joueur. /// - public event StringEventHandler? DemanderJoueur; - - /// - /// Événement déclenché lorsqu'il est nécessaire d'ajouter un jeton. - /// - public event JetonEventHandler? DemanderJeton; + public event StringEventHandler? DemanderNom; /// /// Événement déclenché lorsqu'il est nécessaire d'ajouter un joueur. @@ -79,13 +74,7 @@ namespace CoreLibrary /// /// Le numéro du joueur à ajouter /// Le nom du joueur demandé - private string? QuandDemanderJoueur(int numero) => DemanderJoueur?.Invoke(this, new DemanderJoueurEventArgs(numero)); - - /// - /// Méthode pour déclencher l'événement de demande d'ajout d'un jeton. - /// - /// Le jeton demandé - private Jeton? QuandDemanderJeton(int indice) => DemanderJeton?.Invoke(this, new DemanderJetonEventArgs(indice)); + private string? QuandDemanderNom(int numero, JoueurBuilder joueurBuilder) => DemanderNom?.Invoke(this, new DemanderNomEventArgs(numero, joueurBuilder)); /// /// Méthode pour déclencher l'événement d'ajout d'un joueur. @@ -143,7 +132,7 @@ namespace CoreLibrary /// Les règles de la partie. public Partie(IRegles regles) { - this.regles = regles; + this.regles = regles; } /// @@ -151,31 +140,44 @@ namespace CoreLibrary /// public void Jouer() { - /// Ajout des joueurs jusqu'à atteindre le nombre maximum de joueurs défini par les règles - AjouterJoueurs(); - regles.CommencerLaPartie(); - QuandDebutPartie(); - - Joueur joueurCourant = regles.JoueurCourant(); - Plateau plateauCourant = joueurCourant.Plateau; - - QuandNouveauTour(joueurCourant, plateauCourant.Tour, plateauCourant.Grille(), plateauCourant.Indicateurs()); + JoueurBuilder joueurBuilder = new JoueurBuilder(); + joueurBuilder.ConstruireJoueur += Joueur; + QuandDemanderNom(regles.NbJoueurs + 1, joueurBuilder); } - public void Joueur(Object? sender, ) + public void Joueur(Object? sender, ConstruireJoueurEventArgs e) { + Joueur joueur = regles.AjouterJoueur(e.Nom); + QuandAjouterJoueur(joueur); + joueur.JouerCode += Tour; + if (regles.NbJoueurs != regles.NbJoueursMaximum) + { + JoueurBuilder joueurBuilder = new JoueurBuilder(); + joueurBuilder.ConstruireJoueur += Joueur; + QuandDemanderNom(regles.NbJoueurs + 1, joueurBuilder); + } + else + { + Commencer(); + } } - private void Tour() + public void Commencer() { - Code code = regles.GenererCode(); + regles.CommencerLaPartie(); + QuandDebutPartie(); - CreerCode(code); + (Joueur joueurCourant, Plateau plateauCourant) = regles.JoueurCourant(); + QuandNouveauTour(joueurCourant, plateauCourant.Tour, plateauCourant.Grille(), plateauCourant.Indicateurs()); + } - plateauCourant.AjouterCode(code); - QuandNouveauCode(code); + private void Tour(Object? sender, JouerCodeEventArgs e) + { + (Joueur joueurCourant, Plateau plateauCourant) = regles.JoueurCourant(); + plateauCourant.AjouterCode(e.Code); + QuandNouveauCode(e.Code); if(regles.EstTerminee()) { @@ -186,46 +188,11 @@ namespace CoreLibrary regles.PasserLaMain(); QuandPasserMain(); } - } private void Terminee() { QuandPartieTerminee(regles.Gagnants(), regles.Perdants()); } - - private void AjouterJoueurs() - { - while (regles.NbJoueurs != regles.NbJoueursMaximum) - { - string nom = QuandDemanderJoueur(regles.NbJoueurs + 1) ?? $"Joueur {regles.NbJoueurs + 1}"; - Joueur joueur = regles.AjouterJoueur(nom); - QuandAjouterJoueur(joueur); - } - } - - private void CreerCode(Code code) - { - while (!code.EstComplet()) - { - Jeton? jeton = QuandDemanderJeton(code.NbJetons); - - if (DemanderJeton == null) - { - jeton = new Jeton(); - } - - if(!jeton.HasValue) - { - code.SupprimerDernierJeton(); - QuandSupprimerDernierJeton(); - } - else - { - code.AjouterJeton(jeton.Value); - QuandNouveauJeton(jeton.Value); - } - } - } } }