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();
}