From 95527d8b0e60a3e0298ded869c0a332e162ea5b3 Mon Sep 17 00:00:00 2001 From: "pauline.prady" Date: Wed, 29 May 2024 17:47:18 +0200 Subject: [PATCH 1/8] Debut persistance --- Sources/CoreLibrary/Joueurs/Joueur.cs | 8 +- .../Manager/IPersistanceManager.cs | 8 +- Sources/CoreLibrary/Partie.cs | 3 + .../CoreLibrary/Persistance/IPersistance.cs | 16 ++++ .../CoreLibrary/Persistance/Persistance.cs | 75 +++++++++++++++++++ Sources/CoreLibrary/Regles/IRegles.cs | 1 + .../CoreLibrary/Regles/ReglesClassiques.cs | 9 ++- 7 files changed, 116 insertions(+), 4 deletions(-) create mode 100644 Sources/CoreLibrary/Persistance/IPersistance.cs create mode 100644 Sources/CoreLibrary/Persistance/Persistance.cs diff --git a/Sources/CoreLibrary/Joueurs/Joueur.cs b/Sources/CoreLibrary/Joueurs/Joueur.cs index ba6ffb4..907338b 100644 --- a/Sources/CoreLibrary/Joueurs/Joueur.cs +++ b/Sources/CoreLibrary/Joueurs/Joueur.cs @@ -1,21 +1,27 @@ using CoreLibrary.Core; using CoreLibrary.Events; +using System.Runtime.Serialization; namespace CoreLibrary.Joueurs { /// /// Classe représentant un joueur. /// + [DataContract] public class Joueur { /// /// Le nom du joueur. /// + [DataMember] public string Nom { get; private init; } - + [DataMember] public int NbCoutTotal { get; set; } + [DataMember] public int NbPartieGagnee { get; set; } + [DataMember] public int NbPartieEgalite { get; set; } + [DataMember] public int NbPartiePerdue { get; set; } /// diff --git a/Sources/CoreLibrary/Manager/IPersistanceManager.cs b/Sources/CoreLibrary/Manager/IPersistanceManager.cs index 501b80b..306c296 100644 --- a/Sources/CoreLibrary/Manager/IPersistanceManager.cs +++ b/Sources/CoreLibrary/Manager/IPersistanceManager.cs @@ -6,8 +6,12 @@ namespace CoreLibrary.Manager { public bool EstEnregistre { get; } - public IEnumerable Charger(); + public IEnumerable ChargerJoueurs(); - public void Enregistrer(IEnumerable donnees); + public IEnumerable ChargerParties(); + + public void EnregistrerJoueurs(IEnumerable donnees); + + public void EnregistrerParties(IEnumerable donnees); } } diff --git a/Sources/CoreLibrary/Partie.cs b/Sources/CoreLibrary/Partie.cs index 9c9a14b..aaab371 100644 --- a/Sources/CoreLibrary/Partie.cs +++ b/Sources/CoreLibrary/Partie.cs @@ -2,14 +2,17 @@ using CoreLibrary.Events; using CoreLibrary.Joueurs; using CoreLibrary.Regles; +using System.Runtime.Serialization; namespace CoreLibrary { /// /// Représente une partie de jeu. /// + [DataContract] public class Partie { + [DataMember] public IRegles Regles { get; private set; } private readonly List joueurs = new List(); diff --git a/Sources/CoreLibrary/Persistance/IPersistance.cs b/Sources/CoreLibrary/Persistance/IPersistance.cs new file mode 100644 index 0000000..7263842 --- /dev/null +++ b/Sources/CoreLibrary/Persistance/IPersistance.cs @@ -0,0 +1,16 @@ +using CoreLibrary.Joueurs; + +namespace CoreLibrary.Persistance +{ + public interface IPersistance + { + + public List ChargerJoueurs(); + + public List ChargerParties(); + + public void EnregistrerJoueurs(List joueurs); + + public void EnregistrerParties(List parties); + } +} diff --git a/Sources/CoreLibrary/Persistance/Persistance.cs b/Sources/CoreLibrary/Persistance/Persistance.cs new file mode 100644 index 0000000..8db6b89 --- /dev/null +++ b/Sources/CoreLibrary/Persistance/Persistance.cs @@ -0,0 +1,75 @@ +using CoreLibrary.Joueurs; +using System.Runtime.Serialization.Json; +using System.Text; +using System.Text.Json; + +namespace CoreLibrary.Persistance +{ + public class Persistance : IPersistance + { + public List joueurs = new List(); + public List parties = new List(); + + public string ancienRepertoire = Directory.GetCurrentDirectory(); + + public List ChargerJoueurs() + { + DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(List)); + + using (FileStream s = File.OpenRead("joueurs.json")) + { + joueurs = jsonSerializer.ReadObject(s) as List; + } + + return joueurs; + } + + public List ChargerParties() + { + DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(List)); + + using (FileStream s = File.OpenRead("parties.json")) + { + parties = jsonSerializer.ReadObject(s) as List; + } + + return parties; + } + + public void EnregistrerJoueurs(List joueurs) + { + DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(List)); + + using (FileStream s = File.Create("joueurs.json")) + { + using (var writer = JsonReaderWriterFactory.CreateJsonWriter( + s, + Encoding.UTF8, + false, + true)) + { + jsonSerializer.WriteObject(writer, joueurs); + } + } + Directory.SetCurrentDirectory(ancienRepertoire); + } + + public void EnregistrerParties(List parties) + { + DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(List)); + + using (FileStream s = File.Create("parties.json")) + { + using (var writer = JsonReaderWriterFactory.CreateJsonWriter( + s, + Encoding.UTF8, + false, + true)) + { + jsonSerializer.WriteObject(writer, parties); + } + } + Directory.SetCurrentDirectory(ancienRepertoire); + } + } +} diff --git a/Sources/CoreLibrary/Regles/IRegles.cs b/Sources/CoreLibrary/Regles/IRegles.cs index bba390b..a8d8e7b 100644 --- a/Sources/CoreLibrary/Regles/IRegles.cs +++ b/Sources/CoreLibrary/Regles/IRegles.cs @@ -1,4 +1,5 @@ using CoreLibrary.Core; +using System.Runtime.Serialization; namespace CoreLibrary.Regles { diff --git a/Sources/CoreLibrary/Regles/ReglesClassiques.cs b/Sources/CoreLibrary/Regles/ReglesClassiques.cs index d4bd89f..ca65851 100644 --- a/Sources/CoreLibrary/Regles/ReglesClassiques.cs +++ b/Sources/CoreLibrary/Regles/ReglesClassiques.cs @@ -1,28 +1,35 @@ -namespace CoreLibrary.Regles +using System.Runtime.Serialization; + +namespace CoreLibrary.Regles { /// /// Classe définissant les règles classiques du jeu. /// + [DataContract] public class ReglesClassiques : IRegles { /// /// Le nom des règles. /// + [DataMember] public string Nom { get => "Règles classiques"; } /// /// Le nombre maximum de tour. /// + [DataMember] public int TourMaximum { get => 12; } /// /// La taille maximale d'un code. /// + [DataMember] public int TailleCodeMaximum { get => 4; } /// /// Me nombre maximum de joueurs possibles pour le jeu. /// + [DataMember] public int NbJoueursMaximum { get => 2; } } } From ef3face08f1b3bad890dccebb11bc6ef09acb22a Mon Sep 17 00:00:00 2001 From: "pauline.prady" Date: Thu, 30 May 2024 22:44:46 +0200 Subject: [PATCH 2/8] =?UTF-8?q?D=C3=A9corateurs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Sources/CoreLibrary/Core/Code.cs | 5 +++++ Sources/CoreLibrary/Core/Indicateur.cs | 5 ++++- Sources/CoreLibrary/Core/Jeton.cs | 6 +++++- Sources/CoreLibrary/Core/Plateau.cs | 8 ++++++++ Sources/CoreLibrary/Partie.cs | 5 ++++- 5 files changed, 26 insertions(+), 3 deletions(-) diff --git a/Sources/CoreLibrary/Core/Code.cs b/Sources/CoreLibrary/Core/Code.cs index 3567998..4cf8e91 100644 --- a/Sources/CoreLibrary/Core/Code.cs +++ b/Sources/CoreLibrary/Core/Code.cs @@ -1,11 +1,13 @@ using CoreLibrary.Exceptions; using System.Collections.ObjectModel; +using System.Runtime.Serialization; namespace CoreLibrary.Core { /// /// Classe représentant un code composé de jetons et ses différentes méthodes. /// + [DataContract] public class Code { private readonly ObservableCollection lesJetons = new ObservableCollection(); @@ -13,13 +15,16 @@ namespace CoreLibrary.Core /// /// Le nombre maximum de jetons dans le code. /// + [DataMember] public int NbJetonsMax { get; private set; } /// /// Le nombre de jetons dans le code. /// + [DataMember] public int NbJetons { get => lesJetons.Count; } + [DataMember] public ObservableCollection Jetons => lesJetons; /// diff --git a/Sources/CoreLibrary/Core/Indicateur.cs b/Sources/CoreLibrary/Core/Indicateur.cs index 89180d8..c4284d5 100644 --- a/Sources/CoreLibrary/Core/Indicateur.cs +++ b/Sources/CoreLibrary/Core/Indicateur.cs @@ -1,8 +1,11 @@ -namespace CoreLibrary.Core +using System.Runtime.Serialization; + +namespace CoreLibrary.Core { /// /// Enumération des indicateurs disponibles pour les jetons. /// + [DataContract] public enum Indicateur { BONNEPLACE, diff --git a/Sources/CoreLibrary/Core/Jeton.cs b/Sources/CoreLibrary/Core/Jeton.cs index 1996ce5..4451cdc 100644 --- a/Sources/CoreLibrary/Core/Jeton.cs +++ b/Sources/CoreLibrary/Core/Jeton.cs @@ -1,13 +1,17 @@ -namespace CoreLibrary.Core +using System.Runtime.Serialization; + +namespace CoreLibrary.Core { /// /// Structure représentant un jeton de couleur /// + [DataContract] public struct Jeton { /// /// La couleur du jeton. /// + [DataMember] public readonly Couleur Couleur { get; private init; } /// diff --git a/Sources/CoreLibrary/Core/Plateau.cs b/Sources/CoreLibrary/Core/Plateau.cs index c3d1f3e..6d560b5 100644 --- a/Sources/CoreLibrary/Core/Plateau.cs +++ b/Sources/CoreLibrary/Core/Plateau.cs @@ -1,4 +1,5 @@ using CoreLibrary.Exceptions; +using System.Runtime.Serialization; using System.Security.Cryptography; namespace CoreLibrary.Core @@ -6,22 +7,29 @@ namespace CoreLibrary.Core /// /// Classe représentant un plateau de jeu composé de codes et leurs indicateurs ainsi que les méthodes associées. /// + [DataContract] public class Plateau { + [DataMember] private readonly Code codeSecret; + [DataMember] private readonly Code?[] grille; + [DataMember] private readonly IEnumerable[] indicateurs; + [DataMember] private readonly int tailleCode; /// /// Le numéro de tour actuel. /// + [DataMember] public int Tour { get; private set; } = 1; /// /// La victoire du joueur, True si le joueur a gagné sinon False /// + [DataMember] public bool Victoire { get; private set; } = false; /// diff --git a/Sources/CoreLibrary/Partie.cs b/Sources/CoreLibrary/Partie.cs index aaab371..a692fe3 100644 --- a/Sources/CoreLibrary/Partie.cs +++ b/Sources/CoreLibrary/Partie.cs @@ -15,12 +15,15 @@ namespace CoreLibrary [DataMember] public IRegles Regles { get; private set; } + [DataMember] private readonly List joueurs = new List(); + [DataMember] private readonly List plateaux = new List(); + [DataMember] private int? courant; /// - /// Événement déclenché lorsqu'il est nécessaire de d'ajouter un joueur. + /// Événement déclenché lorsqu'il est nécessaire d'ajouter un joueur. /// public event EventHandler? DemanderNom; From a2c964c583b2bf3e0fd78a27803b9b129c559671 Mon Sep 17 00:00:00 2001 From: "pauline.prady" Date: Thu, 30 May 2024 23:19:36 +0200 Subject: [PATCH 3/8] =?UTF-8?q?Probl=C3=A8me=20de=20PATH=20=3F=3F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Manager/IPersistanceManager.cs | 17 ------- Sources/CoreLibrary/Manager/Manager.cs | 41 --------------- Sources/CoreLibrary/Manager/Stub.cs | 26 ---------- Sources/CoreLibrary/Partie.cs | 39 +++++++++++++-- .../CoreLibrary/Persistance/IPersistance.cs | 1 + Sources/CoreLibrary/Persistance/Manager.cs | 50 +++++++++++++++++++ .../CoreLibrary/Persistance/Persistance.cs | 34 +++++++++---- Sources/MauiSpark/MauiProgram.cs | 3 +- Sources/MauiSpark/Pages/Mode.xaml.cs | 3 +- 9 files changed, 115 insertions(+), 99 deletions(-) delete mode 100644 Sources/CoreLibrary/Manager/IPersistanceManager.cs delete mode 100644 Sources/CoreLibrary/Manager/Manager.cs delete mode 100644 Sources/CoreLibrary/Manager/Stub.cs create mode 100644 Sources/CoreLibrary/Persistance/Manager.cs diff --git a/Sources/CoreLibrary/Manager/IPersistanceManager.cs b/Sources/CoreLibrary/Manager/IPersistanceManager.cs deleted file mode 100644 index 306c296..0000000 --- a/Sources/CoreLibrary/Manager/IPersistanceManager.cs +++ /dev/null @@ -1,17 +0,0 @@ -using CoreLibrary.Joueurs; - -namespace CoreLibrary.Manager -{ - public interface IPersistanceManager - { - public bool EstEnregistre { get; } - - public IEnumerable ChargerJoueurs(); - - public IEnumerable ChargerParties(); - - public void EnregistrerJoueurs(IEnumerable donnees); - - public void EnregistrerParties(IEnumerable donnees); - } -} diff --git a/Sources/CoreLibrary/Manager/Manager.cs b/Sources/CoreLibrary/Manager/Manager.cs deleted file mode 100644 index 619d180..0000000 --- a/Sources/CoreLibrary/Manager/Manager.cs +++ /dev/null @@ -1,41 +0,0 @@ -using CoreLibrary.Joueurs; -using System.Runtime.InteropServices; - -namespace CoreLibrary.Manager -{ - public class Manager : IDisposable - { - private bool estDetruit; - - private readonly IPersistanceManager persistance; - - private readonly IEnumerable joueurs; - public IEnumerable Joueurs => joueurs; - - public Manager(IPersistanceManager persistance) - { - this.persistance = persistance; - joueurs = this.persistance.Charger(); - } - - public void Dispose() - { - Dispose(true); - GC.SuppressFinalize(this); - } - - protected virtual void Dispose(bool detruire) - { - if (estDetruit) return; - - persistance.Enregistrer(joueurs); - - estDetruit = true; - } - - ~Manager() - { - Dispose(false); - } - } -} diff --git a/Sources/CoreLibrary/Manager/Stub.cs b/Sources/CoreLibrary/Manager/Stub.cs deleted file mode 100644 index dfebedb..0000000 --- a/Sources/CoreLibrary/Manager/Stub.cs +++ /dev/null @@ -1,26 +0,0 @@ -using CoreLibrary.Joueurs; -using System.Diagnostics.CodeAnalysis; - -namespace CoreLibrary.Manager -{ - public class Stub : IPersistanceManager - { - public bool EstEnregistre { get; private set; } = false; - - public IEnumerable Charger() - { - return [ - new Joueur("Pauline", 50, 5, 2, 0), - new Joueur("Céleste", 40, 6, 2, 0), - new Joueur("Camille", 55, 8, 0, 1), - new Joueur("Toto", 70, 0, 0, 10), - ]; - } - - [SuppressMessage("SonarAnalyzer", "S1186", Justification = "This method is intentionally left blank.")] - public void Enregistrer(IEnumerable donnees) - { - EstEnregistre = true; - } - } -} diff --git a/Sources/CoreLibrary/Partie.cs b/Sources/CoreLibrary/Partie.cs index a692fe3..53646ba 100644 --- a/Sources/CoreLibrary/Partie.cs +++ b/Sources/CoreLibrary/Partie.cs @@ -1,6 +1,7 @@ using CoreLibrary.Core; using CoreLibrary.Events; using CoreLibrary.Joueurs; +using CoreLibrary.Persistance; using CoreLibrary.Regles; using System.Runtime.Serialization; @@ -14,6 +15,8 @@ namespace CoreLibrary { [DataMember] public IRegles Regles { get; private set; } + [DataMember] + public IPersistance Persistance { get; } [DataMember] private readonly List joueurs = new List(); @@ -23,7 +26,7 @@ namespace CoreLibrary private int? courant; /// - /// Événement déclenché lorsqu'il est nécessaire d'ajouter un joueur. + /// Événement déclenché lorsqu'il est nécessaire de d'ajouter un joueur. /// public event EventHandler? DemanderNom; @@ -107,9 +110,13 @@ namespace CoreLibrary /// Crée une nouvelle instance de la classe Partie. /// /// Les règles de la partie. - public Partie(IRegles regles) + /// Persistance de la partie. + public Partie(IRegles regles, IPersistance persistance) { Regles = regles; + Persistance = persistance; + + ChargerPartie(); } /// @@ -174,8 +181,9 @@ namespace CoreLibrary if (++courant == joueurs.Count) courant = 0; QuandPasserMain(); + SauvegarderPartie(); - if(courant == 0 && (plateauCourant.Tour > Regles.TourMaximum || plateaux.Where(plateau => plateau.Victoire).Any())) + if (courant == 0 && (plateauCourant.Tour > Regles.TourMaximum || plateaux.Where(plateau => plateau.Victoire).Any())) { Terminee(); } @@ -195,7 +203,7 @@ namespace CoreLibrary List gagnants = new List(); List perdants = new List(); - for(int i = 0; i < joueurs.Count; i++) + for (int i = 0; i < joueurs.Count; i++) { if (plateaux[i].Victoire) gagnants.Add(joueurs[i]); @@ -205,5 +213,28 @@ namespace CoreLibrary QuandPartieTerminee(gagnants, perdants); } + + /// + /// Sauvegarder la partie + /// + private void SauvegarderPartie() + { + Persistance.EnregistrerParties(new List { this }); + } + + /// + /// Charger la partie + /// + private void ChargerPartie() + { + var parties = Persistance.ChargerParties(); + if (parties.Any()) + { + var partie = parties.First(); + joueurs.AddRange(partie.joueurs); + plateaux.AddRange(partie.plateaux); + courant = partie.courant; + } + } } } diff --git a/Sources/CoreLibrary/Persistance/IPersistance.cs b/Sources/CoreLibrary/Persistance/IPersistance.cs index 7263842..1d57c77 100644 --- a/Sources/CoreLibrary/Persistance/IPersistance.cs +++ b/Sources/CoreLibrary/Persistance/IPersistance.cs @@ -4,6 +4,7 @@ namespace CoreLibrary.Persistance { public interface IPersistance { + public bool EstEnregistre { get; } public List ChargerJoueurs(); diff --git a/Sources/CoreLibrary/Persistance/Manager.cs b/Sources/CoreLibrary/Persistance/Manager.cs new file mode 100644 index 0000000..93771fc --- /dev/null +++ b/Sources/CoreLibrary/Persistance/Manager.cs @@ -0,0 +1,50 @@ +using CoreLibrary.Joueurs; +using CoreLibrary.Persistance; +using System.Runtime.InteropServices; + +namespace CoreLibrary.Manager +{ + public class Manager : IDisposable + { + private bool estDetruit; + + private readonly IPersistance persistance; + + private readonly List joueurs; + public IReadOnlyCollection Joueurs => joueurs.AsReadOnly(); + + private readonly List parties; + public IReadOnlyCollection Parties => parties.AsReadOnly(); + + public Manager(IPersistance persistance) + { + this.persistance = persistance ?? throw new ArgumentNullException(nameof(persistance)); + joueurs = this.persistance.ChargerJoueurs() ?? new List(); + parties = this.persistance.ChargerParties() ?? new List(); + } + + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + protected virtual void Dispose(bool detruire) + { + if (estDetruit) return; + + if (detruire) + { + persistance.EnregistrerJoueurs(joueurs); + persistance.EnregistrerParties(parties); + } + + estDetruit = true; + } + + ~Manager() + { + Dispose(false); + } + } +} diff --git a/Sources/CoreLibrary/Persistance/Persistance.cs b/Sources/CoreLibrary/Persistance/Persistance.cs index 8db6b89..5117ac0 100644 --- a/Sources/CoreLibrary/Persistance/Persistance.cs +++ b/Sources/CoreLibrary/Persistance/Persistance.cs @@ -7,16 +7,22 @@ namespace CoreLibrary.Persistance { public class Persistance : IPersistance { - public List joueurs = new List(); - public List parties = new List(); - - public string ancienRepertoire = Directory.GetCurrentDirectory(); + private readonly string joueursFilePath = "joueurs.json"; + private readonly string partiesFilePath = "parties.json"; + private readonly string ancienRepertoire = Directory.GetCurrentDirectory(); + public bool EstEnregistre { get; private set; } public List ChargerJoueurs() { + if (!File.Exists(joueursFilePath)) + { + return new List(); + } + DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(List)); + List joueurs; - using (FileStream s = File.OpenRead("joueurs.json")) + using (FileStream s = File.OpenRead(joueursFilePath)) { joueurs = jsonSerializer.ReadObject(s) as List; } @@ -26,9 +32,15 @@ namespace CoreLibrary.Persistance public List ChargerParties() { + if (!File.Exists(partiesFilePath)) + { + return new List(); + } + DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(List)); + List parties; - using (FileStream s = File.OpenRead("parties.json")) + using (FileStream s = File.OpenRead(partiesFilePath)) { parties = jsonSerializer.ReadObject(s) as List; } @@ -40,7 +52,7 @@ namespace CoreLibrary.Persistance { DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(List)); - using (FileStream s = File.Create("joueurs.json")) + using (FileStream s = File.Create(Path.Combine(joueursFilePath, "../.."))) { using (var writer = JsonReaderWriterFactory.CreateJsonWriter( s, @@ -51,6 +63,8 @@ namespace CoreLibrary.Persistance jsonSerializer.WriteObject(writer, joueurs); } } + + EstEnregistre = true; Directory.SetCurrentDirectory(ancienRepertoire); } @@ -58,7 +72,7 @@ namespace CoreLibrary.Persistance { DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(List)); - using (FileStream s = File.Create("parties.json")) + using (FileStream s = File.Create(Path.Combine(partiesFilePath, "../.."))) { using (var writer = JsonReaderWriterFactory.CreateJsonWriter( s, @@ -69,7 +83,9 @@ namespace CoreLibrary.Persistance jsonSerializer.WriteObject(writer, parties); } } + + EstEnregistre = true; Directory.SetCurrentDirectory(ancienRepertoire); } } -} +} \ No newline at end of file diff --git a/Sources/MauiSpark/MauiProgram.cs b/Sources/MauiSpark/MauiProgram.cs index 82d1290..595afed 100644 --- a/Sources/MauiSpark/MauiProgram.cs +++ b/Sources/MauiSpark/MauiProgram.cs @@ -1,11 +1,12 @@ using CoreLibrary.Manager; +using CoreLibrary.Persistance; using Microsoft.Extensions.Logging; namespace MauiSpark { public static class MauiProgram { - public static Manager Manager { get; private set; } = new Manager(new Stub()); + public static Manager Manager { get; private set; } = new Manager(new Persistance()); public static MauiApp CreateMauiApp() { diff --git a/Sources/MauiSpark/Pages/Mode.xaml.cs b/Sources/MauiSpark/Pages/Mode.xaml.cs index bc58cf3..5138d19 100644 --- a/Sources/MauiSpark/Pages/Mode.xaml.cs +++ b/Sources/MauiSpark/Pages/Mode.xaml.cs @@ -1,5 +1,6 @@ using CoreLibrary; using CoreLibrary.Events; +using CoreLibrary.Persistance; using CoreLibrary.Regles; namespace MauiSpark.Pages; @@ -16,7 +17,7 @@ public partial class Mode : ContentPage private void QuandReglesClassiques(Object? sender, EventArgs e) { - Partie partie = new Partie(new ReglesClassiques()); + Partie partie = new Partie(new ReglesClassiques(), new Persistance()); partie.DemanderNom += QuandDemanderNom; partie.Jouer(); } From eb1fadc05ea33dc7142932ea9480aba8b5e8e4d0 Mon Sep 17 00:00:00 2001 From: "pauline.prady" Date: Fri, 31 May 2024 09:57:44 +0200 Subject: [PATCH 4/8] =?UTF-8?q?Persistance=20reprise=20=C3=A0=20zero?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Sources/ConsoleApp1/ConsoleApp1.csproj | 14 +++ Sources/ConsoleApp1/Program.cs | 9 ++ Sources/CoreLibrary/CoreLibrary.csproj | 4 + Sources/CoreLibrary/Partie.cs | 26 ------ .../CoreLibrary/Persistance/IPersistance.cs | 12 +-- Sources/CoreLibrary/Persistance/Manager.cs | 50 ---------- .../CoreLibrary/Persistance/Persistance.cs | 91 ------------------- .../Persistance/PersistanceJSON.cs | 69 ++++++++++++++ Sources/Fichiers/T.json | 0 Sources/MauiSpark/MauiProgram.cs | 6 +- Sources/mastermind.sln | 8 +- 11 files changed, 107 insertions(+), 182 deletions(-) create mode 100644 Sources/ConsoleApp1/ConsoleApp1.csproj create mode 100644 Sources/ConsoleApp1/Program.cs delete mode 100644 Sources/CoreLibrary/Persistance/Manager.cs delete mode 100644 Sources/CoreLibrary/Persistance/Persistance.cs create mode 100644 Sources/CoreLibrary/Persistance/PersistanceJSON.cs create mode 100644 Sources/Fichiers/T.json diff --git a/Sources/ConsoleApp1/ConsoleApp1.csproj b/Sources/ConsoleApp1/ConsoleApp1.csproj new file mode 100644 index 0000000..180e42c --- /dev/null +++ b/Sources/ConsoleApp1/ConsoleApp1.csproj @@ -0,0 +1,14 @@ + + + + Exe + net8.0 + enable + enable + + + + + + + diff --git a/Sources/ConsoleApp1/Program.cs b/Sources/ConsoleApp1/Program.cs new file mode 100644 index 0000000..5f72681 --- /dev/null +++ b/Sources/ConsoleApp1/Program.cs @@ -0,0 +1,9 @@ +using CoreLibrary.Persistance; +using CoreLibrary.Joueurs; + +PersistanceJSON p = new(); + +List mesJoueurs = new List([ + new Joueur("Céleste"), + new Joueur("Pauline") +]); diff --git a/Sources/CoreLibrary/CoreLibrary.csproj b/Sources/CoreLibrary/CoreLibrary.csproj index fa71b7a..af4eedb 100644 --- a/Sources/CoreLibrary/CoreLibrary.csproj +++ b/Sources/CoreLibrary/CoreLibrary.csproj @@ -6,4 +6,8 @@ enable + + + + diff --git a/Sources/CoreLibrary/Partie.cs b/Sources/CoreLibrary/Partie.cs index 53646ba..901d154 100644 --- a/Sources/CoreLibrary/Partie.cs +++ b/Sources/CoreLibrary/Partie.cs @@ -115,8 +115,6 @@ namespace CoreLibrary { Regles = regles; Persistance = persistance; - - ChargerPartie(); } /// @@ -181,7 +179,6 @@ namespace CoreLibrary if (++courant == joueurs.Count) courant = 0; QuandPasserMain(); - SauvegarderPartie(); if (courant == 0 && (plateauCourant.Tour > Regles.TourMaximum || plateaux.Where(plateau => plateau.Victoire).Any())) { @@ -213,28 +210,5 @@ namespace CoreLibrary QuandPartieTerminee(gagnants, perdants); } - - /// - /// Sauvegarder la partie - /// - private void SauvegarderPartie() - { - Persistance.EnregistrerParties(new List { this }); - } - - /// - /// Charger la partie - /// - private void ChargerPartie() - { - var parties = Persistance.ChargerParties(); - if (parties.Any()) - { - var partie = parties.First(); - joueurs.AddRange(partie.joueurs); - plateaux.AddRange(partie.plateaux); - courant = partie.courant; - } - } } } diff --git a/Sources/CoreLibrary/Persistance/IPersistance.cs b/Sources/CoreLibrary/Persistance/IPersistance.cs index 1d57c77..94e8ab6 100644 --- a/Sources/CoreLibrary/Persistance/IPersistance.cs +++ b/Sources/CoreLibrary/Persistance/IPersistance.cs @@ -1,17 +1,11 @@ -using CoreLibrary.Joueurs; + using CoreLibrary.Joueurs; namespace CoreLibrary.Persistance { public interface IPersistance { - public bool EstEnregistre { get; } + public T[] Charger(); - public List ChargerJoueurs(); - - public List ChargerParties(); - - public void EnregistrerJoueurs(List joueurs); - - public void EnregistrerParties(List parties); + public void Enregistrer(T[] elements); } } diff --git a/Sources/CoreLibrary/Persistance/Manager.cs b/Sources/CoreLibrary/Persistance/Manager.cs deleted file mode 100644 index 93771fc..0000000 --- a/Sources/CoreLibrary/Persistance/Manager.cs +++ /dev/null @@ -1,50 +0,0 @@ -using CoreLibrary.Joueurs; -using CoreLibrary.Persistance; -using System.Runtime.InteropServices; - -namespace CoreLibrary.Manager -{ - public class Manager : IDisposable - { - private bool estDetruit; - - private readonly IPersistance persistance; - - private readonly List joueurs; - public IReadOnlyCollection Joueurs => joueurs.AsReadOnly(); - - private readonly List parties; - public IReadOnlyCollection Parties => parties.AsReadOnly(); - - public Manager(IPersistance persistance) - { - this.persistance = persistance ?? throw new ArgumentNullException(nameof(persistance)); - joueurs = this.persistance.ChargerJoueurs() ?? new List(); - parties = this.persistance.ChargerParties() ?? new List(); - } - - public void Dispose() - { - Dispose(true); - GC.SuppressFinalize(this); - } - - protected virtual void Dispose(bool detruire) - { - if (estDetruit) return; - - if (detruire) - { - persistance.EnregistrerJoueurs(joueurs); - persistance.EnregistrerParties(parties); - } - - estDetruit = true; - } - - ~Manager() - { - Dispose(false); - } - } -} diff --git a/Sources/CoreLibrary/Persistance/Persistance.cs b/Sources/CoreLibrary/Persistance/Persistance.cs deleted file mode 100644 index 5117ac0..0000000 --- a/Sources/CoreLibrary/Persistance/Persistance.cs +++ /dev/null @@ -1,91 +0,0 @@ -using CoreLibrary.Joueurs; -using System.Runtime.Serialization.Json; -using System.Text; -using System.Text.Json; - -namespace CoreLibrary.Persistance -{ - public class Persistance : IPersistance - { - private readonly string joueursFilePath = "joueurs.json"; - private readonly string partiesFilePath = "parties.json"; - private readonly string ancienRepertoire = Directory.GetCurrentDirectory(); - public bool EstEnregistre { get; private set; } - - public List ChargerJoueurs() - { - if (!File.Exists(joueursFilePath)) - { - return new List(); - } - - DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(List)); - List joueurs; - - using (FileStream s = File.OpenRead(joueursFilePath)) - { - joueurs = jsonSerializer.ReadObject(s) as List; - } - - return joueurs; - } - - public List ChargerParties() - { - if (!File.Exists(partiesFilePath)) - { - return new List(); - } - - DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(List)); - List parties; - - using (FileStream s = File.OpenRead(partiesFilePath)) - { - parties = jsonSerializer.ReadObject(s) as List; - } - - return parties; - } - - public void EnregistrerJoueurs(List joueurs) - { - DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(List)); - - using (FileStream s = File.Create(Path.Combine(joueursFilePath, "../.."))) - { - using (var writer = JsonReaderWriterFactory.CreateJsonWriter( - s, - Encoding.UTF8, - false, - true)) - { - jsonSerializer.WriteObject(writer, joueurs); - } - } - - EstEnregistre = true; - Directory.SetCurrentDirectory(ancienRepertoire); - } - - public void EnregistrerParties(List parties) - { - DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(List)); - - using (FileStream s = File.Create(Path.Combine(partiesFilePath, "../.."))) - { - using (var writer = JsonReaderWriterFactory.CreateJsonWriter( - s, - Encoding.UTF8, - false, - true)) - { - jsonSerializer.WriteObject(writer, parties); - } - } - - EstEnregistre = true; - Directory.SetCurrentDirectory(ancienRepertoire); - } - } -} \ No newline at end of file diff --git a/Sources/CoreLibrary/Persistance/PersistanceJSON.cs b/Sources/CoreLibrary/Persistance/PersistanceJSON.cs new file mode 100644 index 0000000..9f03a23 --- /dev/null +++ b/Sources/CoreLibrary/Persistance/PersistanceJSON.cs @@ -0,0 +1,69 @@ +using CoreLibrary.Joueurs; +using System.Runtime.Serialization.Json; +using System.Text; +using System.Xml; + +namespace CoreLibrary.Persistance +{ + public class PersistanceJSON : IPersistance + { + + public T[] Charger() + { + string fichier = $"{nameof(T)}.json"; + string ancienDossier = Directory.GetCurrentDirectory(); + + Directory.SetCurrentDirectory(Path.Combine(ancienDossier, "../../../../")); + + if(!Directory.Exists("Fichiers") || !File.Exists(fichier)) + { + Directory.SetCurrentDirectory(ancienDossier); + return []; + } + + Directory.SetCurrentDirectory(Path.Combine(Directory.GetCurrentDirectory(), "Fichiers")); + + DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(IEnumerable)); + T[] elements; + + using (FileStream s = File.OpenRead(fichier)) + { + elements = jsonSerializer.ReadObject(s) as T[]; + } + + Directory.SetCurrentDirectory(ancienDossier); + return elements; + } + + public void Enregistrer(T[] elements) + { + string fichier = $"{nameof(T)}.json"; + string ancienDossier = Directory.GetCurrentDirectory(); + + Directory.SetCurrentDirectory(Path.Combine(ancienDossier, "../../../../")); + + if (!Directory.Exists("Fichiers")) + { + Directory.CreateDirectory("Fichiers"); + } + + Directory.SetCurrentDirectory(Path.Combine(Directory.GetCurrentDirectory(), "Fichiers")); + + DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(List)); + + using(FileStream s = File.Create(fichier)) + { + using(XmlDictionaryWriter writer = JsonReaderWriterFactory.CreateJsonWriter( + s, + Encoding.UTF8, + false, + true)) + { + jsonSerializer.WriteObject(writer, elements); + } + } + + Directory.SetCurrentDirectory(ancienDossier); + } + } +} \ No newline at end of file diff --git a/Sources/Fichiers/T.json b/Sources/Fichiers/T.json new file mode 100644 index 0000000..e69de29 diff --git a/Sources/MauiSpark/MauiProgram.cs b/Sources/MauiSpark/MauiProgram.cs index 595afed..a44a012 100644 --- a/Sources/MauiSpark/MauiProgram.cs +++ b/Sources/MauiSpark/MauiProgram.cs @@ -1,13 +1,9 @@ -using CoreLibrary.Manager; -using CoreLibrary.Persistance; -using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging; namespace MauiSpark { public static class MauiProgram { - public static Manager Manager { get; private set; } = new Manager(new Persistance()); - public static MauiApp CreateMauiApp() { var builder = MauiApp.CreateBuilder(); diff --git a/Sources/mastermind.sln b/Sources/mastermind.sln index 806d18f..bc5886c 100644 --- a/Sources/mastermind.sln +++ b/Sources/mastermind.sln @@ -9,11 +9,13 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ConsoleApp", "ConsoleApp\Co EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MauiSpark", "MauiSpark\MauiSpark.csproj", "{BD22A919-E40E-4791-A6B0-2B8D37BBE834}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnitTesting", "UnitTesting\UnitTesting.csproj", "{A2182054-C0D1-46D6-BD39-F3F7926CE2DD}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UnitTesting", "UnitTesting\UnitTesting.csproj", "{A2182054-C0D1-46D6-BD39-F3F7926CE2DD}" ProjectSection(ProjectDependencies) = postProject {341FB405-085D-4C34-B395-64EF0F9B93E0} = {341FB405-085D-4C34-B395-64EF0F9B93E0} EndProjectSection EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ConsoleApp1", "ConsoleApp1\ConsoleApp1.csproj", "{0A48983C-0251-4039-895E-587CD7F8E1C6}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -38,6 +40,10 @@ Global {A2182054-C0D1-46D6-BD39-F3F7926CE2DD}.Debug|Any CPU.Build.0 = Debug|Any CPU {A2182054-C0D1-46D6-BD39-F3F7926CE2DD}.Release|Any CPU.ActiveCfg = Release|Any CPU {A2182054-C0D1-46D6-BD39-F3F7926CE2DD}.Release|Any CPU.Build.0 = Release|Any CPU + {0A48983C-0251-4039-895E-587CD7F8E1C6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0A48983C-0251-4039-895E-587CD7F8E1C6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0A48983C-0251-4039-895E-587CD7F8E1C6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0A48983C-0251-4039-895E-587CD7F8E1C6}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE From bff48a53c084fd381c25b7e7147762ca8bb972e0 Mon Sep 17 00:00:00 2001 From: "pauline.prady" Date: Fri, 31 May 2024 11:03:14 +0200 Subject: [PATCH 5/8] Manager --- Sources/CoreLibrary/Manager/Manager.cs | 41 ++++++++++++++++++++++++++ Sources/MauiSpark/MauiProgram.cs | 6 +++- 2 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 Sources/CoreLibrary/Manager/Manager.cs diff --git a/Sources/CoreLibrary/Manager/Manager.cs b/Sources/CoreLibrary/Manager/Manager.cs new file mode 100644 index 0000000..30c38a9 --- /dev/null +++ b/Sources/CoreLibrary/Manager/Manager.cs @@ -0,0 +1,41 @@ +using CoreLibrary.Joueurs; +using CoreLibrary.Persistance; + +namespace CoreLibrary.Manager +{ + public class Manager + { + public Partie? partie; + public Joueur[] joueurs; + public Partie[] parties; + private IPersistance persistance; + + + public Manager(IPersistance persistance) + { + this.persistance = persistance; + joueurs = persistance.Charger(); + parties = persistance.Charger(); + } + + public void NouvellePartie(Partie partie) + { + this.partie = partie; + parties.Append(partie); + } + + public Joueur DemanderJoueur(string nom) + { + foreach (Joueur joueur in joueurs) + { + if (joueur.Nom == nom) + return joueur; + + } + Joueur nouveauJoueur = new Joueur(nom); + joueurs.Append(nouveauJoueur); + return nouveauJoueur; + } + + } +} diff --git a/Sources/MauiSpark/MauiProgram.cs b/Sources/MauiSpark/MauiProgram.cs index a44a012..5eedafe 100644 --- a/Sources/MauiSpark/MauiProgram.cs +++ b/Sources/MauiSpark/MauiProgram.cs @@ -1,9 +1,13 @@ -using Microsoft.Extensions.Logging; +using CoreLibrary.Manager; +using CoreLibrary.Persistance; +using Microsoft.Extensions.Logging; namespace MauiSpark { public static class MauiProgram { + public static Manager Manager { get; private set; } = new Manager(new PersistanceJSON()); + public static MauiApp CreateMauiApp() { var builder = MauiApp.CreateBuilder(); From 9afc65ddb1e9cd0b90af88e37488f742eb55cfe9 Mon Sep 17 00:00:00 2001 From: "camille.turpin-etienne" Date: Fri, 31 May 2024 11:03:39 +0200 Subject: [PATCH 6/8] Persistance --- .gitignore | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 1e3c254..8adc7a9 100644 --- a/.gitignore +++ b/.gitignore @@ -859,4 +859,8 @@ FodyWeavers.xsd *.msp # JetBrains Rider -*.sln.iml \ No newline at end of file +*.sln.iml +/Sources/MauiSpark/Pages/Views/CTableauScore.xaml +/Sources/MauiSpark/Pages/Views/CTableauScore.xaml.cs +/Sources/MauiSpark/Pages/Views/UsernameEntryView.xaml +/Sources/MauiSpark/Pages/Views/UsernameEntryView.xaml.cs From ac558fddf03de57cc24ea42e216f795b20939a6d Mon Sep 17 00:00:00 2001 From: "camille.turpin-etienne" Date: Fri, 31 May 2024 11:04:38 +0200 Subject: [PATCH 7/8] Persistance --- .gitignore | 6 +- Sources/ConsoleApp1/Program.cs | 25 ++ .../Persistance/PersistanceJSON.cs | 23 +- Sources/Fichiers/T.json | 0 .../MauiSpark/Pages/Views/CTableauScore.xaml | 23 ++ .../Pages/Views/CTableauScore.xaml.cs | 245 ++++++++++++++++++ .../Pages/Views/UsernameEntryView.xaml | 24 ++ .../Pages/Views/UsernameEntryView.xaml.cs | 9 + 8 files changed, 343 insertions(+), 12 deletions(-) delete mode 100644 Sources/Fichiers/T.json create mode 100644 Sources/MauiSpark/Pages/Views/CTableauScore.xaml create mode 100644 Sources/MauiSpark/Pages/Views/CTableauScore.xaml.cs create mode 100644 Sources/MauiSpark/Pages/Views/UsernameEntryView.xaml create mode 100644 Sources/MauiSpark/Pages/Views/UsernameEntryView.xaml.cs diff --git a/.gitignore b/.gitignore index 8adc7a9..1e3c254 100644 --- a/.gitignore +++ b/.gitignore @@ -859,8 +859,4 @@ FodyWeavers.xsd *.msp # JetBrains Rider -*.sln.iml -/Sources/MauiSpark/Pages/Views/CTableauScore.xaml -/Sources/MauiSpark/Pages/Views/CTableauScore.xaml.cs -/Sources/MauiSpark/Pages/Views/UsernameEntryView.xaml -/Sources/MauiSpark/Pages/Views/UsernameEntryView.xaml.cs +*.sln.iml \ No newline at end of file diff --git a/Sources/ConsoleApp1/Program.cs b/Sources/ConsoleApp1/Program.cs index 5f72681..6d47dfe 100644 --- a/Sources/ConsoleApp1/Program.cs +++ b/Sources/ConsoleApp1/Program.cs @@ -1,5 +1,9 @@ using CoreLibrary.Persistance; using CoreLibrary.Joueurs; +using System.Collections.Generic; +using CoreLibrary; +using CoreLibrary.Regles; +using CoreLibrary.Core; PersistanceJSON p = new(); @@ -7,3 +11,24 @@ List mesJoueurs = new List([ new Joueur("Céleste"), new Joueur("Pauline") ]); + + +p.Enregistrer(mesJoueurs.ToArray()); + +IEnumerable element = p.Charger(); + + +foreach (Joueur joueur in element) +{ + Console.WriteLine(joueur.Nom); +} + + +Partie partie1 = new Partie(null, null); +Partie partie2 = new Partie(null, null); + + + +List parties = new List { partie1, partie2 }; + +p.Enregistrer(parties.ToArray()); diff --git a/Sources/CoreLibrary/Persistance/PersistanceJSON.cs b/Sources/CoreLibrary/Persistance/PersistanceJSON.cs index 9f03a23..63cc9a8 100644 --- a/Sources/CoreLibrary/Persistance/PersistanceJSON.cs +++ b/Sources/CoreLibrary/Persistance/PersistanceJSON.cs @@ -10,20 +10,29 @@ namespace CoreLibrary.Persistance public T[] Charger() { - string fichier = $"{nameof(T)}.json"; + string fichier = $"{typeof(T).Name}.json"; string ancienDossier = Directory.GetCurrentDirectory(); Directory.SetCurrentDirectory(Path.Combine(ancienDossier, "../../../../")); - - if(!Directory.Exists("Fichiers") || !File.Exists(fichier)) + Console.WriteLine(Directory.GetCurrentDirectory()); + if(!Directory.Exists("Fichiers")) { Directory.SetCurrentDirectory(ancienDossier); return []; } + else + { + Directory.SetCurrentDirectory(Path.Combine(Directory.GetCurrentDirectory(), "Fichiers")); + } - Directory.SetCurrentDirectory(Path.Combine(Directory.GetCurrentDirectory(), "Fichiers")); + if (!File.Exists(fichier)) + { + Directory.SetCurrentDirectory(ancienDossier); + return []; + } +; - DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(IEnumerable)); + DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(IEnumerable)); T[] elements; using (FileStream s = File.OpenRead(fichier)) @@ -37,7 +46,7 @@ namespace CoreLibrary.Persistance public void Enregistrer(T[] elements) { - string fichier = $"{nameof(T)}.json"; + string fichier = $"{typeof(T).Name}.json"; string ancienDossier = Directory.GetCurrentDirectory(); Directory.SetCurrentDirectory(Path.Combine(ancienDossier, "../../../../")); @@ -49,7 +58,7 @@ namespace CoreLibrary.Persistance Directory.SetCurrentDirectory(Path.Combine(Directory.GetCurrentDirectory(), "Fichiers")); - DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(List)); + DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(IEnumerable)); using(FileStream s = File.Create(fichier)) { diff --git a/Sources/Fichiers/T.json b/Sources/Fichiers/T.json deleted file mode 100644 index e69de29..0000000 diff --git a/Sources/MauiSpark/Pages/Views/CTableauScore.xaml b/Sources/MauiSpark/Pages/Views/CTableauScore.xaml new file mode 100644 index 0000000..3372ef1 --- /dev/null +++ b/Sources/MauiSpark/Pages/Views/CTableauScore.xaml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Sources/MauiSpark/Pages/Views/CTableauScore.xaml.cs b/Sources/MauiSpark/Pages/Views/CTableauScore.xaml.cs new file mode 100644 index 0000000..f16a7e1 --- /dev/null +++ b/Sources/MauiSpark/Pages/Views/CTableauScore.xaml.cs @@ -0,0 +1,245 @@ +using CoreLibrary.Events; +using CoreLibrary.Joueurs; +using CoreLibrary.Manager; +using System.Collections.ObjectModel; +using System.ComponentModel; +using System.Runtime.CompilerServices; + +namespace MauiSpark.Views; + +public class JoueurClassementNbCoupParPartie +{ + private Manager manager; + private Joueur joueur; + + public Joueur Joueur + { + get => joueur; + private set => joueur = value; + } + public int Place + { + get => manager.Joueurs + .OrderBy(joueur => joueur.NbCoutTotal/(joueur.NbPartiePerdue+joueur.NbPartieGagnee+joueur.NbPartieEgalite)).ToList() + .IndexOf(Joueur) + 1; + } + + public int NbCoutMoyen => joueur.NbCoutTotal / (joueur.NbPartiePerdue + joueur.NbPartieGagnee + joueur.NbPartieEgalite); + + public JoueurClassementNbCoupParPartie(Joueur joueur, Manager manager) + { + this.manager = manager; + this.joueur = joueur; + } +} + +public class JoueurClassementPartieGagnee +{ + private Manager manager; + private Joueur joueur; + + public Joueur Joueur + { + get => joueur; + private set => joueur = value; + } + + public int Place + { + get => manager.Joueurs.OrderByDescending(joueur => joueur.NbPartieGagnee).ToList().IndexOf(Joueur) + 1; + } + + public int NbCoutMoyen => joueur.NbCoutTotal / (joueur.NbPartiePerdue + joueur.NbPartieGagnee + joueur.NbPartieEgalite); + + public JoueurClassementPartieGagnee(Joueur joueur, Manager manager) + { + this.manager = manager; + this.joueur = joueur; + } +} + +public class JoueurClassementPartieEgalite +{ + private Manager manager; + private Joueur joueur; + + public Joueur Joueur + { + get => joueur; + private set => joueur = value; + } + + public int Place + { + get => manager.Joueurs.OrderByDescending(joueur => joueur.NbPartieEgalite).ToList().IndexOf(joueur)+1; + } + + public int NbCoutMoyen => joueur.NbCoutTotal / (joueur.NbPartiePerdue + joueur.NbPartieGagnee + joueur.NbPartieEgalite); + + public JoueurClassementPartieEgalite(Joueur joueur, Manager manager) + { + this.manager = manager; + this.joueur = joueur; + } +} + +public class JoueurClassementPartiePerdue +{ + private Manager manager; + private Joueur joueur; + + public Joueur Joueur + { + get => joueur; + private set => joueur = value; + } + + public int Place + { + get => manager.Joueurs.OrderByDescending(joueur => joueur.NbPartiePerdue).ToList().IndexOf(joueur)+1; + } + + public int NbCoutMoyen => joueur.NbCoutTotal / (joueur.NbPartiePerdue + joueur.NbPartieGagnee + joueur.NbPartieEgalite); + + public JoueurClassementPartiePerdue(Joueur joueur, Manager manager) + { + this.manager = manager; + this.joueur = joueur; + } +} + +public class JoueurClassementAlphabet +{ + private Manager manager; + private Joueur joueur; + + public Joueur Joueur + { + get => joueur; + private set => joueur = value; + } + + public int Place + { + get => manager.Joueurs + .OrderBy(joueur => joueur.NbCoutTotal / (joueur.NbPartiePerdue + joueur.NbPartieGagnee + joueur.NbPartieEgalite)).ToList() + .IndexOf(Joueur) + 1; + } + + public int NbCoutMoyen => joueur.NbCoutTotal / (joueur.NbPartiePerdue + joueur.NbPartieGagnee + joueur.NbPartieEgalite); + + public JoueurClassementAlphabet(Joueur joueur, Manager manager) + { + this.manager = manager; + this.joueur = joueur; + } +} + + public partial class CTableauScore : ContentView +{ + public int NbCliquer { get; set; } = 0; + + public IEnumerable GetClassementNbCoupParPartie() + { + if(NbCliquer % 2 == 0) + { + NbCliquer++; + return MauiProgram.Manager.Joueurs + .OrderBy(joueur => joueur.NbCoutTotal / (joueur.NbPartiePerdue + joueur.NbPartieGagnee + joueur.NbPartieEgalite)) + .Select(joueur => new JoueurClassementNbCoupParPartie(joueur, MauiProgram.Manager)); + + } + else + { + NbCliquer++; + return MauiProgram.Manager.Joueurs + .OrderByDescending(joueur => joueur.NbCoutTotal / (joueur.NbPartiePerdue + joueur.NbPartieGagnee + joueur.NbPartieEgalite)) + .Select(joueur => new JoueurClassementNbCoupParPartie(joueur, MauiProgram.Manager)); + } + } + + public IEnumerable GetClassementPartieGagnee() + { + if(NbCliquer % 2 == 0) + { + NbCliquer++; + return MauiProgram.Manager.Joueurs + .OrderByDescending(joueur => joueur.NbPartieGagnee) + .Select(joueur => new JoueurClassementPartieGagnee(joueur, MauiProgram.Manager)); + } + else + { + NbCliquer++; + return MauiProgram.Manager.Joueurs + .OrderBy(joueur => joueur.NbPartieGagnee) + .Select(joueur => new JoueurClassementPartieGagnee(joueur, MauiProgram.Manager)); + } + + } + + public IEnumerable GetClassementPartieEgalite() + { + if(NbCliquer % 2 == 0) + { + NbCliquer++; + return MauiProgram.Manager.Joueurs + .OrderByDescending(joueur => joueur.NbPartieEgalite) + .Select(joueur => new JoueurClassementPartieEgalite(joueur, MauiProgram.Manager)); + } + else + { + NbCliquer++; + return MauiProgram.Manager.Joueurs + .OrderBy(joueur => joueur.NbPartieEgalite) + .Select(joueur => new JoueurClassementPartieEgalite(joueur, MauiProgram.Manager)); + } + + } + + public IEnumerable GetClassementPartiePerdue() + { + if(NbCliquer % 2 == 0) + { + NbCliquer++; + return MauiProgram.Manager.Joueurs + .OrderByDescending(joueur => joueur.NbPartiePerdue) + .Select(joueur => new JoueurClassementPartiePerdue(joueur, MauiProgram.Manager)); + } + else + { + NbCliquer++; +; return MauiProgram.Manager.Joueurs + .OrderBy(joueur => joueur.NbPartiePerdue) + .Select(joueur => new JoueurClassementPartiePerdue(joueur, MauiProgram.Manager)); + } + + } + + public IEnumerable GetClassementAlphabet() + { + if(NbCliquer % 2 == 0) + { + NbCliquer++; + return MauiProgram.Manager.Joueurs + .OrderBy(joueur => joueur.Nom) + .Select(joueur => new JoueurClassementAlphabet(joueur, MauiProgram.Manager)); + } + else + { + NbCliquer++; + return MauiProgram.Manager.Joueurs + .OrderByDescending(joueur => joueur.Nom) + .Select(joueur => new JoueurClassementAlphabet(joueur, MauiProgram.Manager)); + } + + } + public CTableauScore() + { + InitializeComponent(); + } + + public void UpdateClassement(Func> getClassement) + { + BindingContext = getClassement(); + } +} \ No newline at end of file diff --git a/Sources/MauiSpark/Pages/Views/UsernameEntryView.xaml b/Sources/MauiSpark/Pages/Views/UsernameEntryView.xaml new file mode 100644 index 0000000..7c7e294 --- /dev/null +++ b/Sources/MauiSpark/Pages/Views/UsernameEntryView.xaml @@ -0,0 +1,24 @@ + + + + + + + + diff --git a/Sources/MauiSpark/Pages/Views/UsernameEntryView.xaml.cs b/Sources/MauiSpark/Pages/Views/UsernameEntryView.xaml.cs new file mode 100644 index 0000000..fcc56ee --- /dev/null +++ b/Sources/MauiSpark/Pages/Views/UsernameEntryView.xaml.cs @@ -0,0 +1,9 @@ +namespace MauiSpark.Views; + +public partial class UsernameEntryView : ContentView +{ + public UsernameEntryView() + { + InitializeComponent(); + } +} \ No newline at end of file From 9941dabeed1cfad1f326f12a8fd8b32c91931cad Mon Sep 17 00:00:00 2001 From: "camille.turpin-etienne" Date: Fri, 31 May 2024 11:47:58 +0200 Subject: [PATCH 8/8] Persitance marche --- Sources/CoreLibrary/Partie.cs | 2 +- Sources/MauiSpark/Pages/Mode.xaml.cs | 8 +- .../MauiSpark/Pages/Views/CTableauScore.xaml | 23 -- .../Pages/Views/CTableauScore.xaml.cs | 245 ------------------ .../Pages/Views/UsernameEntryView.xaml | 24 -- .../Pages/Views/UsernameEntryView.xaml.cs | 9 - Sources/MauiSpark/Views/CTableauScore.xaml.cs | 30 +-- 7 files changed, 21 insertions(+), 320 deletions(-) delete mode 100644 Sources/MauiSpark/Pages/Views/CTableauScore.xaml delete mode 100644 Sources/MauiSpark/Pages/Views/CTableauScore.xaml.cs delete mode 100644 Sources/MauiSpark/Pages/Views/UsernameEntryView.xaml delete mode 100644 Sources/MauiSpark/Pages/Views/UsernameEntryView.xaml.cs diff --git a/Sources/CoreLibrary/Partie.cs b/Sources/CoreLibrary/Partie.cs index 901d154..89bb0fc 100644 --- a/Sources/CoreLibrary/Partie.cs +++ b/Sources/CoreLibrary/Partie.cs @@ -179,7 +179,7 @@ namespace CoreLibrary if (++courant == joueurs.Count) courant = 0; QuandPasserMain(); - + if (courant == 0 && (plateauCourant.Tour > Regles.TourMaximum || plateaux.Where(plateau => plateau.Victoire).Any())) { Terminee(); diff --git a/Sources/MauiSpark/Pages/Mode.xaml.cs b/Sources/MauiSpark/Pages/Mode.xaml.cs index 5138d19..bf134a3 100644 --- a/Sources/MauiSpark/Pages/Mode.xaml.cs +++ b/Sources/MauiSpark/Pages/Mode.xaml.cs @@ -1,8 +1,9 @@ using CoreLibrary; using CoreLibrary.Events; +using CoreLibrary.Manager; using CoreLibrary.Persistance; using CoreLibrary.Regles; - +using MauiSpark; namespace MauiSpark.Pages; public partial class Mode : ContentPage @@ -17,8 +18,9 @@ public partial class Mode : ContentPage private void QuandReglesClassiques(Object? sender, EventArgs e) { - Partie partie = new Partie(new ReglesClassiques(), new Persistance()); - partie.DemanderNom += QuandDemanderNom; + Partie partie = new Partie(new ReglesClassiques(), new PersistanceJSON()); + + partie.DemanderNom += QuandDemanderNom; partie.Jouer(); } diff --git a/Sources/MauiSpark/Pages/Views/CTableauScore.xaml b/Sources/MauiSpark/Pages/Views/CTableauScore.xaml deleted file mode 100644 index 3372ef1..0000000 --- a/Sources/MauiSpark/Pages/Views/CTableauScore.xaml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Sources/MauiSpark/Pages/Views/CTableauScore.xaml.cs b/Sources/MauiSpark/Pages/Views/CTableauScore.xaml.cs deleted file mode 100644 index f16a7e1..0000000 --- a/Sources/MauiSpark/Pages/Views/CTableauScore.xaml.cs +++ /dev/null @@ -1,245 +0,0 @@ -using CoreLibrary.Events; -using CoreLibrary.Joueurs; -using CoreLibrary.Manager; -using System.Collections.ObjectModel; -using System.ComponentModel; -using System.Runtime.CompilerServices; - -namespace MauiSpark.Views; - -public class JoueurClassementNbCoupParPartie -{ - private Manager manager; - private Joueur joueur; - - public Joueur Joueur - { - get => joueur; - private set => joueur = value; - } - public int Place - { - get => manager.Joueurs - .OrderBy(joueur => joueur.NbCoutTotal/(joueur.NbPartiePerdue+joueur.NbPartieGagnee+joueur.NbPartieEgalite)).ToList() - .IndexOf(Joueur) + 1; - } - - public int NbCoutMoyen => joueur.NbCoutTotal / (joueur.NbPartiePerdue + joueur.NbPartieGagnee + joueur.NbPartieEgalite); - - public JoueurClassementNbCoupParPartie(Joueur joueur, Manager manager) - { - this.manager = manager; - this.joueur = joueur; - } -} - -public class JoueurClassementPartieGagnee -{ - private Manager manager; - private Joueur joueur; - - public Joueur Joueur - { - get => joueur; - private set => joueur = value; - } - - public int Place - { - get => manager.Joueurs.OrderByDescending(joueur => joueur.NbPartieGagnee).ToList().IndexOf(Joueur) + 1; - } - - public int NbCoutMoyen => joueur.NbCoutTotal / (joueur.NbPartiePerdue + joueur.NbPartieGagnee + joueur.NbPartieEgalite); - - public JoueurClassementPartieGagnee(Joueur joueur, Manager manager) - { - this.manager = manager; - this.joueur = joueur; - } -} - -public class JoueurClassementPartieEgalite -{ - private Manager manager; - private Joueur joueur; - - public Joueur Joueur - { - get => joueur; - private set => joueur = value; - } - - public int Place - { - get => manager.Joueurs.OrderByDescending(joueur => joueur.NbPartieEgalite).ToList().IndexOf(joueur)+1; - } - - public int NbCoutMoyen => joueur.NbCoutTotal / (joueur.NbPartiePerdue + joueur.NbPartieGagnee + joueur.NbPartieEgalite); - - public JoueurClassementPartieEgalite(Joueur joueur, Manager manager) - { - this.manager = manager; - this.joueur = joueur; - } -} - -public class JoueurClassementPartiePerdue -{ - private Manager manager; - private Joueur joueur; - - public Joueur Joueur - { - get => joueur; - private set => joueur = value; - } - - public int Place - { - get => manager.Joueurs.OrderByDescending(joueur => joueur.NbPartiePerdue).ToList().IndexOf(joueur)+1; - } - - public int NbCoutMoyen => joueur.NbCoutTotal / (joueur.NbPartiePerdue + joueur.NbPartieGagnee + joueur.NbPartieEgalite); - - public JoueurClassementPartiePerdue(Joueur joueur, Manager manager) - { - this.manager = manager; - this.joueur = joueur; - } -} - -public class JoueurClassementAlphabet -{ - private Manager manager; - private Joueur joueur; - - public Joueur Joueur - { - get => joueur; - private set => joueur = value; - } - - public int Place - { - get => manager.Joueurs - .OrderBy(joueur => joueur.NbCoutTotal / (joueur.NbPartiePerdue + joueur.NbPartieGagnee + joueur.NbPartieEgalite)).ToList() - .IndexOf(Joueur) + 1; - } - - public int NbCoutMoyen => joueur.NbCoutTotal / (joueur.NbPartiePerdue + joueur.NbPartieGagnee + joueur.NbPartieEgalite); - - public JoueurClassementAlphabet(Joueur joueur, Manager manager) - { - this.manager = manager; - this.joueur = joueur; - } -} - - public partial class CTableauScore : ContentView -{ - public int NbCliquer { get; set; } = 0; - - public IEnumerable GetClassementNbCoupParPartie() - { - if(NbCliquer % 2 == 0) - { - NbCliquer++; - return MauiProgram.Manager.Joueurs - .OrderBy(joueur => joueur.NbCoutTotal / (joueur.NbPartiePerdue + joueur.NbPartieGagnee + joueur.NbPartieEgalite)) - .Select(joueur => new JoueurClassementNbCoupParPartie(joueur, MauiProgram.Manager)); - - } - else - { - NbCliquer++; - return MauiProgram.Manager.Joueurs - .OrderByDescending(joueur => joueur.NbCoutTotal / (joueur.NbPartiePerdue + joueur.NbPartieGagnee + joueur.NbPartieEgalite)) - .Select(joueur => new JoueurClassementNbCoupParPartie(joueur, MauiProgram.Manager)); - } - } - - public IEnumerable GetClassementPartieGagnee() - { - if(NbCliquer % 2 == 0) - { - NbCliquer++; - return MauiProgram.Manager.Joueurs - .OrderByDescending(joueur => joueur.NbPartieGagnee) - .Select(joueur => new JoueurClassementPartieGagnee(joueur, MauiProgram.Manager)); - } - else - { - NbCliquer++; - return MauiProgram.Manager.Joueurs - .OrderBy(joueur => joueur.NbPartieGagnee) - .Select(joueur => new JoueurClassementPartieGagnee(joueur, MauiProgram.Manager)); - } - - } - - public IEnumerable GetClassementPartieEgalite() - { - if(NbCliquer % 2 == 0) - { - NbCliquer++; - return MauiProgram.Manager.Joueurs - .OrderByDescending(joueur => joueur.NbPartieEgalite) - .Select(joueur => new JoueurClassementPartieEgalite(joueur, MauiProgram.Manager)); - } - else - { - NbCliquer++; - return MauiProgram.Manager.Joueurs - .OrderBy(joueur => joueur.NbPartieEgalite) - .Select(joueur => new JoueurClassementPartieEgalite(joueur, MauiProgram.Manager)); - } - - } - - public IEnumerable GetClassementPartiePerdue() - { - if(NbCliquer % 2 == 0) - { - NbCliquer++; - return MauiProgram.Manager.Joueurs - .OrderByDescending(joueur => joueur.NbPartiePerdue) - .Select(joueur => new JoueurClassementPartiePerdue(joueur, MauiProgram.Manager)); - } - else - { - NbCliquer++; -; return MauiProgram.Manager.Joueurs - .OrderBy(joueur => joueur.NbPartiePerdue) - .Select(joueur => new JoueurClassementPartiePerdue(joueur, MauiProgram.Manager)); - } - - } - - public IEnumerable GetClassementAlphabet() - { - if(NbCliquer % 2 == 0) - { - NbCliquer++; - return MauiProgram.Manager.Joueurs - .OrderBy(joueur => joueur.Nom) - .Select(joueur => new JoueurClassementAlphabet(joueur, MauiProgram.Manager)); - } - else - { - NbCliquer++; - return MauiProgram.Manager.Joueurs - .OrderByDescending(joueur => joueur.Nom) - .Select(joueur => new JoueurClassementAlphabet(joueur, MauiProgram.Manager)); - } - - } - public CTableauScore() - { - InitializeComponent(); - } - - public void UpdateClassement(Func> getClassement) - { - BindingContext = getClassement(); - } -} \ No newline at end of file diff --git a/Sources/MauiSpark/Pages/Views/UsernameEntryView.xaml b/Sources/MauiSpark/Pages/Views/UsernameEntryView.xaml deleted file mode 100644 index 7c7e294..0000000 --- a/Sources/MauiSpark/Pages/Views/UsernameEntryView.xaml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - diff --git a/Sources/MauiSpark/Pages/Views/UsernameEntryView.xaml.cs b/Sources/MauiSpark/Pages/Views/UsernameEntryView.xaml.cs deleted file mode 100644 index fcc56ee..0000000 --- a/Sources/MauiSpark/Pages/Views/UsernameEntryView.xaml.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace MauiSpark.Views; - -public partial class UsernameEntryView : ContentView -{ - public UsernameEntryView() - { - InitializeComponent(); - } -} \ No newline at end of file diff --git a/Sources/MauiSpark/Views/CTableauScore.xaml.cs b/Sources/MauiSpark/Views/CTableauScore.xaml.cs index 0085d27..5d8c197 100644 --- a/Sources/MauiSpark/Views/CTableauScore.xaml.cs +++ b/Sources/MauiSpark/Views/CTableauScore.xaml.cs @@ -15,7 +15,7 @@ public class JoueurClassementNbCoupParPartie } public int Place { - get => manager.Joueurs + get => manager.joueurs .OrderBy(joueur => joueur.NbCoutTotal/(joueur.NbPartiePerdue+joueur.NbPartieGagnee+joueur.NbPartieEgalite)).ToList() .IndexOf(Joueur) + 1; } @@ -42,7 +42,7 @@ public class JoueurClassementPartieGagnee public int Place { - get => manager.Joueurs.OrderByDescending(joueur => joueur.NbPartieGagnee).ToList().IndexOf(Joueur) + 1; + get => manager.joueurs.OrderByDescending(joueur => joueur.NbPartieGagnee).ToList().IndexOf(Joueur) + 1; } public int NbCoutMoyen => joueur.NbCoutTotal / (joueur.NbPartiePerdue + joueur.NbPartieGagnee + joueur.NbPartieEgalite); @@ -67,7 +67,7 @@ public class JoueurClassementPartieEgalite public int Place { - get => manager.Joueurs.OrderByDescending(joueur => joueur.NbPartieEgalite).ToList().IndexOf(joueur)+1; + get => manager.joueurs.OrderByDescending(joueur => joueur.NbPartieEgalite).ToList().IndexOf(joueur)+1; } public int NbCoutMoyen => joueur.NbCoutTotal / (joueur.NbPartiePerdue + joueur.NbPartieGagnee + joueur.NbPartieEgalite); @@ -92,7 +92,7 @@ public class JoueurClassementPartiePerdue public int Place { - get => manager.Joueurs.OrderByDescending(joueur => joueur.NbPartiePerdue).ToList().IndexOf(joueur)+1; + get => manager.joueurs.OrderByDescending(joueur => joueur.NbPartiePerdue).ToList().IndexOf(joueur)+1; } public int NbCoutMoyen => joueur.NbCoutTotal / (joueur.NbPartiePerdue + joueur.NbPartieGagnee + joueur.NbPartieEgalite); @@ -117,7 +117,7 @@ public class JoueurClassementAlphabet public int Place { - get => manager.Joueurs + get => manager.joueurs .OrderBy(joueur => joueur.NbCoutTotal / (joueur.NbPartiePerdue + joueur.NbPartieGagnee + joueur.NbPartieEgalite)).ToList() .IndexOf(Joueur) + 1; } @@ -140,7 +140,7 @@ public partial class CTableauScore : ContentView if(NbCliquer % 2 == 0) { NbCliquer++; - return MauiProgram.Manager.Joueurs + return MauiProgram.Manager.joueurs .OrderBy(joueur => joueur.NbCoutTotal / (joueur.NbPartiePerdue + joueur.NbPartieGagnee + joueur.NbPartieEgalite)) .Select(joueur => new JoueurClassementNbCoupParPartie(joueur, MauiProgram.Manager)); @@ -148,7 +148,7 @@ public partial class CTableauScore : ContentView else { NbCliquer++; - return MauiProgram.Manager.Joueurs + return MauiProgram.Manager.joueurs .OrderByDescending(joueur => joueur.NbCoutTotal / (joueur.NbPartiePerdue + joueur.NbPartieGagnee + joueur.NbPartieEgalite)) .Select(joueur => new JoueurClassementNbCoupParPartie(joueur, MauiProgram.Manager)); } @@ -159,14 +159,14 @@ public partial class CTableauScore : ContentView if(NbCliquer % 2 == 0) { NbCliquer++; - return MauiProgram.Manager.Joueurs + return MauiProgram.Manager.joueurs .OrderByDescending(joueur => joueur.NbPartieGagnee) .Select(joueur => new JoueurClassementPartieGagnee(joueur, MauiProgram.Manager)); } else { NbCliquer++; - return MauiProgram.Manager.Joueurs + return MauiProgram.Manager.joueurs .OrderBy(joueur => joueur.NbPartieGagnee) .Select(joueur => new JoueurClassementPartieGagnee(joueur, MauiProgram.Manager)); } @@ -178,14 +178,14 @@ public partial class CTableauScore : ContentView if(NbCliquer % 2 == 0) { NbCliquer++; - return MauiProgram.Manager.Joueurs + return MauiProgram.Manager.joueurs .OrderByDescending(joueur => joueur.NbPartieEgalite) .Select(joueur => new JoueurClassementPartieEgalite(joueur, MauiProgram.Manager)); } else { NbCliquer++; - return MauiProgram.Manager.Joueurs + return MauiProgram.Manager.joueurs .OrderBy(joueur => joueur.NbPartieEgalite) .Select(joueur => new JoueurClassementPartieEgalite(joueur, MauiProgram.Manager)); } @@ -197,14 +197,14 @@ public partial class CTableauScore : ContentView if(NbCliquer % 2 == 0) { NbCliquer++; - return MauiProgram.Manager.Joueurs + return MauiProgram.Manager.joueurs .OrderByDescending(joueur => joueur.NbPartiePerdue) .Select(joueur => new JoueurClassementPartiePerdue(joueur, MauiProgram.Manager)); } else { NbCliquer++; -; return MauiProgram.Manager.Joueurs +; return MauiProgram.Manager.joueurs .OrderBy(joueur => joueur.NbPartiePerdue) .Select(joueur => new JoueurClassementPartiePerdue(joueur, MauiProgram.Manager)); } @@ -216,14 +216,14 @@ public partial class CTableauScore : ContentView if(NbCliquer % 2 == 0) { NbCliquer++; - return MauiProgram.Manager.Joueurs + return MauiProgram.Manager.joueurs .OrderBy(joueur => joueur.Nom) .Select(joueur => new JoueurClassementAlphabet(joueur, MauiProgram.Manager)); } else { NbCliquer++; - return MauiProgram.Manager.Joueurs + return MauiProgram.Manager.joueurs .OrderByDescending(joueur => joueur.Nom) .Select(joueur => new JoueurClassementAlphabet(joueur, MauiProgram.Manager)); }