From b355e26c61fbb642f445ee2a57db5a29c7067267 Mon Sep 17 00:00:00 2001 From: "nicolas.barbosa" Date: Tue, 28 May 2024 21:24:16 +0200 Subject: [PATCH] =?UTF-8?q?Transfert=20des=20r=C3=A8gles=20vers=20partie?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Events/ConstruireJoueurEventArgs.cs | 12 +- Sources/CoreLibrary/Joueurs/JoueurBuilder.cs | 6 +- Sources/CoreLibrary/Partie.cs | 49 ++++-- Sources/CoreLibrary/Regles/IRegles.cs | 52 ------- .../CoreLibrary/Regles/ReglesClassiques.cs | 139 ------------------ Sources/MauiSpark/Pages/ConnexionPage.xaml | 2 +- Sources/MauiSpark/Pages/ConnexionPage.xaml.cs | 4 +- Sources/MauiSpark/Views/CTableauScore.xaml.cs | 28 ++-- 8 files changed, 60 insertions(+), 232 deletions(-) diff --git a/Sources/CoreLibrary/Events/ConstruireJoueurEventArgs.cs b/Sources/CoreLibrary/Events/ConstruireJoueurEventArgs.cs index 186fb2f..08af7fd 100644 --- a/Sources/CoreLibrary/Events/ConstruireJoueurEventArgs.cs +++ b/Sources/CoreLibrary/Events/ConstruireJoueurEventArgs.cs @@ -1,6 +1,4 @@ -using CoreLibrary.Joueurs; - -namespace CoreLibrary.Events +namespace CoreLibrary.Events { /// /// Classe contenant les arguments passées en paramètre lors de l'événement ConstruireJoueurEventArgs. @@ -10,15 +8,15 @@ namespace CoreLibrary.Events /// /// Le nom du joueur à ajouter. /// - public Joueur Joueur { get; private set; } + public string? Nom { get; private set; } /// /// Initialise une nouvelle instance de la classe avec les informations spécifiées. /// - /// Le joueur à ajouter. - public ConstruireJoueurEventArgs(Joueur joueur) + /// Le nom du joueur à ajouter. + public ConstruireJoueurEventArgs(string? nom) { - Joueur = joueur; + Nom = nom; } } } diff --git a/Sources/CoreLibrary/Joueurs/JoueurBuilder.cs b/Sources/CoreLibrary/Joueurs/JoueurBuilder.cs index 6a0f3bf..b136b7b 100644 --- a/Sources/CoreLibrary/Joueurs/JoueurBuilder.cs +++ b/Sources/CoreLibrary/Joueurs/JoueurBuilder.cs @@ -6,11 +6,11 @@ namespace CoreLibrary.Joueurs { public event EventHandler? ConstruireJoueur; - private void QuandConstruireJoueur(Joueur joueur) => ConstruireJoueur?.Invoke(this, new ConstruireJoueurEventArgs(joueur)); + private void QuandConstruireJoueur(string? nom) => ConstruireJoueur?.Invoke(this, new ConstruireJoueurEventArgs(nom)); - public void Joueur(Joueur joueur) + public void Nom(string? nom) { - QuandConstruireJoueur(joueur); + QuandConstruireJoueur(nom); } } } diff --git a/Sources/CoreLibrary/Partie.cs b/Sources/CoreLibrary/Partie.cs index b892ee9..9c9a14b 100644 --- a/Sources/CoreLibrary/Partie.cs +++ b/Sources/CoreLibrary/Partie.cs @@ -12,6 +12,10 @@ namespace CoreLibrary { public IRegles Regles { get; private set; } + private readonly List joueurs = new List(); + private readonly List plateaux = new List(); + private int? courant; + /// /// Événement déclenché lorsqu'il est nécessaire de d'ajouter un joueur. /// @@ -110,7 +114,7 @@ namespace CoreLibrary JoueurBuilder joueurBuilder = new JoueurBuilder(); joueurBuilder.ConstruireJoueur += Joueur; - QuandDemanderNom(Regles.NbJoueurs + 1, joueurBuilder); + QuandDemanderNom(joueurs.Count + 1, joueurBuilder); } /// @@ -118,17 +122,19 @@ namespace CoreLibrary /// private void Joueur(Object? sender, ConstruireJoueurEventArgs e) { - Joueur joueur = e.Joueur; + Joueur joueur = new Joueur(string.IsNullOrEmpty(e.Nom) ? $"Joueur {joueurs.Count + 1}" : e.Nom); + Plateau plateau = new Plateau(Regles.TailleCodeMaximum, Regles.TourMaximum); - Regles.AjouterJoueur(joueur); + joueurs.Add(joueur); + plateaux.Add(plateau); QuandAjouterJoueur(joueur); joueur.JouerCode += Tour; - if (Regles.NbJoueurs != Regles.NbJoueursMaximum) + if (joueurs.Count != Regles.NbJoueursMaximum) { JoueurBuilder joueurBuilder = new JoueurBuilder(); joueurBuilder.ConstruireJoueur += Joueur; - QuandDemanderNom(Regles.NbJoueurs + 1, joueurBuilder); + QuandDemanderNom(joueurs.Count + 1, joueurBuilder); } else { @@ -141,11 +147,12 @@ namespace CoreLibrary /// private void Commencer() { - Regles.CommencerLaPartie(); + courant = 0; + Joueur joueurCourant = joueurs[courant.Value]; + Plateau plateauCourant = plateaux[courant.Value]; QuandDebutPartie(); - (Joueur joueurCourant, Plateau plateauCourant) = Regles.JoueurCourant(); - QuandNouveauTour(joueurCourant, plateauCourant.Tour, Regles.GenererCode(), plateauCourant.Grille(), plateauCourant.Indicateurs()); + QuandNouveauTour(joueurCourant, plateauCourant.Tour, new Code(Regles.TailleCodeMaximum), plateauCourant.Grille(), plateauCourant.Indicateurs()); } /// @@ -153,21 +160,24 @@ namespace CoreLibrary /// private void Tour(Object? sender, JouerCodeEventArgs e) { - (Joueur joueurCourant, Plateau plateauCourant) = Regles.JoueurCourant(); + Plateau plateauCourant = plateaux[courant!.Value]; + plateauCourant.AjouterCode(e.Code); QuandAjouterCode(e.Code); - Regles.PasserLaMain(); + if (++courant == joueurs.Count) + courant = 0; QuandPasserMain(); - if (Regles.EstTerminee()) + if(courant == 0 && (plateauCourant.Tour > Regles.TourMaximum || plateaux.Where(plateau => plateau.Victoire).Any())) { Terminee(); } else { - (joueurCourant, plateauCourant) = Regles.JoueurCourant(); - QuandNouveauTour(joueurCourant, plateauCourant.Tour, Regles.GenererCode(), plateauCourant.Grille(), plateauCourant.Indicateurs()); + Joueur joueurCourant = joueurs[courant!.Value]; + plateauCourant = plateaux[courant!.Value]; + QuandNouveauTour(joueurCourant, plateauCourant.Tour, new Code(Regles.TailleCodeMaximum), plateauCourant.Grille(), plateauCourant.Indicateurs()); } } @@ -176,7 +186,18 @@ namespace CoreLibrary /// private void Terminee() { - QuandPartieTerminee(Regles.Gagnants(), Regles.Perdants()); + List gagnants = new List(); + List perdants = new List(); + + for(int i = 0; i < joueurs.Count; i++) + { + if (plateaux[i].Victoire) + gagnants.Add(joueurs[i]); + else + perdants.Add(joueurs[i]); + } + + QuandPartieTerminee(gagnants, perdants); } } } diff --git a/Sources/CoreLibrary/Regles/IRegles.cs b/Sources/CoreLibrary/Regles/IRegles.cs index b3bc4a9..bba390b 100644 --- a/Sources/CoreLibrary/Regles/IRegles.cs +++ b/Sources/CoreLibrary/Regles/IRegles.cs @@ -1,5 +1,4 @@ using CoreLibrary.Core; -using CoreLibrary.Joueurs; namespace CoreLibrary.Regles { @@ -23,60 +22,9 @@ namespace CoreLibrary.Regles /// int TailleCodeMaximum { get; } - /// - /// Le nombre de joueurs actuels. - /// - int NbJoueurs { get; } - /// /// Le nombre maximum de joueurs. /// int NbJoueursMaximum { get; } - - /// - /// Ajoute un joueur à la partie. - /// - /// Joueur à ajouter. - void AjouterJoueur(Joueur joueur); - - /// - /// Récupère le joueur courant. - /// - /// Le joueur courant. - (Joueur, Plateau) JoueurCourant(); - - /// - /// Passe la main au joueur suivant. - /// - void PasserLaMain(); - - /// - /// Génère un code selon les règles du jeu. - /// - /// Le code généré. - Code GenererCode(); - - /// - /// Démarre la partie. - /// - void CommencerLaPartie(); - - /// - /// Vérifie si la partie est terminée. - /// - /// True si la partie est terminée, sinon False. - bool EstTerminee(); - - /// - /// Récupère les joueurs gagnants. - /// - /// Les joueurs gagnants. - IEnumerable Gagnants(); - - /// - /// Récupère les joueurs perdants. - /// - /// Les joueurs perdants. - IEnumerable Perdants(); } } diff --git a/Sources/CoreLibrary/Regles/ReglesClassiques.cs b/Sources/CoreLibrary/Regles/ReglesClassiques.cs index 35abefb..7c929c2 100644 --- a/Sources/CoreLibrary/Regles/ReglesClassiques.cs +++ b/Sources/CoreLibrary/Regles/ReglesClassiques.cs @@ -9,11 +9,6 @@ namespace CoreLibrary.Regles /// public class ReglesClassiques : IRegles { - private int nbJoueurs = 0; - private int? joueurCourant; - private readonly Joueur[] joueurs; - private readonly Plateau[] plateaux; - /// /// Le nom des règles. /// @@ -27,145 +22,11 @@ namespace CoreLibrary.Regles /// /// La taille maximale d'un code. /// - public int TailleCodeMaximum { get => 4; } - /// - /// Le nombre de joueurs actuels dans le jeu. - /// - public int NbJoueurs { get => nbJoueurs; } /// /// Me nombre maximum de joueurs possibles pour le jeu. /// - public int NbJoueursMaximum { get => 2; } - - - /// - /// Initialise une nouvelle instance de la classe - /// - public ReglesClassiques() - { - joueurs = new Joueur[NbJoueursMaximum]; - plateaux = new Plateau[NbJoueursMaximum]; - } - - /// - /// Ajoute un joueur à la partie. - /// - /// Le joueur à ajouter. - public void AjouterJoueur(Joueur joueur) - { - joueurs[nbJoueurs] = joueur; - plateaux[nbJoueurs++] = new Plateau(TailleCodeMaximum, TourMaximum); - } - - /// - /// Obtient le joueur dont c'est actuellement le tour. - /// - /// Le joueur actuel. - /// Levée lorsque la partie n'a pas commencée. - - public (Joueur, Plateau) JoueurCourant() - { - if (!joueurCourant.HasValue) - throw new PartieNonCommenceeException(); - - return (joueurs[joueurCourant.Value], plateaux[joueurCourant.Value]); - } - - /// - /// Passe la main au joueur suivant. - /// - /// Levée lorsque la partie n'a pas commmencée. - public void PasserLaMain() - { - if (!joueurCourant.HasValue) - { - throw new PartieNonCommenceeException(); - } - - ++joueurCourant; - - if (joueurCourant >= joueurs.Length) - { - joueurCourant = 0; - } - - } - - /// - /// Génère un nouveau code respectant les règles classiques. - /// - /// Le code généré. - public Code GenererCode() - { - return new Code(TailleCodeMaximum); - } - - /// - /// Démarre la partie en décidant que le premier joueur commence. - /// - public void CommencerLaPartie() - { - joueurCourant = 0; - } - - /// - /// Vérifie si la partie est terminée. - /// - /// True si la partie est terminée, sinon False. - public bool EstTerminee() - { - if (!joueurCourant.HasValue || joueurCourant != 0) - return false; - - if (JoueurCourant().Item2.Tour > TourMaximum) - return true; - - for (int i = 0; i < joueurs.Length; ++i) - { - if (plateaux[i].Victoire) - return true; - } - - return false; - } - - /// - /// Obtient les joueurs gagnants de la partie. - /// - /// La liste des joueurs gagnants. - public IEnumerable Gagnants() - { - Joueur[] gagnants = []; - for (int i = 0; i < joueurs.Length; ++i) - { - if (plateaux[i].Victoire) - { - gagnants = gagnants.Append(joueurs[i]).ToArray(); - } - } - - return gagnants; - } - - /// - /// Obtient les joueurs perdants de la partie. - /// - /// La liste des joueurs perdants. - public IEnumerable Perdants() - { - Joueur[] perdants = []; - for (int i = 0; i < joueurs.Length; ++i) - { - if (!plateaux[i].Victoire) - { - perdants = perdants.Append(joueurs[i]).ToArray(); - } - } - - return perdants; - } } } diff --git a/Sources/MauiSpark/Pages/ConnexionPage.xaml b/Sources/MauiSpark/Pages/ConnexionPage.xaml index 80b99e0..834ee7f 100644 --- a/Sources/MauiSpark/Pages/ConnexionPage.xaml +++ b/Sources/MauiSpark/Pages/ConnexionPage.xaml @@ -25,7 +25,6 @@ RowDefinitions="auto">