diff --git a/Sources/ConsoleApp/Program.cs b/Sources/ConsoleApp/Program.cs index 9f8281d..73733cc 100644 --- a/Sources/ConsoleApp/Program.cs +++ b/Sources/ConsoleApp/Program.cs @@ -14,7 +14,7 @@ namespace ConsoleApp [ExcludeFromCodeCoverage] public static class Program { - public static Manageur Manageur { get; private set; } = new Manageur(new PersistanceJSON()); + public static Manageur Manageur { get; private set; } = new Manageur(new PersistanceJson()); public static void Main() { diff --git a/Sources/ConsoleApp/Utils.cs b/Sources/ConsoleApp/Utils.cs index 09e929a..070b3c8 100644 --- a/Sources/ConsoleApp/Utils.cs +++ b/Sources/ConsoleApp/Utils.cs @@ -100,7 +100,7 @@ namespace ConsoleApp /// Le plateau de jeu. public static void DessinerPlateau(Plateau plateau) { - (IReadOnlyList> codes, IReadOnlyList> indicateurs) = plateau.Grille; + (IEnumerable> codes, IEnumerable> indicateurs) = plateau.Grille; int tailleGrille = 2 + plateau.TailleMaxCode * 3; @@ -109,14 +109,14 @@ namespace ConsoleApp for (int i = 0; i < plateau.TailleMax; ++i) { - if(i >= codes.Count) + if(i >= codes.Count()) { Console.WriteLine($"│{new string(' ', tailleGrille)}│ │{new string(' ', tailleGrille)}│"); continue; } - IReadOnlyList ligneCodes = codes.ElementAt(i); - IReadOnlyList ligneIndicateurs = indicateurs.ElementAt(i); + IEnumerable ligneCodes = codes.ElementAt(i); + IEnumerable ligneIndicateurs = indicateurs.ElementAt(i); Console.Write("│"); diff --git a/Sources/CoreLibrary/Core/Jeton.cs b/Sources/CoreLibrary/Core/Jeton.cs index b6cefe4..ff3206b 100644 --- a/Sources/CoreLibrary/Core/Jeton.cs +++ b/Sources/CoreLibrary/Core/Jeton.cs @@ -13,12 +13,12 @@ namespace CoreLibrary.Core Couleur = couleur; } - public override readonly bool Equals(object? objet) + public override readonly bool Equals(object? obj) { - if (objet == null || objet is not Jeton) + if (obj is not Jeton) return false; - return Couleur == ((Jeton)objet).Couleur; + return Couleur == ((Jeton)obj).Couleur; } public static bool operator ==(Jeton gauche, Jeton droite) => gauche.Equals(droite); diff --git a/Sources/CoreLibrary/Core/Plateau.cs b/Sources/CoreLibrary/Core/Plateau.cs index 02a38a4..f8b3321 100644 --- a/Sources/CoreLibrary/Core/Plateau.cs +++ b/Sources/CoreLibrary/Core/Plateau.cs @@ -27,8 +27,8 @@ namespace CoreLibrary.Core public bool Complet => Taille == TailleMax; [DataMember] public bool Victoire { get; private set; } = false; - public (IReadOnlyList>, IReadOnlyList>) Grille => ( - codes.Select(code => code.Jetons).ToList(), + public (IEnumerable>, IEnumerable>) Grille => ( + codes.Select(code => code.Jetons), indicateurs ); @@ -70,10 +70,10 @@ namespace CoreLibrary.Core throw new GrilleCompleteException(); codes.Add(code); - IReadOnlyList indicateurs = codeSecret.Comparer(code); - this.indicateurs.Add(indicateurs.ToList()); + IReadOnlyList indicateursCode = codeSecret.Comparer(code); + indicateurs.Add(indicateursCode.ToList()); - if (!Victoire && indicateurs.Count(indicateur => indicateur == Indicateur.BonnePlace) == TailleMaxCode) + if (!Victoire && indicateursCode.Count(indicateur => indicateur == Indicateur.BonnePlace) == TailleMaxCode) Victoire = true; QuandPlateauAjouterCode(); diff --git a/Sources/CoreLibrary/Joueurs/Joueur.cs b/Sources/CoreLibrary/Joueurs/Joueur.cs index 23f5e95..8cc3cde 100644 --- a/Sources/CoreLibrary/Joueurs/Joueur.cs +++ b/Sources/CoreLibrary/Joueurs/Joueur.cs @@ -48,8 +48,6 @@ namespace CoreLibrary.Joueurs public virtual void QuandDemanderJoueurJouer(object? sender, PartieDemanderJoueurJouerEventArgs e) { - if (e.Nom != Nom) - return; } public override string ToString() => Nom; diff --git a/Sources/CoreLibrary/Joueurs/Robot.cs b/Sources/CoreLibrary/Joueurs/Robot.cs index e325998..2c539a0 100644 --- a/Sources/CoreLibrary/Joueurs/Robot.cs +++ b/Sources/CoreLibrary/Joueurs/Robot.cs @@ -5,13 +5,19 @@ namespace CoreLibrary.Joueurs { public class Robot : Joueur { - private static int nbRobots = 0; + private static int nbRobots; private List? codesPossibles; + static Robot() + { + nbRobots = 0; + } + public Robot() : - base($"Naps {++nbRobots}") + base($"Naps {nbRobots + 1}") { + ++nbRobots; } public Robot(string nom) : @@ -25,18 +31,15 @@ namespace CoreLibrary.Joueurs return; if (codesPossibles == null) - { - codesPossibles = new List(); - GenererTousCodesPossibles(e.Code.TailleMax); - } + codesPossibles = GenererTousCodesPossibles(e.Code.TailleMax); - SupprimerCodesImpossibles(e.Plateau); + SupprimerCodesImpossibles(codesPossibles, e.Plateau); for(int i = 0; i < e.Code.TailleMax; ++i) e.Code.AjouterJeton(codesPossibles.ElementAt(0).Jetons[i]); } - private void GenererTousCodesPossibles(int tailleCode) + private static List GenererTousCodesPossibles(int tailleCode) { Couleur[] couleurs = Enum.GetValues(); int nbLignes = (int)Math.Pow(couleurs.Length, tailleCode); @@ -52,6 +55,7 @@ namespace CoreLibrary.Joueurs } } + List codes = new List(); for (int i = 0; i < jetons.GetLength(0); ++i) { Code code = new Code(tailleCode); @@ -59,11 +63,13 @@ namespace CoreLibrary.Joueurs { code.AjouterJeton(jetons[i, j]!.Value); } - codesPossibles!.Add(code); + codes!.Add(code); } + + return codes; } - private bool EstCodePossible(Plateau plateau, Code code) + private static bool EstCodePossible(Plateau plateau, Code code) { for(int i = 0; i < plateau.Taille; ++i) { @@ -86,21 +92,21 @@ namespace CoreLibrary.Joueurs return true; } - private void SupprimerCodesImpossibles(Plateau plateau) + private static void SupprimerCodesImpossibles(List codes, Plateau plateau) { - if (codesPossibles == null) + if (codes == null) return; List indicesASupprimer = new List(); - for(int i = codesPossibles.Count - 1; i >= 0; --i) + for(int i = codes.Count - 1; i >= 0; --i) { - if(!EstCodePossible(plateau, codesPossibles.ElementAt(i))) + if(!EstCodePossible(plateau, codes.ElementAt(i))) indicesASupprimer.Add(i); } foreach (int indice in indicesASupprimer) - codesPossibles.RemoveAt(indice); + codes.RemoveAt(indice); } } } diff --git a/Sources/CoreLibrary/Manageurs/Manageur.cs b/Sources/CoreLibrary/Manageurs/Manageur.cs index 24f5fab..b9a3461 100644 --- a/Sources/CoreLibrary/Manageurs/Manageur.cs +++ b/Sources/CoreLibrary/Manageurs/Manageur.cs @@ -13,7 +13,7 @@ namespace CoreLibrary.Manageurs public IReadOnlyList Joueurs => joueurs; public IReadOnlyList Parties => parties; - public IReadOnlyList PartiesNonTerminees => parties.Where(partie => !partie.Termine).Reverse().ToList(); + public IEnumerable PartiesNonTerminees => parties.Where(partie => !partie.Termine).Reverse(); public Manageur(IPersistance persistance) { diff --git a/Sources/CoreLibrary/Partie.cs b/Sources/CoreLibrary/Partie.cs index 8a891ee..8bd712a 100644 --- a/Sources/CoreLibrary/Partie.cs +++ b/Sources/CoreLibrary/Partie.cs @@ -33,8 +33,8 @@ namespace CoreLibrary [DataMember] private int courant = 0; - public IReadOnlyList Joueurs => joueurs.Keys.ToList(); - public IReadOnlyList Robots => joueurs.Where(joueur => joueur.Value).Select(joueur => joueur.Key).ToList(); + public IEnumerable Joueurs => joueurs.Keys; + public IEnumerable Robots => joueurs.Where(joueur => joueur.Value).Select(joueur => joueur.Key); [DataMember] public bool Termine { get; private set; } = false; [DataMember] @@ -155,9 +155,9 @@ namespace CoreLibrary for (int i = 0; i < joueurs.Count; ++i) { if (plateaux.ElementAt(i).Victoire) - gagnants.Add(Joueurs[i]); + gagnants.Add(Joueurs.ElementAt(i)); else - perdants.Add(Joueurs[i]); + perdants.Add(Joueurs.ElementAt(i)); } QuandPartiePartieTerminee(gagnants, perdants); diff --git a/Sources/CoreLibrary/Persistance/PersistanceJSON.cs b/Sources/CoreLibrary/Persistance/PersistanceJSON.cs index 0daaf1c..99de553 100644 --- a/Sources/CoreLibrary/Persistance/PersistanceJSON.cs +++ b/Sources/CoreLibrary/Persistance/PersistanceJSON.cs @@ -4,13 +4,13 @@ using System.Xml; namespace CoreLibrary.Persistance { - public class PersistanceJSON : IPersistance + public class PersistanceJson : IPersistance { private readonly string nomDossier = "Fichiers"; private readonly string nomRacine = "Sources"; private readonly string dossier = AppDomain.CurrentDomain.BaseDirectory; - public PersistanceJSON() + public PersistanceJson() { while (new DirectoryInfo(dossier).Name != nomRacine) dossier = Path.GetFullPath(Path.Combine(dossier, @"../")); @@ -26,20 +26,19 @@ namespace CoreLibrary.Persistance return []; Directory.SetCurrentDirectory(Path.Combine(Directory.GetCurrentDirectory(), nomDossier)); - var directory = Directory.GetCurrentDirectory(); - + if (!File.Exists(fichier)) return []; DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(T[])); - T[] elements; + T[]? elements; using (FileStream s = File.OpenRead(fichier)) { elements = jsonSerializer.ReadObject(s) as T[]; } - return elements; + return elements != null ? elements : Array.Empty(); } public void Enregistrer(T[] elements) where T : IEstPersistant diff --git a/Sources/CoreLibrary/Regles/ReglesClassiques.cs b/Sources/CoreLibrary/Regles/ReglesClassiques.cs index 36c5902..0c6ef38 100644 --- a/Sources/CoreLibrary/Regles/ReglesClassiques.cs +++ b/Sources/CoreLibrary/Regles/ReglesClassiques.cs @@ -11,7 +11,7 @@ namespace CoreLibrary.Regles public int NbJoueurs => 2; public int NbTour => 12; public int TailleCode => 4; - public override bool Equals(object? obj) => obj == null ? false : obj is ReglesClassiques; + public override bool Equals(object? obj) => obj is ReglesClassiques; public override int GetHashCode() => Nom.GetHashCode(); } } diff --git a/Sources/CoreLibrary/Regles/ReglesDifficiles.cs b/Sources/CoreLibrary/Regles/ReglesDifficiles.cs index 75c0dfc..2e124df 100644 --- a/Sources/CoreLibrary/Regles/ReglesDifficiles.cs +++ b/Sources/CoreLibrary/Regles/ReglesDifficiles.cs @@ -11,7 +11,7 @@ namespace CoreLibrary.Regles 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 bool Equals(object? obj) => obj is ReglesDifficiles; public override int GetHashCode() => Nom.GetHashCode(); } } diff --git a/Sources/Fichiers/joueurs.json b/Sources/Fichiers/joueurs.json index 34c6e16..5967433 100644 --- a/Sources/Fichiers/joueurs.json +++ b/Sources/Fichiers/joueurs.json @@ -121,5 +121,19 @@ "Value": 50 } ] + }, + { + "Nom": "a", + "statistiques": [ + { + "Key": { + "Item1": { + "__type": "ReglesClassiques:#CoreLibrary.Regles" + }, + "Item2": 3 + }, + "Value": 1 + } + ] } ] \ No newline at end of file diff --git a/Sources/Fichiers/parties.json b/Sources/Fichiers/parties.json index de816af..e85bbd1 100644 --- a/Sources/Fichiers/parties.json +++ b/Sources/Fichiers/parties.json @@ -2574,5 +2574,135 @@ ] } ] + }, + { + "Regles": { + "__type": "ReglesClassiques:#CoreLibrary.Regles" + }, + "Termine": false, + "Tour": 2, + "courant": 0, + "joueurs": [ + { + "Key": "a", + "Value": true + }, + { + "Key": "Naps 1", + "Value": false + } + ], + "plateaux": [ + { + "TailleMax": 12, + "TailleMaxCode": 4, + "Victoire": false, + "codeSecret": { + "Jetons": [ + { + "Couleur": 3 + }, + { + "Couleur": 5 + }, + { + "Couleur": 1 + }, + { + "Couleur": 4 + } + ], + "TailleMax": 4 + }, + "codes": [ + { + "Jetons": [ + { + "Couleur": 0 + }, + { + "Couleur": 0 + }, + { + "Couleur": 0 + }, + { + "Couleur": 0 + } + ], + "TailleMax": 4 + } + ], + "indicateurs": [ + [ ] + ] + }, + { + "TailleMax": 12, + "TailleMaxCode": 4, + "Victoire": false, + "codeSecret": { + "Jetons": [ + { + "Couleur": 0 + }, + { + "Couleur": 3 + }, + { + "Couleur": 3 + }, + { + "Couleur": 2 + } + ], + "TailleMax": 4 + }, + "codes": [ + { + "Jetons": [ + { + "Couleur": 0 + }, + { + "Couleur": 0 + }, + { + "Couleur": 0 + }, + { + "Couleur": 0 + } + ], + "TailleMax": 4 + } + ], + "indicateurs": [ + [ + 0 + ] + ] + } + ] + }, + { + "Regles": { + "__type": "ReglesClassiques:#CoreLibrary.Regles" + }, + "Termine": false, + "Tour": 0, + "courant": 0, + "joueurs": [ ], + "plateaux": [ ] + }, + { + "Regles": { + "__type": "ReglesClassiques:#CoreLibrary.Regles" + }, + "Termine": false, + "Tour": 0, + "courant": 0, + "joueurs": [ ], + "plateaux": [ ] } ] \ No newline at end of file diff --git a/Sources/MauiSpark/MauiProgram.cs b/Sources/MauiSpark/MauiProgram.cs index 303e793..8c52fb4 100644 --- a/Sources/MauiSpark/MauiProgram.cs +++ b/Sources/MauiSpark/MauiProgram.cs @@ -6,7 +6,7 @@ namespace MauiSpark { public static class MauiProgram { - public static Manageur Manageur { get; private set; } = new Manageur(new PersistanceJSON()); + public static Manageur Manageur { get; private set; } = new Manageur(new PersistanceJson()); public static MauiApp CreateMauiApp() { diff --git a/Sources/MauiSpark/Pages/PlateauPage.xaml.cs b/Sources/MauiSpark/Pages/PlateauPage.xaml.cs index 30aa891..25419b7 100644 --- a/Sources/MauiSpark/Pages/PlateauPage.xaml.cs +++ b/Sources/MauiSpark/Pages/PlateauPage.xaml.cs @@ -19,12 +19,12 @@ internal class Tour Code = e.Code; EstJoueur = e.EstJoueur; - (IReadOnlyList> jetons, IReadOnlyList < IReadOnlyList < Indicateur >> indicateurs) = e.Plateau.Grille; + (IEnumerable> jetons, IEnumerable> indicateurs) = e.Plateau.Grille; List<(IEnumerable, IEnumerable)> plateau = new List<(IEnumerable, IEnumerable)>(); for (int i = 0; i < e.Plateau.TailleMax; ++i) { - if(i >= jetons.Count) + if(i >= jetons.Count()) { plateau.Add(([], [])); continue;