diff --git a/Sources/ConsoleApp/Evenements.cs b/Sources/ConsoleApp/Evenements.cs index 8feb58c..c9630be 100644 --- a/Sources/ConsoleApp/Evenements.cs +++ b/Sources/ConsoleApp/Evenements.cs @@ -17,7 +17,7 @@ namespace ConsoleApp /// L'instance de l'événement DemanderNomEventArgs créée par Partie. /// Le nom du joueur. /// - public static void DemanderNom(Object? sender, PartieDemanderJoueurEventArgs e) + public static void DemanderNom(object? sender, PartieDemanderJoueurEventArgs e) { Console.WriteLine($"Joueur {e.Indice}"); Console.Write(">>> "); @@ -26,7 +26,9 @@ namespace ConsoleApp Console.WriteLine(); - e.JoueurDemande.SeConnecter(!string.IsNullOrEmpty(nom) ? Program.Manageur.DemanderJoueur(nom) : new Joueur($"Joueur {e.Indice}")); + Joueur joueur = !string.IsNullOrEmpty(nom) ? Program.Manageur.DemanderJoueur(nom) : new Robot(); + + e.JoueurDemande.SeConnecter(joueur); } @@ -35,46 +37,50 @@ namespace ConsoleApp /// 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, PartieDebutPartieEventArgs e) + public static void CommencerLaPartie(object? sender, PartieDebutPartieEventArgs 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, PartieNouveauTourEventArgs e) + public static void NouveauTour(object? sender, PartieNouveauTourEventArgs e) { Utils.DessinerSeparateur(); - Console.WriteLine($"Tour {e.Tour} - {e.Joueur.Nom}\n"); + Console.WriteLine($"{e.Nom} - Tour {e.Tour}\n"); - (IReadOnlyList> codes, IReadOnlyList> indicateurs) = e.Plateau.Grille; Utils.DessinerPlateau(e.Plateau); - Console.WriteLine(); + foreach(Jeton jeton in e.Code.Jetons) + Utils.DessinerPion(jeton.Couleur); - Code code = e.Code; - while(!code.Complet) + while (!e.Code.Complet) { - Jeton? jeton = Utils.SaisirJeton(code.Taille); + Jeton? jeton = Utils.SaisirJeton(e.Code.Taille); + if (jeton.HasValue) { + e.Code.AjouterJeton(jeton.Value); Utils.DessinerPion(jeton.Value.Couleur); - code.AjouterJeton(jeton.Value); } else { + e.Code.SupprimerDernierJeton(); Utils.SupprimerDernierJeton(); - code.SupprimerDernierJeton(); } } - e.Plateau.AjouterCode(code); + Console.WriteLine("\n"); + + if (!e.EstJoueur) + { + Task t = Task.Delay(3000); + t.GetAwaiter().GetResult(); + + } + + e.Plateau.AjouterCode(e.Code); } /// @@ -82,10 +88,8 @@ namespace ConsoleApp /// 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, PartiePasserLaMainEventArgs e) + public static void AjouterCode(object? sender, PartiePasserLaMainEventArgs e) { - Console.WriteLine(); - Utils.DessinerSeparateur(); } @@ -96,7 +100,7 @@ namespace ConsoleApp /// public static void PartieTerminee(Object? sender, PartiePartieTermineeEventArgs e) { - Joueur[] gagnants = e.Gagnants.ToArray(); + string[] gagnants = e.Gagnants.ToArray(); if (gagnants.Length > 1) { @@ -104,7 +108,7 @@ namespace ConsoleApp } else if (gagnants.Length == 1) { - Console.WriteLine($"C'est une victoire de {gagnants[0].Nom}."); + Console.WriteLine($"C'est une victoire de {gagnants[0]}."); } else { diff --git a/Sources/ConsoleApp/Program.cs b/Sources/ConsoleApp/Program.cs index 02d66fe..9f8281d 100644 --- a/Sources/ConsoleApp/Program.cs +++ b/Sources/ConsoleApp/Program.cs @@ -3,6 +3,7 @@ using CoreLibrary.Persistance; using CoreLibrary.Regles; using CoreLibrary; using System.Diagnostics.CodeAnalysis; +using CoreLibrary.Joueurs; namespace ConsoleApp { diff --git a/Sources/CoreLibrary/Core/Code.cs b/Sources/CoreLibrary/Core/Code.cs index 747ba0d..fb6dbde 100644 --- a/Sources/CoreLibrary/Core/Code.cs +++ b/Sources/CoreLibrary/Core/Code.cs @@ -1,4 +1,5 @@ -using CoreLibrary.Exceptions; +using CoreLibrary.Evenements; +using CoreLibrary.Exceptions; using System.Collections.ObjectModel; using System.Runtime.Serialization; diff --git a/Sources/CoreLibrary/Evenements/JoueurSeConnecterEventArgs.cs b/Sources/CoreLibrary/Evenements/JoueurSeConnecterEventArgs.cs index ee2a27f..3cea153 100644 --- a/Sources/CoreLibrary/Evenements/JoueurSeConnecterEventArgs.cs +++ b/Sources/CoreLibrary/Evenements/JoueurSeConnecterEventArgs.cs @@ -1,22 +1,17 @@ -namespace CoreLibrary.Evenements +using CoreLibrary.Joueurs; + +namespace CoreLibrary.Evenements { /// /// Classe contenant les arguments passés en paramètres lors de l'événement JoueurSeConnecter. /// public class JoueurSeConnecterEventArgs : EventArgs { - /// - /// Nom du joueur se connectant. - /// - public string Nom { get; private init; } + public Joueur Joueur { get; private init; } - /// - /// Constructeur de JoueurSeConnecterEventArgs. - /// - /// Nom du joueur qui se connecte. - public JoueurSeConnecterEventArgs(string nom) + public JoueurSeConnecterEventArgs(Joueur joueur) { - Nom = nom; + Joueur = joueur; } } } diff --git a/Sources/CoreLibrary/Evenements/PartieDemanderJoueurJouerEventArgs.cs b/Sources/CoreLibrary/Evenements/PartieDemanderJoueurJouerEventArgs.cs new file mode 100644 index 0000000..4ae8775 --- /dev/null +++ b/Sources/CoreLibrary/Evenements/PartieDemanderJoueurJouerEventArgs.cs @@ -0,0 +1,22 @@ +using CoreLibrary.Core; + +namespace CoreLibrary.Evenements +{ + public class PartieDemanderJoueurJouerEventArgs : EventArgs + { + public int Tour { get; private init; } + public string Nom { get; private init; } + public Plateau Plateau { get; private init; } + public Code Code { get; private init; } + public bool EstJoueur { get; private init; } + + public PartieDemanderJoueurJouerEventArgs(int tour, string nom, Plateau plateau, Code code, bool estJoueur) + { + Tour = tour; + Nom = nom; + Plateau = plateau; + Code = code; + EstJoueur = estJoueur; + } + } +} diff --git a/Sources/CoreLibrary/Evenements/PartieNouveauTourEventArgs.cs b/Sources/CoreLibrary/Evenements/PartieNouveauTourEventArgs.cs index 187b905..16ea6ab 100644 --- a/Sources/CoreLibrary/Evenements/PartieNouveauTourEventArgs.cs +++ b/Sources/CoreLibrary/Evenements/PartieNouveauTourEventArgs.cs @@ -1,5 +1,4 @@ using CoreLibrary.Core; -using CoreLibrary.Joueurs; namespace CoreLibrary.Evenements { @@ -12,35 +11,18 @@ namespace CoreLibrary.Evenements /// Entier correspondant au nombre de tour. /// public int Tour { get; private init; } - - /// - /// Chaîne de caractères correspondant au joueur courant. - /// - public string Joueur { get; private init; } - - /// - /// Plateau du jeu en cours. - /// - public Plateau Plateau { get; private init; } - - /// - /// Code du jeu en cours. - /// + public string Nom { get; private init; } + public Plateau Plateau { get; private init; } public Code Code { get; private init; } + public bool EstJoueur { get; private init; } - /// - /// Constructeur de PartieNouveauTourEventArgs, avec le tour, le joueur, le plateau et le code spécifiés. - /// - /// Le nombre de tour passé. - /// Le joueur courant. - /// Le plateau actuel de la partie. - /// Le dernier code ajouté. - public PartieNouveauTourEventArgs(int tour, string joueur, Plateau plateau, Code code) + public PartieNouveauTourEventArgs(int tour, string nom, Plateau plateau, Code code, bool estJoueur) { Tour = tour; - Joueur = joueur; + Nom = nom; Plateau = plateau; Code = code; + EstJoueur = estJoueur; } } } diff --git a/Sources/CoreLibrary/Joueurs/Joueur.cs b/Sources/CoreLibrary/Joueurs/Joueur.cs index a7f0979..c8deda1 100644 --- a/Sources/CoreLibrary/Joueurs/Joueur.cs +++ b/Sources/CoreLibrary/Joueurs/Joueur.cs @@ -4,6 +4,7 @@ using CoreLibrary.Evenements; using CoreLibrary.Regles; using CoreLibrary.Statistiques; using System.Runtime.Serialization; +using CoreLibrary.Core; namespace CoreLibrary.Joueurs { @@ -12,6 +13,7 @@ namespace CoreLibrary.Joueurs /// [DataContract] [KnownType(typeof(ReglesClassiques))] + [KnownType(typeof(ReglesDifficiles))] public class Joueur : IEstPersistant { /// @@ -19,11 +21,8 @@ namespace CoreLibrary.Joueurs /// public event EventHandler? JoueurSeConnecter; - private void QuandJoueurSeConnecter() => JoueurSeConnecter?.Invoke(this, new JoueurSeConnecterEventArgs(Nom)); - - /// - /// Dictionnaire des statistiques du joueur avec les règles et les statistiques. - /// + private void QuandJoueurSeConnecter(Joueur joueur) => JoueurSeConnecter?.Invoke(this, new JoueurSeConnecterEventArgs(joueur)); + [DataMember] private Dictionary<(IRegles, Statistique), int> statistiques = new Dictionary<(IRegles, Statistique), int>(); @@ -54,24 +53,23 @@ namespace CoreLibrary.Joueurs Nom = nom; } - /// - /// Connecte le joueur actuel avec les informations d'un autre joueur. - /// - /// Le joueur à partir duquel copier les informations. - /// Renvoie le joueur actuel connecté. - /// Lancée si le joueur est déjà connecté. - public Joueur SeConnecter(Joueur joueur) + public void SeConnecter(Joueur joueur) { if (EstConnecte) throw new JoueurDejaConnecteException(this); - Nom = joueur.Nom; - statistiques = joueur.statistiques; - EstConnecte = true; + QuandJoueurSeConnecter(joueur); + } - QuandJoueurSeConnecter(); + public void JouerPartie(Partie partie) + { + partie.PartieDemanderJoueurJouer += QuandDemanderJoueurJouer; + } - return this; + public virtual void QuandDemanderJoueurJouer(object? sender, PartieDemanderJoueurJouerEventArgs e) + { + if (e.Nom != Nom) + return; } /// @@ -80,14 +78,7 @@ namespace CoreLibrary.Joueurs /// Renvoie une chaîne de caractères du nom du joueur. public override string ToString() => Nom; - /// - /// Obtient la valeur de la statistique spécifiée pour les règles données. - /// - /// Les règles du jeu. - /// Le type de statistique. - /// Renvoie la valeur de la statistique. - public int Statistique(IRegles regles, Statistique statistique) => - statistiques.GetValueOrDefault((regles, statistique), 0); + public int Statistique(IRegles regles, Statistique statistique) => statistiques.GetValueOrDefault((regles, statistique),0); /// /// Incrémente la valeur de la statistique spécifiée pour les règles données. diff --git a/Sources/CoreLibrary/Joueurs/Robot.cs b/Sources/CoreLibrary/Joueurs/Robot.cs new file mode 100644 index 0000000..e325998 --- /dev/null +++ b/Sources/CoreLibrary/Joueurs/Robot.cs @@ -0,0 +1,106 @@ +using CoreLibrary.Core; +using CoreLibrary.Evenements; + +namespace CoreLibrary.Joueurs +{ + public class Robot : Joueur + { + private static int nbRobots = 0; + + private List? codesPossibles; + + public Robot() : + base($"Naps {++nbRobots}") + { + } + + public Robot(string nom) : + base(nom) + { + } + + public override void QuandDemanderJoueurJouer(object? sender, PartieDemanderJoueurJouerEventArgs e) + { + if (e.Nom != Nom) + return; + + if (codesPossibles == null) + { + codesPossibles = new List(); + GenererTousCodesPossibles(e.Code.TailleMax); + } + + SupprimerCodesImpossibles(e.Plateau); + + for(int i = 0; i < e.Code.TailleMax; ++i) + e.Code.AjouterJeton(codesPossibles.ElementAt(0).Jetons[i]); + } + + private void GenererTousCodesPossibles(int tailleCode) + { + Couleur[] couleurs = Enum.GetValues(); + int nbLignes = (int)Math.Pow(couleurs.Length, tailleCode); + Jeton?[,] jetons = new Jeton?[nbLignes, tailleCode]; + + for(int indiceColonne = 0; indiceColonne < jetons.GetLength(1); ++indiceColonne) + { + int repetition = nbLignes / (int)Math.Pow(couleurs.Length, (indiceColonne + 1)); + + for (int indiceLigne = 0; indiceLigne < jetons.GetLength(0); ++indiceLigne) + { + jetons[indiceLigne, indiceColonne] = new Jeton(couleurs[(indiceLigne / repetition) % couleurs.Length]); + } + } + + for (int i = 0; i < jetons.GetLength(0); ++i) + { + Code code = new Code(tailleCode); + for (int j = 0; j < jetons.GetLength(1); ++j) + { + code.AjouterJeton(jetons[i, j]!.Value); + } + codesPossibles!.Add(code); + } + } + + private bool EstCodePossible(Plateau plateau, Code code) + { + for(int i = 0; i < plateau.Taille; ++i) + { + Code sonCode = new Code(code.TailleMax); + for(int j = 0; j < code.TailleMax; ++j) + { + sonCode.AjouterJeton(plateau.Grille.Item1.ElementAt(i).ElementAt(j)); + } + + IReadOnlyList indicateurs = sonCode.Comparer(code); + + if ( + + indicateurs.Count(indicateur => indicateur == Indicateur.BonnePlace) != plateau.Grille.Item2.ElementAt(i).Count(indicateur => indicateur == Indicateur.BonnePlace) || + indicateurs.Count(indicateur => indicateur == Indicateur.BonneCouleur) != plateau.Grille.Item2.ElementAt(i).Count(indicateur => indicateur == Indicateur.BonneCouleur) + ) + return false; + } + + return true; + } + + private void SupprimerCodesImpossibles(Plateau plateau) + { + if (codesPossibles == null) + return; + + List indicesASupprimer = new List(); + + for(int i = codesPossibles.Count - 1; i >= 0; --i) + { + if(!EstCodePossible(plateau, codesPossibles.ElementAt(i))) + indicesASupprimer.Add(i); + } + + foreach (int indice in indicesASupprimer) + codesPossibles.RemoveAt(indice); + } + } +} diff --git a/Sources/CoreLibrary/Manageurs/Manageur.cs b/Sources/CoreLibrary/Manageurs/Manageur.cs index 7677e73..bcaf465 100644 --- a/Sources/CoreLibrary/Manageurs/Manageur.cs +++ b/Sources/CoreLibrary/Manageurs/Manageur.cs @@ -2,7 +2,6 @@ using CoreLibrary.Joueurs; using CoreLibrary.Regles; using CoreLibrary.Statistiques; -using System.Text.RegularExpressions; namespace CoreLibrary.Manageurs { @@ -103,11 +102,11 @@ namespace CoreLibrary.Manageurs { partie.PartieDemanderJoueur += (sender, e) => Sauvegarder(); partie.PartieDebutPartie += (sender, e) => Sauvegarder(); - partie.PartieNouveauTour += (sender, e) => Sauvegarder(); + partie.PartieDemanderJoueurJouer += (sender, e) => Sauvegarder(); partie.PartiePasserLaMain += (sender, e) => { - DemanderJoueur(e.Joueur).IncrementerStatistique(partie.Regles, Statistique.CoupJoue); + DemanderJoueurExistant(e.Joueur)?.IncrementerStatistique(partie.Regles, Statistique.CoupJoue); Sauvegarder(); }; @@ -115,29 +114,23 @@ namespace CoreLibrary.Manageurs { if (e.Gagnants.Count == 1) { - DemanderJoueur(e.Gagnants[0]).IncrementerStatistique(partie.Regles, Statistique.PartieGagnee); + DemanderJoueurExistant(e.Gagnants[0])?.IncrementerStatistique(partie.Regles, Statistique.PartieGagnee); } else { foreach (string gagnant in e.Gagnants) - DemanderJoueur(gagnant).IncrementerStatistique(partie.Regles, Statistique.PartieEgalite); + DemanderJoueurExistant(gagnant)?.IncrementerStatistique(partie.Regles, Statistique.PartieEgalite); } foreach (string perdant in e.Perdants) { - DemanderJoueur(perdant).IncrementerStatistique(partie.Regles, Statistique.PartiePerdue); + DemanderJoueurExistant(perdant)?.IncrementerStatistique(partie.Regles, Statistique.PartiePerdue); } - Sauvegarder(); }; } - /// - /// Demande un joueur avec son nom spécifié. - /// - /// Nom du joueur que l'on souhaite trouver. - /// Renvoie le joueur s'il a été trouvé. Sinon, crée un joueur avec le nom passé en paramètre. - public Joueur DemanderJoueur(string nom) + private Joueur? DemanderJoueurExistant(string nom) { foreach (Joueur joueur in joueurs) { @@ -147,11 +140,19 @@ namespace CoreLibrary.Manageurs } } - Joueur nouveauJoueur = new Joueur(nom); + return null; + } - joueurs.Add(nouveauJoueur); + public Joueur DemanderJoueur(string nom) + { + Joueur? joueur = DemanderJoueurExistant(nom); + if (joueur == null) + { + joueur = new Joueur(nom); + joueurs.Add(joueur); + } - return nouveauJoueur; + return joueur; } } } diff --git a/Sources/CoreLibrary/Partie.cs b/Sources/CoreLibrary/Partie.cs index 3c31839..889edd9 100644 --- a/Sources/CoreLibrary/Partie.cs +++ b/Sources/CoreLibrary/Partie.cs @@ -12,6 +12,7 @@ namespace CoreLibrary /// [DataContract] [KnownType(typeof(ReglesClassiques))] + [KnownType(typeof(ReglesDifficiles))] public class Partie : IEstPersistant { /// @@ -23,6 +24,7 @@ namespace CoreLibrary /// Evénement déclencher lors du commencement d'une partie. /// public event EventHandler? PartieDebutPartie; + public event EventHandler? PartieDemanderJoueurJouer; /// /// Evénement déclencher quand il s'agit d'un nouveau tour. @@ -49,33 +51,16 @@ namespace CoreLibrary /// Méthode pour déclencher l'événement de début de partie. /// private void QuandPartieDebutPartie() => PartieDebutPartie?.Invoke(this, new PartieDebutPartieEventArgs()); - - /// - /// Méthode pour déclencher l'événement de nouveau tour. - /// - private void QuandPartieNouveauTour() => PartieNouveauTour?.Invoke(this, new PartieNouveauTourEventArgs(Tour, joueurs.ElementAt(courant), plateaux.ElementAt(courant), new Code(Regles.TailleCode))); - - /// - /// Méthode pour déclencher l'événement pour passer la main. - /// - private void QuandPartiePasserLaMain() => PartiePasserLaMain?.Invoke(this, new PartiePasserLaMainEventArgs(joueurs.ElementAt(courant))); - - /// - /// Méthode pour déclencher l'événement si la partie est terminée. - /// - /// Liste des joueurs gagnants. - /// Liste des joueurs perdants. + private void QuandPartieDemanderJoueurJouer(Code code) => PartieDemanderJoueurJouer?.Invoke(this, new PartieDemanderJoueurJouerEventArgs(Tour, Joueurs.ElementAt(courant), plateaux.ElementAt(courant), code, joueurs[Joueurs.ElementAt(courant)])); + private void QuandPartieNouveauTour(Code code) => PartieNouveauTour?.Invoke(this, new PartieNouveauTourEventArgs(Tour, Joueurs.ElementAt(courant), plateaux.ElementAt(courant), code, joueurs[Joueurs.ElementAt(courant)])); + private void QuandPartiePasserLaMain() => PartiePasserLaMain?.Invoke(this, new PartiePasserLaMainEventArgs(Joueurs.ElementAt(courant))); private void QuandPartiePartieTerminee(IReadOnlyList gagnants, IReadOnlyList perdants) => PartiePartieTerminee?.Invoke(this, new PartiePartieTermineeEventArgs(gagnants, perdants)); /// /// Liste des joueurs. /// [DataMember] - private readonly List joueurs = new List(); - - /// - /// Liste des plateaux. - /// + private readonly Dictionary joueurs = new Dictionary(); [DataMember] private readonly List plateaux = new List(); @@ -85,14 +70,8 @@ namespace CoreLibrary [DataMember] private int courant = 0; - /// - /// La liste des joueurs remplit. - /// - public IReadOnlyList Joueurs => joueurs; - - /// - /// Booléen pour suivre le statut de la partie. - /// + public IReadOnlyList Joueurs => joueurs.Keys.ToList(); + public IReadOnlyList Robots => joueurs.Where(joueur => joueur.Value).Select(joueur => joueur.Key).ToList(); [DataMember] public bool Termine { get; private set; } = false; @@ -131,9 +110,13 @@ namespace CoreLibrary partie.PartieDemanderJoueur = null; partie.PartieDebutPartie = null; + partie.PartieDemanderJoueurJouer = null; partie.PartieNouveauTour = null; partie.PartiePasserLaMain = null; partie.PartiePartieTerminee = null; + + foreach (string joueur in Joueurs) + (joueurs[joueur] ? new Joueur(joueur) : new Robot(joueur)).JouerPartie(this); } /// @@ -165,9 +148,11 @@ namespace CoreLibrary /// L'instance de l'événement PlateauAjouterCodeEventArgs créée par Joueur. private void JoueurConnecte(object? sender, JoueurSeConnecterEventArgs e) { - joueurs.Add(e.Nom); + joueurs.Add(e.Joueur.Nom, e.Joueur.GetType().Equals(typeof(Joueur))); plateaux.Add(new Plateau(Regles.TailleCode, Regles.NbTour)); + e.Joueur.JouerPartie(this); + if (joueurs.Count < Regles.NbJoueurs) { DemanderJoueur(); @@ -201,7 +186,10 @@ namespace CoreLibrary /// private void NouveauTour() { - QuandPartieNouveauTour(); + Code code = new Code(Regles.TailleCode); + + QuandPartieDemanderJoueurJouer(code); + QuandPartieNouveauTour(code); } /// @@ -244,9 +232,9 @@ namespace CoreLibrary for (int i = 0; i < joueurs.Count; ++i) { if (plateaux.ElementAt(i).Victoire) - gagnants.Add(joueurs[i]); + gagnants.Add(Joueurs[i]); else - perdants.Add(joueurs[i]); + perdants.Add(Joueurs[i]); } QuandPartiePartieTerminee(gagnants, perdants); diff --git a/Sources/CoreLibrary/Persistance/PersistanceJSON.cs b/Sources/CoreLibrary/Persistance/PersistanceJSON.cs index 419ae9c..88cce08 100644 --- a/Sources/CoreLibrary/Persistance/PersistanceJSON.cs +++ b/Sources/CoreLibrary/Persistance/PersistanceJSON.cs @@ -47,6 +47,7 @@ namespace CoreLibrary.Persistance return []; Directory.SetCurrentDirectory(Path.Combine(Directory.GetCurrentDirectory(), nomDossier)); + var directory = Directory.GetCurrentDirectory(); if (!File.Exists(fichier)) return []; diff --git a/Sources/CoreLibrary/Regles/IRegles.cs b/Sources/CoreLibrary/Regles/IRegles.cs index 9bd3825..f97501b 100644 --- a/Sources/CoreLibrary/Regles/IRegles.cs +++ b/Sources/CoreLibrary/Regles/IRegles.cs @@ -5,10 +5,12 @@ /// public interface IRegles { + int Indice { get; } /// /// Obtient le nom des règles. /// string Nom { get; } + string Description { get; } /// /// Obtient le nombre de joueurs. @@ -24,5 +26,7 @@ /// Obtient la taille d'un code. /// int TailleCode { get; } + bool Equals(object? obj); + int GetHashCode(); } } diff --git a/Sources/CoreLibrary/Regles/ReglesClassiques.cs b/Sources/CoreLibrary/Regles/ReglesClassiques.cs index c571f64..87d514d 100644 --- a/Sources/CoreLibrary/Regles/ReglesClassiques.cs +++ b/Sources/CoreLibrary/Regles/ReglesClassiques.cs @@ -8,10 +8,12 @@ namespace CoreLibrary.Regles [DataContract] public class ReglesClassiques : IRegles { + public int Indice => 1; /// /// Chaîne de caractères pour le nom des règles classiques. /// public string Nom => "Règles classiques"; + public string Description => "Le but du jeu est de découvrir la combinaison. On génère aléatoirement deux combinaisons de 4 couleurs (six couleurs au total : jaune, bleu, rouge, vert, blanc et noir), une combinaison pour chaque joueur. Deux joueurs se battent pour trouver la combinaison en premier, il y a douze tours. Le premier joueur à trouver la combinaison à gagner, chaque joueur a le même nombre de coups à réaliser. Donc si le joueur un à trouvé la solution au bout de huit coups, le joueur deux doit finir son huitième coup. Si le joueur deux trouve la combinaison, les deux joueurs sont à égalité. Sinon, le joueur un gagne. Pour trouver la combinaison, les joueurs disposent de quatre indicateurs. Ces indicateurs sont quatre ronds qui représentent les quatre couleurs sélectionnées par le joueur. Un rond noir signifie qu’une couleur est à la bonne place, un rond blanc correspond à une mauvaise place et s'il n’y a pas d’indicateur aucune des couleurs n’est présentent dans la combinaison."; /// /// Nombre de joueurs autorisé pour les règles classiques. @@ -27,5 +29,7 @@ namespace CoreLibrary.Regles /// Taille du code maximale pour des règles classiques. /// public int TailleCode => 4; + public override bool Equals(object? obj) => obj == null ? false : obj is ReglesClassiques; + public override int GetHashCode() => Nom.GetHashCode(); } } diff --git a/Sources/CoreLibrary/Regles/ReglesDifficiles.cs b/Sources/CoreLibrary/Regles/ReglesDifficiles.cs new file mode 100644 index 0000000..75c0dfc --- /dev/null +++ b/Sources/CoreLibrary/Regles/ReglesDifficiles.cs @@ -0,0 +1,17 @@ +using System.Runtime.Serialization; + +namespace CoreLibrary.Regles +{ + [DataContract] + public class ReglesDifficiles : IRegles + { + public int Indice => 2; + public string Nom => "Règles difficiles"; + public string Description => "Le but du jeu est de découvrir la combinaison. On génère aléatoirement deux combinaisons de 6 couleurs (six couleurs au total : jaune, bleu, rouge, vert, blanc et noir), une combinaison pour chaque joueur. Deux joueurs se battent pour trouver la combinaison en premier, il y a douze tours. Le premier joueur à trouver la combinaison à gagner, chaque joueur a le même nombre de coups à réaliser. Donc si le joueur un à trouvé la solution au bout de huit coups, le joueur deux doit finir son huitième coup. Si le joueur deux trouve la combinaison, les deux joueurs sont à égalité. Sinon, le joueur un gagne. Pour trouver la combinaison, les joueurs disposent de quatre indicateurs. Ces indicateurs sont quatre ronds qui représentent les 6 couleurs sélectionnées par le joueur. Un rond noir signifie qu’une couleur est à la bonne place, un rond blanc correspond à une mauvaise place et s'il n’y a pas d’indicateur aucune des couleurs n’est présentent dans la combinaison."; + public int NbJoueurs => 2; + public int NbTour => 12; + public int TailleCode => 6; + public override bool Equals(object? obj) => obj == null ? false : obj is ReglesDifficiles; + public override int GetHashCode() => Nom.GetHashCode(); + } +} diff --git a/Sources/Fichiers/joueurs.json b/Sources/Fichiers/joueurs.json index 527ab1b..34c6e16 100644 --- a/Sources/Fichiers/joueurs.json +++ b/Sources/Fichiers/joueurs.json @@ -7,18 +7,27 @@ "Item1": { "__type": "ReglesClassiques:#CoreLibrary.Regles" }, - "Item2": 3 + "Item2": 0 }, - "Value": 6 + "Value": 2 }, { "Key": { "Item1": { "__type": "ReglesClassiques:#CoreLibrary.Regles" }, - "Item2": 3 + "Item2": 1 }, - "Value": 2 + "Value": 1 + }, + { + "Key": { + "Item1": { + "__type": "ReglesClassiques:#CoreLibrary.Regles" + }, + "Item2": 2 + }, + "Value": 0 }, { "Key": { @@ -27,7 +36,7 @@ }, "Item2": 3 }, - "Value": 2 + "Value": 5 } ] }, @@ -39,9 +48,27 @@ "Item1": { "__type": "ReglesClassiques:#CoreLibrary.Regles" }, - "Item2": 3 + "Item2": 0 }, - "Value": 6 + "Value": 1 + }, + { + "Key": { + "Item1": { + "__type": "ReglesClassiques:#CoreLibrary.Regles" + }, + "Item2": 1 + }, + "Value": 5 + }, + { + "Key": { + "Item1": { + "__type": "ReglesClassiques:#CoreLibrary.Regles" + }, + "Item2": 2 + }, + "Value": 2 }, { "Key": { @@ -50,7 +77,39 @@ }, "Item2": 3 }, - "Value": 1 + "Value": 10 + } + ] + }, + { + "Nom": "Camille", + "statistiques": [ + { + "Key": { + "Item1": { + "__type": "ReglesClassiques:#CoreLibrary.Regles" + }, + "Item2": 0 + }, + "Value": 3 + }, + { + "Key": { + "Item1": { + "__type": "ReglesClassiques:#CoreLibrary.Regles" + }, + "Item2": 1 + }, + "Value": 5 + }, + { + "Key": { + "Item1": { + "__type": "ReglesClassiques:#CoreLibrary.Regles" + }, + "Item2": 2 + }, + "Value": 6 }, { "Key": { @@ -59,7 +118,7 @@ }, "Item2": 3 }, - "Value": 1 + "Value": 50 } ] } diff --git a/Sources/Fichiers/parties.json b/Sources/Fichiers/parties.json index 80d1f59..de816af 100644 --- a/Sources/Fichiers/parties.json +++ b/Sources/Fichiers/parties.json @@ -1,64 +1,72 @@ [ { "Regles": { - "__type": "ReglesClassiques:#CoreLibrary.Regles" - }, - "Termine": false, - "Tour": 0, - "courant": 0, - "joueurs": [ ], - "plateaux": [ ] - }, - { - "Regles": { - "__type": "ReglesClassiques:#CoreLibrary.Regles" + "__type": "ReglesDifficiles:#CoreLibrary.Regles" }, - "Termine": false, - "Tour": 2, + "Termine": true, + "Tour": 6, "courant": 1, "joueurs": [ - "Céleste", - "Pauline" + { + "Key": "Naps 1", + "Value": false + }, + { + "Key": "Naps 2", + "Value": false + } ], "plateaux": [ { "TailleMax": 12, - "TailleMaxCode": 4, - "Victoire": false, + "TailleMaxCode": 6, + "Victoire": true, "codeSecret": { "Jetons": [ { - "Couleur": 0 + "Couleur": 3 }, { - "Couleur": 3 + "Couleur": 2 }, { - "Couleur": 3 + "Couleur": 1 + }, + { + "Couleur": 1 + }, + { + "Couleur": 5 }, { "Couleur": 5 } ], - "TailleMax": 4 + "TailleMax": 6 }, "codes": [ { "Jetons": [ { - "Couleur": 3 + "Couleur": 0 }, { - "Couleur": 3 + "Couleur": 0 }, { - "Couleur": 3 + "Couleur": 0 }, { - "Couleur": 3 + "Couleur": 0 + }, + { + "Couleur": 0 + }, + { + "Couleur": 0 } ], - "TailleMax": 4 + "TailleMax": 6 }, { "Jetons": [ @@ -71,45 +79,26 @@ { "Couleur": 1 }, + { + "Couleur": 1 + }, + { + "Couleur": 1 + }, { "Couleur": 1 } ], - "TailleMax": 4 - } - ], - "indicateurs": [ - [ - 0, - 0 - ], - [ ] - ] - }, - { - "TailleMax": 12, - "TailleMaxCode": 4, - "Victoire": false, - "codeSecret": { - "Jetons": [ - { - "Couleur": 0 - }, - { - "Couleur": 0 - }, - { - "Couleur": 2 - }, - { - "Couleur": 2 - } - ], - "TailleMax": 4 - }, - "codes": [ + "TailleMax": 6 + }, { "Jetons": [ + { + "Couleur": 1 + }, + { + "Couleur": 1 + }, { "Couleur": 2 }, @@ -123,50 +112,137 @@ "Couleur": 2 } ], - "TailleMax": 4 + "TailleMax": 6 + }, + { + "Jetons": [ + { + "Couleur": 2 + }, + { + "Couleur": 3 + }, + { + "Couleur": 1 + }, + { + "Couleur": 1 + }, + { + "Couleur": 3 + }, + { + "Couleur": 3 + } + ], + "TailleMax": 6 + }, + { + "Jetons": [ + { + "Couleur": 2 + }, + { + "Couleur": 3 + }, + { + "Couleur": 4 + }, + { + "Couleur": 4 + }, + { + "Couleur": 1 + }, + { + "Couleur": 1 + } + ], + "TailleMax": 6 + }, + { + "Jetons": [ + { + "Couleur": 3 + }, + { + "Couleur": 2 + }, + { + "Couleur": 1 + }, + { + "Couleur": 1 + }, + { + "Couleur": 5 + }, + { + "Couleur": 5 + } + ], + "TailleMax": 6 } ], "indicateurs": [ + [ ], + [ + 0, + 0 + ], + [ + 1, + 1, + 1 + ], + [ + 0, + 0, + 1, + 1 + ], [ + 1, + 1, + 1, + 1 + ], + [ + 0, + 0, + 0, + 0, 0, 0 ] ] - } - ] - }, - { - "Regles": { - "__type": "ReglesClassiques:#CoreLibrary.Regles" - }, - "Termine": false, - "Tour": 8, - "courant": 1, - "joueurs": [ - "Céleste", - "Pauline" - ], - "plateaux": [ + }, { "TailleMax": 12, - "TailleMaxCode": 4, + "TailleMaxCode": 6, "Victoire": false, "codeSecret": { "Jetons": [ { - "Couleur": 2 + "Couleur": 5 }, { - "Couleur": 0 + "Couleur": 5 + }, + { + "Couleur": 5 }, { "Couleur": 2 }, { - "Couleur": 4 + "Couleur": 2 + }, + { + "Couleur": 5 } ], - "TailleMax": 4 + "TailleMax": 6 }, "codes": [ { @@ -180,11 +256,17 @@ { "Couleur": 0 }, + { + "Couleur": 0 + }, + { + "Couleur": 0 + }, { "Couleur": 0 } ], - "TailleMax": 4 + "TailleMax": 6 }, { "Jetons": [ @@ -197,28 +279,40 @@ { "Couleur": 1 }, + { + "Couleur": 1 + }, + { + "Couleur": 1 + }, { "Couleur": 1 } ], - "TailleMax": 4 + "TailleMax": 6 }, { "Jetons": [ { - "Couleur": 3 + "Couleur": 2 }, { - "Couleur": 3 + "Couleur": 2 }, { - "Couleur": 3 + "Couleur": 2 }, { - "Couleur": 3 + "Couleur": 2 + }, + { + "Couleur": 2 + }, + { + "Couleur": 2 } ], - "TailleMax": 4 + "TailleMax": 6 }, { "Jetons": [ @@ -229,13 +323,19 @@ "Couleur": 2 }, { - "Couleur": 2 + "Couleur": 3 }, { - "Couleur": 2 + "Couleur": 3 + }, + { + "Couleur": 3 + }, + { + "Couleur": 3 } ], - "TailleMax": 4 + "TailleMax": 6 }, { "Jetons": [ @@ -245,6 +345,12 @@ { "Couleur": 4 }, + { + "Couleur": 2 + }, + { + "Couleur": 2 + }, { "Couleur": 4 }, @@ -252,64 +358,33 @@ "Couleur": 4 } ], - "TailleMax": 4 + "TailleMax": 6 }, { "Jetons": [ { - "Couleur": 0 + "Couleur": 5 }, { - "Couleur": 0 + "Couleur": 5 }, { - "Couleur": 0 + "Couleur": 2 }, { - "Couleur": 0 - } - ], - "TailleMax": 4 - }, - { - "Jetons": [ - { - "Couleur": 0 - }, - { - "Couleur": 0 - }, - { - "Couleur": 0 - }, - { - "Couleur": 0 - } - ], - "TailleMax": 4 - }, - { - "Jetons": [ - { - "Couleur": 3 - }, - { - "Couleur": 3 + "Couleur": 5 }, { - "Couleur": 3 + "Couleur": 2 }, { - "Couleur": 3 + "Couleur": 5 } ], - "TailleMax": 4 + "TailleMax": 6 } ], "indicateurs": [ - [ - 0 - ], [ ], [ ], [ @@ -317,72 +392,93 @@ 0 ], [ - 0 + 1, + 1 ], [ - 0 + 0, + 1 ], [ - 0 - ], - [ ] + 0, + 0, + 0, + 0, + 1, + 1 + ] ] + } + ] + }, + { + "Regles": { + "__type": "ReglesDifficiles:#CoreLibrary.Regles" + }, + "Termine": true, + "Tour": 6, + "courant": 1, + "joueurs": [ + { + "Key": "Naps 1", + "Value": false }, + { + "Key": "Naps 2", + "Value": false + } + ], + "plateaux": [ { "TailleMax": 12, - "TailleMaxCode": 4, - "Victoire": false, + "TailleMaxCode": 6, + "Victoire": true, "codeSecret": { "Jetons": [ { - "Couleur": 2 + "Couleur": 1 }, { - "Couleur": 2 + "Couleur": 1 }, { - "Couleur": 1 + "Couleur": 3 }, { - "Couleur": 2 + "Couleur": 4 + }, + { + "Couleur": 0 + }, + { + "Couleur": 4 } ], - "TailleMax": 4 + "TailleMax": 6 }, "codes": [ { "Jetons": [ { - "Couleur": 4 - }, - { - "Couleur": 4 + "Couleur": 0 }, { - "Couleur": 4 + "Couleur": 0 }, { - "Couleur": 4 - } - ], - "TailleMax": 4 - }, - { - "Jetons": [ - { - "Couleur": 2 + "Couleur": 0 }, { - "Couleur": 2 + "Couleur": 0 }, { - "Couleur": 2 + "Couleur": 0 }, { - "Couleur": 2 + "Couleur": 0 } ], - "TailleMax": 4 + "TailleMax": 6 }, { "Jetons": [ @@ -390,16 +486,22 @@ "Couleur": 0 }, { - "Couleur": 0 + "Couleur": 1 }, { - "Couleur": 0 + "Couleur": 1 }, { - "Couleur": 0 + "Couleur": 1 + }, + { + "Couleur": 1 + }, + { + "Couleur": 1 } ], - "TailleMax": 4 + "TailleMax": 6 }, { "Jetons": [ @@ -407,192 +509,358 @@ "Couleur": 1 }, { - "Couleur": 1 + "Couleur": 0 }, { "Couleur": 1 }, { - "Couleur": 1 + "Couleur": 2 + }, + { + "Couleur": 2 + }, + { + "Couleur": 2 } ], - "TailleMax": 4 + "TailleMax": 6 }, { "Jetons": [ { - "Couleur": 5 + "Couleur": 1 }, { - "Couleur": 5 + "Couleur": 1 }, { - "Couleur": 5 + "Couleur": 0 }, { - "Couleur": 5 + "Couleur": 3 + }, + { + "Couleur": 3 + }, + { + "Couleur": 3 } ], - "TailleMax": 4 + "TailleMax": 6 }, { "Jetons": [ { - "Couleur": 2 + "Couleur": 1 }, { - "Couleur": 2 + "Couleur": 1 }, { - "Couleur": 2 + "Couleur": 3 }, { - "Couleur": 2 + "Couleur": 0 + }, + { + "Couleur": 4 + }, + { + "Couleur": 4 } ], - "TailleMax": 4 + "TailleMax": 6 }, { "Jetons": [ { - "Couleur": 4 + "Couleur": 1 }, { - "Couleur": 4 + "Couleur": 1 + }, + { + "Couleur": 3 }, { "Couleur": 4 }, + { + "Couleur": 0 + }, { "Couleur": 4 } ], - "TailleMax": 4 + "TailleMax": 6 } ], "indicateurs": [ - [ ], + [ + 0 + ], [ 0, + 1, + 1 + ], + [ 0, - 0 + 1, + 1 ], - [ ], [ - 0 + 0, + 0, + 1, + 1 ], - [ ], [ 0, 0, - 0 + 0, + 0, + 1, + 1 ], - [ ] + [ + 0, + 0, + 0, + 0, + 0, + 0 + ] ] - } - ] - }, - { - "Regles": { - "__type": "ReglesClassiques:#CoreLibrary.Regles" - }, - "Termine": false, - "Tour": 1, - "courant": 0, - "joueurs": [ - "Joueur 1", - "Joueur 2" - ], - "plateaux": [ + }, { "TailleMax": 12, - "TailleMaxCode": 4, + "TailleMaxCode": 6, "Victoire": false, "codeSecret": { "Jetons": [ { - "Couleur": 2 - }, - { - "Couleur": 4 + "Couleur": 0 }, { "Couleur": 5 }, { "Couleur": 2 - } - ], - "TailleMax": 4 - }, - "codes": [ ], - "indicateurs": [ ] - }, - { - "TailleMax": 12, - "TailleMaxCode": 4, - "Victoire": false, - "codeSecret": { - "Jetons": [ - { - "Couleur": 1 }, { - "Couleur": 4 + "Couleur": 3 }, { "Couleur": 2 }, { - "Couleur": 4 + "Couleur": 2 } ], - "TailleMax": 4 + "TailleMax": 6 }, - "codes": [ ], - "indicateurs": [ ] - } - ] - }, - { - "Regles": { - "__type": "ReglesClassiques:#CoreLibrary.Regles" - }, - "Termine": false, - "Tour": 1, - "courant": 0, - "joueurs": [ - "Céleste", - "Pauline" - ], - "plateaux": [ - { - "TailleMax": 12, - "TailleMaxCode": 4, - "Victoire": false, - "codeSecret": { - "Jetons": [ - { - "Couleur": 3 - }, - { - "Couleur": 3 - }, - { - "Couleur": 4 - }, - { - "Couleur": 3 - } + "codes": [ + { + "Jetons": [ + { + "Couleur": 0 + }, + { + "Couleur": 0 + }, + { + "Couleur": 0 + }, + { + "Couleur": 0 + }, + { + "Couleur": 0 + }, + { + "Couleur": 0 + } + ], + "TailleMax": 6 + }, + { + "Jetons": [ + { + "Couleur": 0 + }, + { + "Couleur": 1 + }, + { + "Couleur": 1 + }, + { + "Couleur": 1 + }, + { + "Couleur": 1 + }, + { + "Couleur": 1 + } + ], + "TailleMax": 6 + }, + { + "Jetons": [ + { + "Couleur": 0 + }, + { + "Couleur": 2 + }, + { + "Couleur": 2 + }, + { + "Couleur": 2 + }, + { + "Couleur": 2 + }, + { + "Couleur": 2 + } + ], + "TailleMax": 6 + }, + { + "Jetons": [ + { + "Couleur": 0 + }, + { + "Couleur": 2 + }, + { + "Couleur": 2 + }, + { + "Couleur": 2 + }, + { + "Couleur": 3 + }, + { + "Couleur": 3 + } + ], + "TailleMax": 6 + }, + { + "Jetons": [ + { + "Couleur": 0 + }, + { + "Couleur": 2 + }, + { + "Couleur": 3 + }, + { + "Couleur": 4 + }, + { + "Couleur": 2 + }, + { + "Couleur": 2 + } + ], + "TailleMax": 6 + }, + { + "Jetons": [ + { + "Couleur": 0 + }, + { + "Couleur": 3 + }, + { + "Couleur": 2 + }, + { + "Couleur": 5 + }, + { + "Couleur": 2 + }, + { + "Couleur": 2 + } + ], + "TailleMax": 6 + } + ], + "indicateurs": [ + [ + 0 ], - "TailleMax": 4 - }, - "codes": [ ], - "indicateurs": [ ] + [ + 0 + ], + [ + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 1, + 1, + 1 + ], + [ + 0, + 0, + 0, + 1, + 1 + ], + [ + 0, + 0, + 0, + 0, + 1, + 1 + ] + ] + } + ] + }, + { + "Regles": { + "__type": "ReglesDifficiles:#CoreLibrary.Regles" + }, + "Termine": true, + "Tour": 5, + "courant": 1, + "joueurs": [ + { + "Key": "Naps 1", + "Value": false }, + { + "Key": "Naps 2", + "Value": false + } + ], + "plateaux": [ { "TailleMax": 12, - "TailleMaxCode": 4, + "TailleMaxCode": 6, "Victoire": false, "codeSecret": { "Jetons": [ @@ -600,19 +868,1710 @@ "Couleur": 4 }, { - "Couleur": 0 + "Couleur": 2 + }, + { + "Couleur": 4 }, { "Couleur": 3 }, { - "Couleur": 4 + "Couleur": 0 + }, + { + "Couleur": 5 } ], - "TailleMax": 4 + "TailleMax": 6 }, - "codes": [ ], - "indicateurs": [ ] + "codes": [ + { + "Jetons": [ + { + "Couleur": 0 + }, + { + "Couleur": 0 + }, + { + "Couleur": 0 + }, + { + "Couleur": 0 + }, + { + "Couleur": 0 + }, + { + "Couleur": 0 + } + ], + "TailleMax": 6 + }, + { + "Jetons": [ + { + "Couleur": 0 + }, + { + "Couleur": 1 + }, + { + "Couleur": 1 + }, + { + "Couleur": 1 + }, + { + "Couleur": 1 + }, + { + "Couleur": 1 + } + ], + "TailleMax": 6 + }, + { + "Jetons": [ + { + "Couleur": 2 + }, + { + "Couleur": 0 + }, + { + "Couleur": 2 + }, + { + "Couleur": 2 + }, + { + "Couleur": 2 + }, + { + "Couleur": 2 + } + ], + "TailleMax": 6 + }, + { + "Jetons": [ + { + "Couleur": 3 + }, + { + "Couleur": 2 + }, + { + "Couleur": 0 + }, + { + "Couleur": 3 + }, + { + "Couleur": 3 + }, + { + "Couleur": 3 + } + ], + "TailleMax": 6 + }, + { + "Jetons": [ + { + "Couleur": 3 + }, + { + "Couleur": 2 + }, + { + "Couleur": 4 + }, + { + "Couleur": 0 + }, + { + "Couleur": 4 + }, + { + "Couleur": 4 + } + ], + "TailleMax": 6 + } + ], + "indicateurs": [ + [ + 0 + ], + [ + 1 + ], + [ + 1, + 1 + ], + [ + 0, + 0, + 1 + ], + [ + 0, + 0, + 1, + 1, + 1 + ] + ] + }, + { + "TailleMax": 12, + "TailleMaxCode": 6, + "Victoire": true, + "codeSecret": { + "Jetons": [ + { + "Couleur": 0 + }, + { + "Couleur": 3 + }, + { + "Couleur": 0 + }, + { + "Couleur": 4 + }, + { + "Couleur": 0 + }, + { + "Couleur": 4 + } + ], + "TailleMax": 6 + }, + "codes": [ + { + "Jetons": [ + { + "Couleur": 0 + }, + { + "Couleur": 0 + }, + { + "Couleur": 0 + }, + { + "Couleur": 0 + }, + { + "Couleur": 0 + }, + { + "Couleur": 0 + } + ], + "TailleMax": 6 + }, + { + "Jetons": [ + { + "Couleur": 0 + }, + { + "Couleur": 0 + }, + { + "Couleur": 0 + }, + { + "Couleur": 1 + }, + { + "Couleur": 1 + }, + { + "Couleur": 1 + } + ], + "TailleMax": 6 + }, + { + "Jetons": [ + { + "Couleur": 0 + }, + { + "Couleur": 0 + }, + { + "Couleur": 2 + }, + { + "Couleur": 0 + }, + { + "Couleur": 2 + }, + { + "Couleur": 2 + } + ], + "TailleMax": 6 + }, + { + "Jetons": [ + { + "Couleur": 0 + }, + { + "Couleur": 3 + }, + { + "Couleur": 0 + }, + { + "Couleur": 3 + }, + { + "Couleur": 0 + }, + { + "Couleur": 3 + } + ], + "TailleMax": 6 + }, + { + "Jetons": [ + { + "Couleur": 0 + }, + { + "Couleur": 3 + }, + { + "Couleur": 0 + }, + { + "Couleur": 4 + }, + { + "Couleur": 0 + }, + { + "Couleur": 4 + } + ], + "TailleMax": 6 + } + ], + "indicateurs": [ + [ + 0, + 0, + 0 + ], + [ + 0, + 0, + 1 + ], + [ + 0, + 1, + 1 + ], + [ + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0 + ] + ] + } + ] + }, + { + "Regles": { + "__type": "ReglesDifficiles:#CoreLibrary.Regles" + }, + "Termine": true, + "Tour": 7, + "courant": 1, + "joueurs": [ + { + "Key": "Naps 3", + "Value": false + }, + { + "Key": "Naps 4", + "Value": false + } + ], + "plateaux": [ + { + "TailleMax": 12, + "TailleMaxCode": 6, + "Victoire": true, + "codeSecret": { + "Jetons": [ + { + "Couleur": 0 + }, + { + "Couleur": 0 + }, + { + "Couleur": 5 + }, + { + "Couleur": 5 + }, + { + "Couleur": 0 + }, + { + "Couleur": 3 + } + ], + "TailleMax": 6 + }, + "codes": [ + { + "Jetons": [ + { + "Couleur": 0 + }, + { + "Couleur": 0 + }, + { + "Couleur": 0 + }, + { + "Couleur": 0 + }, + { + "Couleur": 0 + }, + { + "Couleur": 0 + } + ], + "TailleMax": 6 + }, + { + "Jetons": [ + { + "Couleur": 0 + }, + { + "Couleur": 0 + }, + { + "Couleur": 0 + }, + { + "Couleur": 1 + }, + { + "Couleur": 1 + }, + { + "Couleur": 1 + } + ], + "TailleMax": 6 + }, + { + "Jetons": [ + { + "Couleur": 0 + }, + { + "Couleur": 0 + }, + { + "Couleur": 2 + }, + { + "Couleur": 0 + }, + { + "Couleur": 2 + }, + { + "Couleur": 2 + } + ], + "TailleMax": 6 + }, + { + "Jetons": [ + { + "Couleur": 0 + }, + { + "Couleur": 0 + }, + { + "Couleur": 3 + }, + { + "Couleur": 3 + }, + { + "Couleur": 0 + }, + { + "Couleur": 3 + } + ], + "TailleMax": 6 + }, + { + "Jetons": [ + { + "Couleur": 0 + }, + { + "Couleur": 0 + }, + { + "Couleur": 3 + }, + { + "Couleur": 4 + }, + { + "Couleur": 0 + }, + { + "Couleur": 4 + } + ], + "TailleMax": 6 + }, + { + "Jetons": [ + { + "Couleur": 0 + }, + { + "Couleur": 0 + }, + { + "Couleur": 5 + }, + { + "Couleur": 3 + }, + { + "Couleur": 0 + }, + { + "Couleur": 5 + } + ], + "TailleMax": 6 + }, + { + "Jetons": [ + { + "Couleur": 0 + }, + { + "Couleur": 0 + }, + { + "Couleur": 5 + }, + { + "Couleur": 5 + }, + { + "Couleur": 0 + }, + { + "Couleur": 3 + } + ], + "TailleMax": 6 + } + ], + "indicateurs": [ + [ + 0, + 0, + 0 + ], + [ + 0, + 0, + 1 + ], + [ + 0, + 0, + 1 + ], + [ + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1 + ], + [ + 0, + 0, + 0, + 0, + 1, + 1 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0 + ] + ] + }, + { + "TailleMax": 12, + "TailleMaxCode": 6, + "Victoire": false, + "codeSecret": { + "Jetons": [ + { + "Couleur": 5 + }, + { + "Couleur": 5 + }, + { + "Couleur": 4 + }, + { + "Couleur": 1 + }, + { + "Couleur": 0 + }, + { + "Couleur": 2 + } + ], + "TailleMax": 6 + }, + "codes": [ + { + "Jetons": [ + { + "Couleur": 0 + }, + { + "Couleur": 0 + }, + { + "Couleur": 0 + }, + { + "Couleur": 0 + }, + { + "Couleur": 0 + }, + { + "Couleur": 0 + } + ], + "TailleMax": 6 + }, + { + "Jetons": [ + { + "Couleur": 0 + }, + { + "Couleur": 1 + }, + { + "Couleur": 1 + }, + { + "Couleur": 1 + }, + { + "Couleur": 1 + }, + { + "Couleur": 1 + } + ], + "TailleMax": 6 + }, + { + "Jetons": [ + { + "Couleur": 2 + }, + { + "Couleur": 0 + }, + { + "Couleur": 1 + }, + { + "Couleur": 2 + }, + { + "Couleur": 2 + }, + { + "Couleur": 2 + } + ], + "TailleMax": 6 + }, + { + "Jetons": [ + { + "Couleur": 2 + }, + { + "Couleur": 1 + }, + { + "Couleur": 0 + }, + { + "Couleur": 3 + }, + { + "Couleur": 3 + }, + { + "Couleur": 3 + } + ], + "TailleMax": 6 + }, + { + "Jetons": [ + { + "Couleur": 4 + }, + { + "Couleur": 0 + }, + { + "Couleur": 2 + }, + { + "Couleur": 1 + }, + { + "Couleur": 4 + }, + { + "Couleur": 4 + } + ], + "TailleMax": 6 + }, + { + "Jetons": [ + { + "Couleur": 4 + }, + { + "Couleur": 2 + }, + { + "Couleur": 1 + }, + { + "Couleur": 0 + }, + { + "Couleur": 5 + }, + { + "Couleur": 5 + } + ], + "TailleMax": 6 + }, + { + "Jetons": [ + { + "Couleur": 5 + }, + { + "Couleur": 4 + }, + { + "Couleur": 5 + }, + { + "Couleur": 1 + }, + { + "Couleur": 0 + }, + { + "Couleur": 2 + } + ], + "TailleMax": 6 + } + ], + "indicateurs": [ + [ + 0 + ], + [ + 0, + 1 + ], + [ + 0, + 1, + 1 + ], + [ + 1, + 1, + 1 + ], + [ + 0, + 1, + 1, + 1 + ], + [ + 1, + 1, + 1, + 1, + 1, + 1 + ], + [ + 0, + 0, + 0, + 0, + 1, + 1 + ] + ] + } + ] + }, + { + "Regles": { + "__type": "ReglesClassiques:#CoreLibrary.Regles" + }, + "Termine": false, + "Tour": 0, + "courant": 0, + "joueurs": [ + { + "Key": "Naps 5", + "Value": false + } + ], + "plateaux": [ + { + "TailleMax": 12, + "TailleMaxCode": 4, + "Victoire": false, + "codeSecret": { + "Jetons": [ + { + "Couleur": 1 + }, + { + "Couleur": 1 + }, + { + "Couleur": 0 + }, + { + "Couleur": 3 + } + ], + "TailleMax": 4 + }, + "codes": [ ], + "indicateurs": [ ] + } + ] + }, + { + "Regles": { + "__type": "ReglesClassiques:#CoreLibrary.Regles" + }, + "Termine": true, + "Tour": 4, + "courant": 1, + "joueurs": [ + { + "Key": "Naps 6", + "Value": false + }, + { + "Key": "Céleste", + "Value": true + } + ], + "plateaux": [ + { + "TailleMax": 12, + "TailleMaxCode": 4, + "Victoire": true, + "codeSecret": { + "Jetons": [ + { + "Couleur": 0 + }, + { + "Couleur": 1 + }, + { + "Couleur": 0 + }, + { + "Couleur": 3 + } + ], + "TailleMax": 4 + }, + "codes": [ + { + "Jetons": [ + { + "Couleur": 0 + }, + { + "Couleur": 0 + }, + { + "Couleur": 0 + }, + { + "Couleur": 0 + } + ], + "TailleMax": 4 + }, + { + "Jetons": [ + { + "Couleur": 0 + }, + { + "Couleur": 0 + }, + { + "Couleur": 1 + }, + { + "Couleur": 1 + } + ], + "TailleMax": 4 + }, + { + "Jetons": [ + { + "Couleur": 0 + }, + { + "Couleur": 1 + }, + { + "Couleur": 0 + }, + { + "Couleur": 2 + } + ], + "TailleMax": 4 + }, + { + "Jetons": [ + { + "Couleur": 0 + }, + { + "Couleur": 1 + }, + { + "Couleur": 0 + }, + { + "Couleur": 3 + } + ], + "TailleMax": 4 + } + ], + "indicateurs": [ + [ + 0, + 0 + ], + [ + 0, + 1, + 1 + ], + [ + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0 + ] + ] + }, + { + "TailleMax": 12, + "TailleMaxCode": 4, + "Victoire": false, + "codeSecret": { + "Jetons": [ + { + "Couleur": 5 + }, + { + "Couleur": 5 + }, + { + "Couleur": 1 + }, + { + "Couleur": 5 + } + ], + "TailleMax": 4 + }, + "codes": [ + { + "Jetons": [ + { + "Couleur": 0 + }, + { + "Couleur": 0 + }, + { + "Couleur": 0 + }, + { + "Couleur": 0 + } + ], + "TailleMax": 4 + }, + { + "Jetons": [ + { + "Couleur": 1 + }, + { + "Couleur": 1 + }, + { + "Couleur": 1 + }, + { + "Couleur": 1 + } + ], + "TailleMax": 4 + }, + { + "Jetons": [ + { + "Couleur": 2 + }, + { + "Couleur": 2 + }, + { + "Couleur": 2 + }, + { + "Couleur": 2 + } + ], + "TailleMax": 4 + }, + { + "Jetons": [ + { + "Couleur": 3 + }, + { + "Couleur": 3 + }, + { + "Couleur": 3 + }, + { + "Couleur": 3 + } + ], + "TailleMax": 4 + } + ], + "indicateurs": [ + [ ], + [ + 0 + ], + [ ], + [ ] + ] + } + ] + }, + { + "Regles": { + "__type": "ReglesClassiques:#CoreLibrary.Regles" + }, + "Termine": false, + "Tour": 1, + "courant": 1, + "joueurs": [ + { + "Key": "Robot", + "Value": true + }, + { + "Key": "Céleste", + "Value": true + } + ], + "plateaux": [ + { + "TailleMax": 12, + "TailleMaxCode": 4, + "Victoire": false, + "codeSecret": { + "Jetons": [ + { + "Couleur": 0 + }, + { + "Couleur": 1 + }, + { + "Couleur": 2 + }, + { + "Couleur": 0 + } + ], + "TailleMax": 4 + }, + "codes": [ + { + "Jetons": [ + { + "Couleur": 0 + }, + { + "Couleur": 0 + }, + { + "Couleur": 0 + }, + { + "Couleur": 0 + } + ], + "TailleMax": 4 + } + ], + "indicateurs": [ + [ + 0, + 0 + ] + ] + }, + { + "TailleMax": 12, + "TailleMaxCode": 4, + "Victoire": false, + "codeSecret": { + "Jetons": [ + { + "Couleur": 1 + }, + { + "Couleur": 0 + }, + { + "Couleur": 2 + }, + { + "Couleur": 2 + } + ], + "TailleMax": 4 + }, + "codes": [ ], + "indicateurs": [ ] + } + ] + }, + { + "Regles": { + "__type": "ReglesClassiques:#CoreLibrary.Regles" + }, + "Termine": false, + "Tour": 3, + "courant": 0, + "joueurs": [ + { + "Key": "Céleste", + "Value": true + }, + { + "Key": "Naps 1", + "Value": false + } + ], + "plateaux": [ + { + "TailleMax": 12, + "TailleMaxCode": 4, + "Victoire": false, + "codeSecret": { + "Jetons": [ + { + "Couleur": 3 + }, + { + "Couleur": 3 + }, + { + "Couleur": 1 + }, + { + "Couleur": 1 + } + ], + "TailleMax": 4 + }, + "codes": [ + { + "Jetons": [ + { + "Couleur": 0 + }, + { + "Couleur": 0 + }, + { + "Couleur": 0 + }, + { + "Couleur": 0 + } + ], + "TailleMax": 4 + }, + { + "Jetons": [ + { + "Couleur": 0 + }, + { + "Couleur": 0 + }, + { + "Couleur": 0 + }, + { + "Couleur": 0 + } + ], + "TailleMax": 4 + } + ], + "indicateurs": [ + [ ], + [ ] + ] + }, + { + "TailleMax": 12, + "TailleMaxCode": 4, + "Victoire": false, + "codeSecret": { + "Jetons": [ + { + "Couleur": 3 + }, + { + "Couleur": 3 + }, + { + "Couleur": 2 + }, + { + "Couleur": 0 + } + ], + "TailleMax": 4 + }, + "codes": [ + { + "Jetons": [ + { + "Couleur": 0 + }, + { + "Couleur": 0 + }, + { + "Couleur": 0 + }, + { + "Couleur": 0 + } + ], + "TailleMax": 4 + }, + { + "Jetons": [ + { + "Couleur": 0 + }, + { + "Couleur": 1 + }, + { + "Couleur": 1 + }, + { + "Couleur": 1 + } + ], + "TailleMax": 4 + } + ], + "indicateurs": [ + [ + 0 + ], + [ + 1 + ] + ] + } + ] + }, + { + "Regles": { + "__type": "ReglesDifficiles:#CoreLibrary.Regles" + }, + "Termine": true, + "Tour": 5, + "courant": 1, + "joueurs": [ + { + "Key": "Naps 1", + "Value": false + }, + { + "Key": "Naps 2", + "Value": false + } + ], + "plateaux": [ + { + "TailleMax": 12, + "TailleMaxCode": 6, + "Victoire": false, + "codeSecret": { + "Jetons": [ + { + "Couleur": 0 + }, + { + "Couleur": 2 + }, + { + "Couleur": 4 + }, + { + "Couleur": 4 + }, + { + "Couleur": 5 + }, + { + "Couleur": 3 + } + ], + "TailleMax": 6 + }, + "codes": [ + { + "Jetons": [ + { + "Couleur": 0 + }, + { + "Couleur": 0 + }, + { + "Couleur": 0 + }, + { + "Couleur": 0 + }, + { + "Couleur": 0 + }, + { + "Couleur": 0 + } + ], + "TailleMax": 6 + }, + { + "Jetons": [ + { + "Couleur": 0 + }, + { + "Couleur": 1 + }, + { + "Couleur": 1 + }, + { + "Couleur": 1 + }, + { + "Couleur": 1 + }, + { + "Couleur": 1 + } + ], + "TailleMax": 6 + }, + { + "Jetons": [ + { + "Couleur": 0 + }, + { + "Couleur": 2 + }, + { + "Couleur": 2 + }, + { + "Couleur": 2 + }, + { + "Couleur": 2 + }, + { + "Couleur": 2 + } + ], + "TailleMax": 6 + }, + { + "Jetons": [ + { + "Couleur": 0 + }, + { + "Couleur": 2 + }, + { + "Couleur": 3 + }, + { + "Couleur": 3 + }, + { + "Couleur": 3 + }, + { + "Couleur": 3 + } + ], + "TailleMax": 6 + }, + { + "Jetons": [ + { + "Couleur": 0 + }, + { + "Couleur": 2 + }, + { + "Couleur": 3 + }, + { + "Couleur": 4 + }, + { + "Couleur": 4 + }, + { + "Couleur": 4 + } + ], + "TailleMax": 6 + } + ], + "indicateurs": [ + [ + 0 + ], + [ + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1, + 1 + ] + ] + }, + { + "TailleMax": 12, + "TailleMaxCode": 6, + "Victoire": true, + "codeSecret": { + "Jetons": [ + { + "Couleur": 0 + }, + { + "Couleur": 0 + }, + { + "Couleur": 4 + }, + { + "Couleur": 0 + }, + { + "Couleur": 2 + }, + { + "Couleur": 1 + } + ], + "TailleMax": 6 + }, + "codes": [ + { + "Jetons": [ + { + "Couleur": 0 + }, + { + "Couleur": 0 + }, + { + "Couleur": 0 + }, + { + "Couleur": 0 + }, + { + "Couleur": 0 + }, + { + "Couleur": 0 + } + ], + "TailleMax": 6 + }, + { + "Jetons": [ + { + "Couleur": 0 + }, + { + "Couleur": 0 + }, + { + "Couleur": 0 + }, + { + "Couleur": 1 + }, + { + "Couleur": 1 + }, + { + "Couleur": 1 + } + ], + "TailleMax": 6 + }, + { + "Jetons": [ + { + "Couleur": 0 + }, + { + "Couleur": 0 + }, + { + "Couleur": 2 + }, + { + "Couleur": 0 + }, + { + "Couleur": 1 + }, + { + "Couleur": 2 + } + ], + "TailleMax": 6 + }, + { + "Jetons": [ + { + "Couleur": 0 + }, + { + "Couleur": 0 + }, + { + "Couleur": 2 + }, + { + "Couleur": 1 + }, + { + "Couleur": 0 + }, + { + "Couleur": 3 + } + ], + "TailleMax": 6 + }, + { + "Jetons": [ + { + "Couleur": 0 + }, + { + "Couleur": 0 + }, + { + "Couleur": 4 + }, + { + "Couleur": 0 + }, + { + "Couleur": 2 + }, + { + "Couleur": 1 + } + ], + "TailleMax": 6 + } + ], + "indicateurs": [ + [ + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1 + ], + [ + 0, + 0, + 0, + 1, + 1 + ], + [ + 0, + 0, + 1, + 1, + 1 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0 + ] + ] } ] } diff --git a/Sources/MauiSpark/Convertisseurs/CouleurVersCouleurMAUI.cs b/Sources/MauiSpark/Convertisseurs/CouleurVersCouleurMAUI.cs index 23aa8b3..065c75c 100644 --- a/Sources/MauiSpark/Convertisseurs/CouleurVersCouleurMAUI.cs +++ b/Sources/MauiSpark/Convertisseurs/CouleurVersCouleurMAUI.cs @@ -3,15 +3,50 @@ using System.Globalization; namespace MauiSpark.Convertisseurs { + /// + /// Convertisseur de couleur qui implémente l'interface IValueConverter. + /// Cette classe permet de convertir des valeurs de type Couleur en valeurs de type Color (et vice versa). + /// public class CouleurVersCouleurMAUI : IValueConverter { + /// + /// Obtient la couleur rouge. + /// public static Color Rouge { get; private set; } = Color.FromArgb("#F75353"); + + /// + /// Obtient la couleur verte. + /// public static Color Vert { get; private set; } = Color.FromArgb("#53F769"); + + /// + /// Obtient la couleur bleue. + /// public static Color Bleu { get; private set; } = Color.FromArgb("#535AF3"); + + /// + /// Obtient la couleur jaune. + /// public static Color Jaune { get; private set; } = Color.FromArgb("#E9FE67"); + + /// + /// Obtient la couleur noire. + /// public static Color Noir { get; private set; } = Color.FromArgb("#241E1E"); + + /// + /// Obtient la couleur blanche. + /// public static Color Blanc { get; private set; } = Color.FromArgb("#FFFFFF"); + /// + /// Convertit une valeur de type Couleur en une valeur de type Color. + /// + /// La valeur à convertir. + /// Le type cible de la conversion. + /// Un paramètre facultatif utilisé pour la conversion. + /// La culture à utiliser pour la conversion. + /// Une valeur de type Color correspondant à la valeur de type Couleur. public object Convert(object? value, Type targetType, object? parameter, CultureInfo culture) { if (value is not Couleur) @@ -36,6 +71,14 @@ namespace MauiSpark.Convertisseurs } } + /// + /// Convertit une valeur de type Color en une valeur de type Couleur. + /// + /// La valeur à convertir. + /// Le type cible de la conversion. + /// Un paramètre facultatif utilisé pour la conversion. + /// La culture à utiliser pour la conversion. + /// Une valeur de type Couleur correspondant à la valeur de type Color. public object ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture) { if (value is not Color) return Couleur.Noir; diff --git a/Sources/MauiSpark/Convertisseurs/IndicateurVersCouleurMAUI.cs b/Sources/MauiSpark/Convertisseurs/IndicateurVersCouleurMAUI.cs index fa9039d..fda5ecb 100644 --- a/Sources/MauiSpark/Convertisseurs/IndicateurVersCouleurMAUI.cs +++ b/Sources/MauiSpark/Convertisseurs/IndicateurVersCouleurMAUI.cs @@ -3,23 +3,53 @@ using System.Globalization; namespace MauiSpark.Convertisseurs { + /// + /// Convertisseur d'indicateur en couleur qui implémente l'interface IValueConverter. + /// Cette classe permet de convertir des valeurs de type Indicateur en valeurs de type Color. + /// public class IndicateurVersCouleurMAUI : IValueConverter { + /// + /// Obtient la couleur noire. + /// + public static Color Noir { get; private set; } = Color.FromArgb("#000000"); + + /// + /// Obtient la couleur blanche. + /// + public static Color Blanc { get; private set; } = Color.FromArgb("#FFFFFF"); + + /// + /// Convertit une valeur de type Indicateur en une valeur de type Color. + /// + /// La valeur à convertir. + /// Le type cible de la conversion. + /// Un paramètre facultatif utilisé pour la conversion. + /// La culture à utiliser pour la conversion. + /// Une valeur de type Color correspondant à la valeur de type Indicateur. public object Convert(object? value, Type targetType, object? parameter, CultureInfo culture) { - if (value is not Indicateur) return "black"; + if (value is not Indicateur) return Noir; switch (value) { case Indicateur.BonnePlace: - return "black"; + return Noir; case Indicateur.BonneCouleur: - return "white"; + return Blanc; default: - return "black"; + return Noir; } } + /// + /// Convertit une valeur de type Color en une valeur de type Indicateur. + /// + /// La valeur à convertir. + /// Le type cible de la conversion. + /// Un paramètre facultatif utilisé pour la conversion. + /// La culture à utiliser pour la conversion. + /// Non implémenté. Lance une NotImplementedException. public object ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture) { throw new NotImplementedException(); diff --git a/Sources/MauiSpark/Convertisseurs/TexteVersTexteMajuscule.cs b/Sources/MauiSpark/Convertisseurs/TexteVersTexteMajuscule.cs index 142fa0e..a974d01 100644 --- a/Sources/MauiSpark/Convertisseurs/TexteVersTexteMajuscule.cs +++ b/Sources/MauiSpark/Convertisseurs/TexteVersTexteMajuscule.cs @@ -2,8 +2,21 @@ namespace MauiSpark.Convertisseurs { + /// + /// Convertisseur de texte en texte en majuscules qui implémente l'interface IValueConverter. + /// Cette classe permet de convertir une chaîne de caractères en majuscules. + /// public class TexteVersTexteMajuscule : IValueConverter { + + /// + /// Convertit une chaîne de caractères en majuscules. + /// + /// La valeur à convertir. + /// Le type cible de la conversion. + /// Un paramètre facultatif utilisé pour la conversion. + /// La culture à utiliser pour la conversion. + /// Une chaîne de caractères en majuscules. public object Convert(object? value, Type targetType, object? parameter, CultureInfo culture) { if (value is not string) @@ -12,6 +25,14 @@ namespace MauiSpark.Convertisseurs return ((string)value).ToUpper(); } + /// + /// Non implémenté. Lance une NotImplementedException. + /// + /// La valeur à convertir. + /// Le type cible de la conversion. + /// Un paramètre facultatif utilisé pour la conversion. + /// La culture à utiliser pour la conversion. + /// Non implémenté. Lance une NotImplementedException. public object ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture) { throw new NotImplementedException(); diff --git a/Sources/MauiSpark/MauiSpark.csproj b/Sources/MauiSpark/MauiSpark.csproj index 551dd2c..1f7a22a 100644 --- a/Sources/MauiSpark/MauiSpark.csproj +++ b/Sources/MauiSpark/MauiSpark.csproj @@ -79,6 +79,9 @@ ReglesPage.xaml + + ClassementPage.xaml + VictoirePage.xaml @@ -106,7 +109,7 @@ MSBuild:Compile - + MSBuild:Compile @@ -121,9 +124,15 @@ MSBuild:Compile + + MSBuild:Compile + MSBuild:Compile + + MSBuild:Compile + MSBuild:Compile diff --git a/Sources/MauiSpark/Pages/AccueilPage.xaml.cs b/Sources/MauiSpark/Pages/AccueilPage.xaml.cs index 2e6718e..e935c9a 100644 --- a/Sources/MauiSpark/Pages/AccueilPage.xaml.cs +++ b/Sources/MauiSpark/Pages/AccueilPage.xaml.cs @@ -1,10 +1,10 @@ -namespace MauiSpark.Pages; - +namespace MauiSpark.Pages; + /// /// Page d'accueil de l'application. /// public partial class AccueilPage : ContentPage -{ +{ /// /// Constructeur de la page d'accueil. @@ -16,8 +16,8 @@ public partial class AccueilPage : ContentPage NavigationPage.SetHasNavigationBar(this, false); InitializeComponent(); - } - + } + /// /// Méthode déclenchée lorsque le bouton "Jouer" est cliqué. /// Navigue vers la page Mode. diff --git a/Sources/MauiSpark/Pages/ClassementPage.xaml b/Sources/MauiSpark/Pages/ClassementPage.xaml new file mode 100644 index 0000000..addd827 --- /dev/null +++ b/Sources/MauiSpark/Pages/ClassementPage.xaml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + public Code Code { get; private init; } + public bool EstJoueur { get; private init; } /// /// Initialise un tour à partir des arguments de l'événement de nouveau tour de jeu. @@ -38,8 +38,9 @@ internal class Tour public Tour(PartieNouveauTourEventArgs e) { Numero = $"Tour {e.Tour}"; - Joueur = e.Joueur; + Joueur = e.Nom; Code = e.Code; + EstJoueur = e.EstJoueur; (IReadOnlyList> jetons, IReadOnlyList < IReadOnlyList < Indicateur >> indicateurs) = e.Plateau.Grille; @@ -67,6 +68,7 @@ public partial class PlateauPage : ContentPage { private Code? code; private Plateau? plateau; + private bool? estJoueur; /// /// Constructeur de la page du plateau de jeu. @@ -105,6 +107,7 @@ public partial class PlateauPage : ContentPage code = e.Code; plateau = e.Plateau; + estJoueur = e.EstJoueur; BindingContext = new Tour(e); } @@ -119,7 +122,7 @@ public partial class PlateauPage : ContentPage { try { - if(code != null) + if(code != null && estJoueur.HasValue && estJoueur.Value) code.SupprimerDernierJeton(); } catch(CodeVideException) diff --git a/Sources/MauiSpark/Pages/ReglesPage.xaml b/Sources/MauiSpark/Pages/ReglesPage.xaml index ebc0e5f..c207aba 100644 --- a/Sources/MauiSpark/Pages/ReglesPage.xaml +++ b/Sources/MauiSpark/Pages/ReglesPage.xaml @@ -9,11 +9,16 @@ - + + + - + diff --git a/Sources/MauiSpark/Pages/ReglesPage.xaml.cs b/Sources/MauiSpark/Pages/ReglesPage.xaml.cs index d384aa8..cb5ba19 100644 --- a/Sources/MauiSpark/Pages/ReglesPage.xaml.cs +++ b/Sources/MauiSpark/Pages/ReglesPage.xaml.cs @@ -1,44 +1,18 @@ -namespace MauiSpark.Pages; - -/// -/// Page affichant les règles du jeu. -/// -internal class Regles -{ - /// - /// Obtient ou définit le titre des règles. - /// - public string Titre { get; init; } = ""; +using CoreLibrary.Regles; - /// - /// Obtient ou définit la description des règles. - /// - public string Description { get; init; } = ""; -} +namespace MauiSpark.Pages; -/// -/// Page affichant les règles du jeu. -/// public partial class ReglesPage : ContentPage { - private static readonly Regles reglesClassiques = new Regles() - { - Titre = "Règles classiques", - Description = "Le but du jeu est de découvrir la combinaison. On génère aléatoirement deux combinaisons de 4 couleurs (six couleurs au total : jaune, bleu, rouge, vert, blanc et noir), une combinaison pour chaque joueur. Deux joueurs se battent pour trouver la combinaison en premier, il y a douze tours. Le premier joueur à trouver la combinaison à gagner, chaque joueur a le même nombre de coups à réaliser. Donc si le joueur un à trouvé la solution au bout de huit coups, le joueur deux doit finir son huitième coup. Si le joueur deux trouve la combinaison, les deux joueurs sont à égalité. Sinon, le joueur un gagne. Pour trouver la combinaison, les joueurs disposent de quatre indicateurs. Ces indicateurs sont quatre ronds qui représentent les quatre couleurs sélectionnées par le joueur. Un rond noir signifie qu’une couleur est à la bonne place, un rond blanc correspond à une mauvaise place et s'il n’y a pas d’indicateur aucune des couleurs n’est présentent dans la combinaison." - }; - - /// - /// Constructeur de la page affichant les règles du jeu. - /// Initialise les paramètres de navigation et les composants de la page. - /// public ReglesPage() { NavigationPage.SetHasNavigationBar(this, false); - BindingContext = (Regles[])[ - reglesClassiques - ]; + BindingContext = typeof(IRegles).Assembly.GetTypes() + .Where(type => typeof(IRegles).IsAssignableFrom(type) && type.IsClass) + .Select(type => (Activator.CreateInstance(type) as IRegles)!) + .OrderBy(regles => regles.Indice); - InitializeComponent(); + InitializeComponent(); } } \ No newline at end of file diff --git a/Sources/MauiSpark/Pages/ReprendrePage.xaml b/Sources/MauiSpark/Pages/ReprendrePage.xaml index 663127e..cd52272 100644 --- a/Sources/MauiSpark/Pages/ReprendrePage.xaml +++ b/Sources/MauiSpark/Pages/ReprendrePage.xaml @@ -6,17 +6,17 @@ x:Name="reprendrePage" Title="ReprendrePage"> - - - - - - - - - - - - + + + + + + + + + + + + \ No newline at end of file diff --git a/Sources/MauiSpark/Pages/TableauScore.xaml b/Sources/MauiSpark/Pages/TableauScore.xaml deleted file mode 100644 index 0f52200..0000000 --- a/Sources/MauiSpark/Pages/TableauScore.xaml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/Sources/MauiSpark/Pages/TableauScore.xaml.cs b/Sources/MauiSpark/Pages/TableauScore.xaml.cs deleted file mode 100644 index 98f9347..0000000 --- a/Sources/MauiSpark/Pages/TableauScore.xaml.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace MauiSpark.Pages; - -public partial class TableauScore : ContentPage -{ - public TableauScore() - { - NavigationPage.SetHasNavigationBar(this, false); - - InitializeComponent(); - } -} \ No newline at end of file diff --git a/Sources/MauiSpark/Pages/VictoirePage.xaml b/Sources/MauiSpark/Pages/VictoirePage.xaml index 82b222d..baa6214 100644 --- a/Sources/MauiSpark/Pages/VictoirePage.xaml +++ b/Sources/MauiSpark/Pages/VictoirePage.xaml @@ -29,7 +29,7 @@ Margin="20" Padding="20"> -