diff --git a/Sources/CoreLibrary/Joueurs/Joueur.cs b/Sources/CoreLibrary/Joueurs/Joueur.cs index 7d8e484..7838b76 100644 --- a/Sources/CoreLibrary/Joueurs/Joueur.cs +++ b/Sources/CoreLibrary/Joueurs/Joueur.cs @@ -1,6 +1,4 @@ -using CoreLibrary.Core; - -namespace CoreLibrary.Joueurs +namespace CoreLibrary.Joueurs { /// /// Classe représentant un joueur. @@ -11,20 +9,32 @@ namespace CoreLibrary.Joueurs /// Le nom du joueur. /// public string Nom { get; private init; } - /// - /// Le plateau du joueur. - /// - public Plateau Plateau { get; private init; } + + public int NbCoutTotal { get; set; } + public int NbPartieGagnee { get; set; } + public int NbPartieEgalite { get; set; } + public int NbPartiePerdue { get; set; } /// - /// Crée une nouvelle instance de joueur avec un nom et un plateau spécifié. + /// Crée une nouvelle instance de joueur avec un nom /// /// Le nom du joueur. - /// Le plateau du joueur. - public Joueur(string nom, Plateau plateau) + public Joueur(string nom) + { + Nom = nom; + NbCoutTotal = 0; + NbPartieGagnee = 0; + NbPartieEgalite = 0; + NbPartiePerdue = 0; + } + + public Joueur(string nom, int nbCoutTotal, int nbPartieGagnee, int nbPartieEgalite, int nbPartiePerdue) { Nom = nom; - Plateau = plateau; + NbCoutTotal = nbCoutTotal; + NbPartieGagnee = nbPartieGagnee; + NbPartieEgalite = nbPartieEgalite; + NbPartiePerdue = nbPartiePerdue; } } } diff --git a/Sources/CoreLibrary/Partie.cs b/Sources/CoreLibrary/Partie.cs index 3ea6cfe..c56a8bd 100644 --- a/Sources/CoreLibrary/Partie.cs +++ b/Sources/CoreLibrary/Partie.cs @@ -160,8 +160,7 @@ namespace CoreLibrary // Boucle principale du jeu qui dure jusqu'à qu'une condition de fin soit déclenchée while (!regles.EstTerminee()) { - Joueur joueurCourant = regles.JoueurCourant(); - Plateau plateauCourant = joueurCourant.Plateau; + (Joueur joueurCourant, Plateau plateauCourant) = regles.JoueurCourant(); QuandNouveauTour(joueurCourant, plateauCourant.Tour, plateauCourant.Grille(), plateauCourant.Indicateurs()); diff --git a/Sources/CoreLibrary/Regles/IRegles.cs b/Sources/CoreLibrary/Regles/IRegles.cs index bb0945f..a66b5a3 100644 --- a/Sources/CoreLibrary/Regles/IRegles.cs +++ b/Sources/CoreLibrary/Regles/IRegles.cs @@ -44,7 +44,7 @@ namespace CoreLibrary.Regles /// Récupère le joueur courant. /// /// Le joueur courant. - Joueur JoueurCourant(); + (Joueur, Plateau) JoueurCourant(); /// /// Passe la main au joueur suivant. diff --git a/Sources/CoreLibrary/Regles/ReglesClassiques.cs b/Sources/CoreLibrary/Regles/ReglesClassiques.cs index 7ef929c..e329a83 100644 --- a/Sources/CoreLibrary/Regles/ReglesClassiques.cs +++ b/Sources/CoreLibrary/Regles/ReglesClassiques.cs @@ -1,171 +1,174 @@ -using CoreLibrary.Core; -using CoreLibrary.Exceptions; -using CoreLibrary.Joueurs; - -namespace CoreLibrary.Regles -{ - /// - /// Classe définissant les règles classiques du jeu. - /// - public class ReglesClassiques : IRegles - { - private int nbJoueurs = 0; - private int? joueurCourant; - private readonly Joueur[] joueurs; - - /// - /// Le nom des règles. - /// - public string Nom { get => "Règles classiques"; } - - /// - /// Le nombre maximum de tour. - /// - public int TourMaximum { get => 12; } - - /// - /// La taille maximale d'un code. - /// - - public int TailleCodeMaximum { get => 4; } - /// - /// Le nombre de joueurs actuels dans le jeu. - /// - +using CoreLibrary.Core; +using CoreLibrary.Exceptions; +using CoreLibrary.Joueurs; + +namespace CoreLibrary.Regles +{ + /// + /// Classe définissant les règles classiques du jeu. + /// + public class ReglesClassiques : IRegles + { + private int nbJoueurs = 0; + private int? joueurCourant; + private readonly Joueur[] joueurs; + private readonly Plateau[] plateaux; + + /// + /// Le nom des règles. + /// + public string Nom { get => "Règles classiques"; } + + /// + /// Le nombre maximum de tour. + /// + public int TourMaximum { get => 12; } + + /// + /// 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]; - } - - /// - /// Ajoute un joueur avec le nom spécifié. - /// - /// Le nom du joueur à ajouter. - /// Le joueur ajouté. - public Joueur AjouterJoueur(string nom) - { - Joueur joueur = new Joueur(nom, new Plateau(TailleCodeMaximum, TourMaximum)); - joueurs[nbJoueurs++] = joueur; - return joueur; - } - - /// - /// Obtient le joueur dont c'est actuellement le tour. - /// - /// Le joueur actuel. - /// Levée lorsque la partie n'a pas commencée. - - public Joueur JoueurCourant() - { - if (!joueurCourant.HasValue) - throw new PartieNonCommenceeException(); - - return joueurs[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().Plateau.Tour > TourMaximum) - return true; - - for (int i = 0; i < joueurs.Length; ++i) - { - if (joueurs[i].Plateau.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 (joueurs[i].Plateau.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 (!joueurs[i].Plateau.Victoire) - { - perdants = perdants.Append(joueurs[i]).ToArray(); - } - } - - return perdants; - } - } -} + /// + /// 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 avec le nom spécifié. + /// + /// Le nom du joueur à ajouter. + /// Le joueur ajouté. + public Joueur AjouterJoueur(string nom) + { + Joueur joueur = new Joueur(nom); + joueurs[nbJoueurs] = joueur; + plateaux[nbJoueurs++] = new Plateau(TailleCodeMaximum, TourMaximum); + return joueur; + } + + /// + /// 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; + } + } +}