From 0f15fb0e16f569ef6c585f4334134de761dbafe4 Mon Sep 17 00:00:00 2001 From: "nicolas.barbosa" Date: Fri, 31 May 2024 17:22:28 +0200 Subject: [PATCH] Fin de la persistance, besoin de correction condition --- Sources/CoreLibrary/Joueurs/Joueur.cs | 3 +- Sources/CoreLibrary/Manageur/Manageur.cs | 31 +++++++----- Sources/CoreLibrary/Partie.cs | 9 +++- .../CoreLibrary/Persistance/IEstPersistant.cs | 4 ++ .../CoreLibrary/Persistance/IPersistance.cs | 4 +- .../Persistance/PersistanceJSON.cs | 50 +++++++------------ Sources/CoreLibrary/Regles/IRegles.cs | 4 +- Sources/MauiSpark/Pages/ConnexionPage.xaml.cs | 7 ++- Sources/MauiSpark/Pages/Mode.xaml.cs | 2 + Sources/MauiSpark/Pages/Plateau.xaml.cs | 1 - Sources/MauiSpark/Pages/Victoire.xaml.cs | 20 +++++--- 11 files changed, 69 insertions(+), 66 deletions(-) create mode 100644 Sources/CoreLibrary/Persistance/IEstPersistant.cs diff --git a/Sources/CoreLibrary/Joueurs/Joueur.cs b/Sources/CoreLibrary/Joueurs/Joueur.cs index f36d6b3..6c318a0 100644 --- a/Sources/CoreLibrary/Joueurs/Joueur.cs +++ b/Sources/CoreLibrary/Joueurs/Joueur.cs @@ -1,5 +1,6 @@ using CoreLibrary.Core; using CoreLibrary.Events; +using CoreLibrary.Persistance; using System.Runtime.Serialization; namespace CoreLibrary.Joueurs @@ -8,7 +9,7 @@ namespace CoreLibrary.Joueurs /// Classe représentant un joueur. /// [DataContract] - public class Joueur + public class Joueur : IEstPersistant { /// /// Le nom du joueur. diff --git a/Sources/CoreLibrary/Manageur/Manageur.cs b/Sources/CoreLibrary/Manageur/Manageur.cs index 3fcd031..1d594b1 100644 --- a/Sources/CoreLibrary/Manageur/Manageur.cs +++ b/Sources/CoreLibrary/Manageur/Manageur.cs @@ -1,11 +1,11 @@ -using CoreLibrary.Joueurs; +using CoreLibrary.Events; +using CoreLibrary.Joueurs; using CoreLibrary.Persistance; namespace CoreLibrary.Manager { public class Manageur { - public Partie? partie; public List joueurs; public List parties; private IPersistance persistance; @@ -19,26 +19,31 @@ namespace CoreLibrary.Manager public void NouvellePartie(Partie partie) { - this.partie = partie; parties.Add(partie); + + partie.PasserMain += (object? sender, PasserMainEventArgs e) => + { + persistance.Enregistrer(parties.ToArray()); + persistance.Enregistrer(joueurs.ToArray()); + }; + + partie.PartieTerminee += (object? sender, PartieTermineeEventArgs e) => + { + persistance.Enregistrer(parties.ToArray()); + persistance.Enregistrer(joueurs.ToArray()); + }; } public Joueur DemanderJoueur(string nom) { - foreach (Joueur joueur in joueurs) - { + foreach (Joueur joueur in joueurs) + { if (joueur.Nom == nom) - return joueur; + return joueur; } Joueur nouveauJoueur = new Joueur(nom); joueurs.Add(nouveauJoueur); - return nouveauJoueur; - } - - ~Manageur() - { - persistance.Enregistrer(joueurs.ToArray()); - persistance.Enregistrer(parties.ToArray()); + return nouveauJoueur; } } } diff --git a/Sources/CoreLibrary/Partie.cs b/Sources/CoreLibrary/Partie.cs index 21bd980..5e648b1 100644 --- a/Sources/CoreLibrary/Partie.cs +++ b/Sources/CoreLibrary/Partie.cs @@ -11,9 +11,9 @@ namespace CoreLibrary /// Représente une partie de jeu. /// [DataContract] - public class Partie + public class Partie : IEstPersistant { - [DataMember] + public IRegles Regles { get; private set; } [DataMember] @@ -194,6 +194,11 @@ namespace CoreLibrary /// private void Terminee() { + foreach(Joueur joueur in joueurs) + { + joueur.JouerCode -= Tour; + } + List gagnants = new List(); List perdants = new List(); diff --git a/Sources/CoreLibrary/Persistance/IEstPersistant.cs b/Sources/CoreLibrary/Persistance/IEstPersistant.cs new file mode 100644 index 0000000..2e0128e --- /dev/null +++ b/Sources/CoreLibrary/Persistance/IEstPersistant.cs @@ -0,0 +1,4 @@ +namespace CoreLibrary.Persistance +{ + public interface IEstPersistant; +} diff --git a/Sources/CoreLibrary/Persistance/IPersistance.cs b/Sources/CoreLibrary/Persistance/IPersistance.cs index 94e8ab6..3f90645 100644 --- a/Sources/CoreLibrary/Persistance/IPersistance.cs +++ b/Sources/CoreLibrary/Persistance/IPersistance.cs @@ -4,8 +4,8 @@ namespace CoreLibrary.Persistance { public interface IPersistance { - public T[] Charger(); + public T[] Charger() where T : IEstPersistant; - public void Enregistrer(T[] elements); + public void Enregistrer(T[] elements) where T : IEstPersistant; } } diff --git a/Sources/CoreLibrary/Persistance/PersistanceJSON.cs b/Sources/CoreLibrary/Persistance/PersistanceJSON.cs index 63cc9a8..7d8ea93 100644 --- a/Sources/CoreLibrary/Persistance/PersistanceJSON.cs +++ b/Sources/CoreLibrary/Persistance/PersistanceJSON.cs @@ -1,5 +1,4 @@ -using CoreLibrary.Joueurs; -using System.Runtime.Serialization.Json; +using System.Runtime.Serialization.Json; using System.Text; using System.Xml; @@ -8,31 +7,25 @@ namespace CoreLibrary.Persistance public class PersistanceJSON : IPersistance { - public T[] Charger() + public T[] Charger() where T : IEstPersistant { + string dossierAvant = Directory.GetCurrentDirectory(); + + string dossier = Path.Combine(dossierAvant, "../../../.."); string fichier = $"{typeof(T).Name}.json"; - string ancienDossier = Directory.GetCurrentDirectory(); - Directory.SetCurrentDirectory(Path.Combine(ancienDossier, "../../../../")); - Console.WriteLine(Directory.GetCurrentDirectory()); - if(!Directory.Exists("Fichiers")) - { - Directory.SetCurrentDirectory(ancienDossier); + + bool c = Directory.Exists(dossier); + + if (!c) return []; - } - else - { - Directory.SetCurrentDirectory(Path.Combine(Directory.GetCurrentDirectory(), "Fichiers")); - } + + Directory.SetCurrentDirectory(dossier); if (!File.Exists(fichier)) - { - Directory.SetCurrentDirectory(ancienDossier); return []; - } -; - DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(IEnumerable)); + DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(T[])); T[] elements; using (FileStream s = File.OpenRead(fichier)) @@ -40,25 +33,20 @@ namespace CoreLibrary.Persistance elements = jsonSerializer.ReadObject(s) as T[]; } - Directory.SetCurrentDirectory(ancienDossier); return elements; } - public void Enregistrer(T[] elements) + public void Enregistrer(T[] elements) where T : IEstPersistant { + string dossier = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Mastermind"); string fichier = $"{typeof(T).Name}.json"; - string ancienDossier = Directory.GetCurrentDirectory(); - Directory.SetCurrentDirectory(Path.Combine(ancienDossier, "../../../../")); + if (!Directory.Exists(dossier)) + Directory.CreateDirectory(dossier); - if (!Directory.Exists("Fichiers")) - { - Directory.CreateDirectory("Fichiers"); - } - - Directory.SetCurrentDirectory(Path.Combine(Directory.GetCurrentDirectory(), "Fichiers")); + Directory.SetCurrentDirectory(dossier); - DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(IEnumerable)); + DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(T[])); using(FileStream s = File.Create(fichier)) { @@ -71,8 +59,6 @@ namespace CoreLibrary.Persistance jsonSerializer.WriteObject(writer, elements); } } - - Directory.SetCurrentDirectory(ancienDossier); } } } \ No newline at end of file diff --git a/Sources/CoreLibrary/Regles/IRegles.cs b/Sources/CoreLibrary/Regles/IRegles.cs index a8d8e7b..54776bf 100644 --- a/Sources/CoreLibrary/Regles/IRegles.cs +++ b/Sources/CoreLibrary/Regles/IRegles.cs @@ -1,6 +1,4 @@ -using CoreLibrary.Core; -using System.Runtime.Serialization; - + namespace CoreLibrary.Regles { /// diff --git a/Sources/MauiSpark/Pages/ConnexionPage.xaml.cs b/Sources/MauiSpark/Pages/ConnexionPage.xaml.cs index 84a2231..f5f3d2a 100644 --- a/Sources/MauiSpark/Pages/ConnexionPage.xaml.cs +++ b/Sources/MauiSpark/Pages/ConnexionPage.xaml.cs @@ -1,6 +1,5 @@ using CoreLibrary.Events; using CoreLibrary.Joueurs; -using Microsoft.UI.Xaml.Documents; namespace MauiSpark.Pages; @@ -36,10 +35,10 @@ public partial class ConnexionPage : ContentPage { joueurBuilder.Joueur(new Joueur($"Joueur {indice}")); } - else + else { - joueurBuilder.Joueur(MauiProgram.Manageur.DemanderJoueur(Nom.Text)); - } + joueurBuilder.Joueur(MauiProgram.Manageur.DemanderJoueur(Nom.Text)); + } } } } \ No newline at end of file diff --git a/Sources/MauiSpark/Pages/Mode.xaml.cs b/Sources/MauiSpark/Pages/Mode.xaml.cs index 3fe9731..f54dfea 100644 --- a/Sources/MauiSpark/Pages/Mode.xaml.cs +++ b/Sources/MauiSpark/Pages/Mode.xaml.cs @@ -21,6 +21,8 @@ public partial class Mode : ContentPage partie.NouveauTour += new Plateau().QuandNouveauTour; partie.PartieTerminee += new Victoire().QuandPartieTerminee; + MauiProgram.Manageur.NouvellePartie(partie); + partie.Jouer(); } } \ No newline at end of file diff --git a/Sources/MauiSpark/Pages/Plateau.xaml.cs b/Sources/MauiSpark/Pages/Plateau.xaml.cs index 29e3ac7..4dbbf06 100644 --- a/Sources/MauiSpark/Pages/Plateau.xaml.cs +++ b/Sources/MauiSpark/Pages/Plateau.xaml.cs @@ -40,7 +40,6 @@ public partial class Plateau : ContentPage public Plateau() { NavigationPage.SetHasNavigationBar(this, false); - NavigationPage.SetBackButtonTitle(this, "Retour"); InitializeComponent(); } diff --git a/Sources/MauiSpark/Pages/Victoire.xaml.cs b/Sources/MauiSpark/Pages/Victoire.xaml.cs index b25d9ee..e57a7a9 100644 --- a/Sources/MauiSpark/Pages/Victoire.xaml.cs +++ b/Sources/MauiSpark/Pages/Victoire.xaml.cs @@ -30,20 +30,24 @@ public partial class Victoire : ContentPage Application.Current.MainPage.Navigation.RemovePage(page); } - if (e.Gagnants.Length == 1) - BindingContext = ("Victoire", $"Le joueur {e.Gagnants.First().Nom} a gagné"); - else if (e.Gagnants.Length > 1) - BindingContext = ("Egalité", $"Les joueurs {string.Join(' ', e.Gagnants.Select(joueur => joueur.Nom))} ont gagné"); + Joueur[] gagnants = e.Gagnants; + Joueur[] perdants = e.Perdants; + + if (gagnants.Length == 1) + BindingContext = ("Victoire", $"Le joueur {gagnants.First().Nom} a gagné"); + else if (gagnants.Length > 1) + BindingContext = ("Egalité", $"Les joueurs {string.Join(' ', gagnants.Select(joueur => joueur.Nom))} ont gagné"); else BindingContext = ("Défaite", "Personne n'a trouvé le code..."); - if (e.Gagnants.Length == 1) - e.Gagnants.First().AGagne(); + + if (gagnants.Length == 1) + gagnants.First().AGagne(); else - foreach (Joueur gagnant in e.Gagnants) + foreach (Joueur gagnant in gagnants) gagnant.AEgalite(); - foreach (Joueur perdant in e.Gagnants) + foreach (Joueur perdant in perdants) perdant.APerdu(); }