Fin de la persistance, besoin de correction condition
continuous-integration/drone/push Build is failing Details

master
Céleste BARBOSA 11 months ago
parent aaefed3542
commit 0f15fb0e16

@ -1,5 +1,6 @@
using CoreLibrary.Core; using CoreLibrary.Core;
using CoreLibrary.Events; using CoreLibrary.Events;
using CoreLibrary.Persistance;
using System.Runtime.Serialization; using System.Runtime.Serialization;
namespace CoreLibrary.Joueurs namespace CoreLibrary.Joueurs
@ -8,7 +9,7 @@ namespace CoreLibrary.Joueurs
/// Classe représentant un joueur. /// Classe représentant un joueur.
/// </summary> /// </summary>
[DataContract] [DataContract]
public class Joueur public class Joueur : IEstPersistant
{ {
/// <summary> /// <summary>
/// Le nom du joueur. /// Le nom du joueur.

@ -1,11 +1,11 @@
using CoreLibrary.Joueurs; using CoreLibrary.Events;
using CoreLibrary.Joueurs;
using CoreLibrary.Persistance; using CoreLibrary.Persistance;
namespace CoreLibrary.Manager namespace CoreLibrary.Manager
{ {
public class Manageur public class Manageur
{ {
public Partie? partie;
public List<Joueur> joueurs; public List<Joueur> joueurs;
public List<Partie> parties; public List<Partie> parties;
private IPersistance persistance; private IPersistance persistance;
@ -19,26 +19,31 @@ namespace CoreLibrary.Manager
public void NouvellePartie(Partie partie) public void NouvellePartie(Partie partie)
{ {
this.partie = partie;
parties.Add(partie); parties.Add(partie);
partie.PasserMain += (object? sender, PasserMainEventArgs e) =>
{
persistance.Enregistrer<Partie>(parties.ToArray());
persistance.Enregistrer<Joueur>(joueurs.ToArray());
};
partie.PartieTerminee += (object? sender, PartieTermineeEventArgs e) =>
{
persistance.Enregistrer<Partie>(parties.ToArray());
persistance.Enregistrer<Joueur>(joueurs.ToArray());
};
} }
public Joueur DemanderJoueur(string nom) public Joueur DemanderJoueur(string nom)
{ {
foreach (Joueur joueur in joueurs) foreach (Joueur joueur in joueurs)
{ {
if (joueur.Nom == nom) if (joueur.Nom == nom)
return joueur; return joueur;
} }
Joueur nouveauJoueur = new Joueur(nom); Joueur nouveauJoueur = new Joueur(nom);
joueurs.Add(nouveauJoueur); joueurs.Add(nouveauJoueur);
return nouveauJoueur; return nouveauJoueur;
}
~Manageur()
{
persistance.Enregistrer<Joueur>(joueurs.ToArray());
persistance.Enregistrer<Partie>(parties.ToArray());
} }
} }
} }

@ -11,9 +11,9 @@ namespace CoreLibrary
/// Représente une partie de jeu. /// Représente une partie de jeu.
/// </summary> /// </summary>
[DataContract] [DataContract]
public class Partie public class Partie : IEstPersistant
{ {
[DataMember]
public IRegles Regles { get; private set; } public IRegles Regles { get; private set; }
[DataMember] [DataMember]
@ -194,6 +194,11 @@ namespace CoreLibrary
/// </summary> /// </summary>
private void Terminee() private void Terminee()
{ {
foreach(Joueur joueur in joueurs)
{
joueur.JouerCode -= Tour;
}
List<Joueur> gagnants = new List<Joueur>(); List<Joueur> gagnants = new List<Joueur>();
List<Joueur> perdants = new List<Joueur>(); List<Joueur> perdants = new List<Joueur>();

@ -0,0 +1,4 @@
namespace CoreLibrary.Persistance
{
public interface IEstPersistant;
}

@ -4,8 +4,8 @@ namespace CoreLibrary.Persistance
{ {
public interface IPersistance public interface IPersistance
{ {
public T[] Charger<T>(); public T[] Charger<T>() where T : IEstPersistant;
public void Enregistrer<T>(T[] elements); public void Enregistrer<T>(T[] elements) where T : IEstPersistant;
} }
} }

@ -1,5 +1,4 @@
using CoreLibrary.Joueurs; using System.Runtime.Serialization.Json;
using System.Runtime.Serialization.Json;
using System.Text; using System.Text;
using System.Xml; using System.Xml;
@ -8,31 +7,25 @@ namespace CoreLibrary.Persistance
public class PersistanceJSON : IPersistance public class PersistanceJSON : IPersistance
{ {
public T[] Charger<T>() public T[] Charger<T>() where T : IEstPersistant
{ {
string dossierAvant = Directory.GetCurrentDirectory();
string dossier = Path.Combine(dossierAvant, "../../../..");
string fichier = $"{typeof(T).Name}.json"; string fichier = $"{typeof(T).Name}.json";
string ancienDossier = Directory.GetCurrentDirectory();
Directory.SetCurrentDirectory(Path.Combine(ancienDossier, "../../../../"));
Console.WriteLine(Directory.GetCurrentDirectory()); bool c = Directory.Exists(dossier);
if(!Directory.Exists("Fichiers"))
{ if (!c)
Directory.SetCurrentDirectory(ancienDossier);
return []; return [];
}
else Directory.SetCurrentDirectory(dossier);
{
Directory.SetCurrentDirectory(Path.Combine(Directory.GetCurrentDirectory(), "Fichiers"));
}
if (!File.Exists(fichier)) if (!File.Exists(fichier))
{
Directory.SetCurrentDirectory(ancienDossier);
return []; return [];
}
;
DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(IEnumerable<T>)); DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(T[]));
T[] elements; T[] elements;
using (FileStream s = File.OpenRead(fichier)) using (FileStream s = File.OpenRead(fichier))
@ -40,25 +33,20 @@ namespace CoreLibrary.Persistance
elements = jsonSerializer.ReadObject(s) as T[]; elements = jsonSerializer.ReadObject(s) as T[];
} }
Directory.SetCurrentDirectory(ancienDossier);
return elements; return elements;
} }
public void Enregistrer<T>(T[] elements) public void Enregistrer<T>(T[] elements) where T : IEstPersistant
{ {
string dossier = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Mastermind");
string fichier = $"{typeof(T).Name}.json"; 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.SetCurrentDirectory(dossier);
{
Directory.CreateDirectory("Fichiers");
}
Directory.SetCurrentDirectory(Path.Combine(Directory.GetCurrentDirectory(), "Fichiers"));
DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(IEnumerable<T>)); DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(T[]));
using(FileStream s = File.Create(fichier)) using(FileStream s = File.Create(fichier))
{ {
@ -71,8 +59,6 @@ namespace CoreLibrary.Persistance
jsonSerializer.WriteObject(writer, elements); jsonSerializer.WriteObject(writer, elements);
} }
} }
Directory.SetCurrentDirectory(ancienDossier);
} }
} }
} }

@ -1,6 +1,4 @@
using CoreLibrary.Core; 
using System.Runtime.Serialization;
namespace CoreLibrary.Regles namespace CoreLibrary.Regles
{ {
/// <summary> /// <summary>

@ -1,6 +1,5 @@
using CoreLibrary.Events; using CoreLibrary.Events;
using CoreLibrary.Joueurs; using CoreLibrary.Joueurs;
using Microsoft.UI.Xaml.Documents;
namespace MauiSpark.Pages; namespace MauiSpark.Pages;
@ -36,10 +35,10 @@ public partial class ConnexionPage : ContentPage
{ {
joueurBuilder.Joueur(new Joueur($"Joueur {indice}")); joueurBuilder.Joueur(new Joueur($"Joueur {indice}"));
} }
else else
{ {
joueurBuilder.Joueur(MauiProgram.Manageur.DemanderJoueur(Nom.Text)); joueurBuilder.Joueur(MauiProgram.Manageur.DemanderJoueur(Nom.Text));
} }
} }
} }
} }

@ -21,6 +21,8 @@ public partial class Mode : ContentPage
partie.NouveauTour += new Plateau().QuandNouveauTour; partie.NouveauTour += new Plateau().QuandNouveauTour;
partie.PartieTerminee += new Victoire().QuandPartieTerminee; partie.PartieTerminee += new Victoire().QuandPartieTerminee;
MauiProgram.Manageur.NouvellePartie(partie);
partie.Jouer(); partie.Jouer();
} }
} }

@ -40,7 +40,6 @@ public partial class Plateau : ContentPage
public Plateau() public Plateau()
{ {
NavigationPage.SetHasNavigationBar(this, false); NavigationPage.SetHasNavigationBar(this, false);
NavigationPage.SetBackButtonTitle(this, "Retour");
InitializeComponent(); InitializeComponent();
} }

@ -30,20 +30,24 @@ public partial class Victoire : ContentPage
Application.Current.MainPage.Navigation.RemovePage(page); Application.Current.MainPage.Navigation.RemovePage(page);
} }
if (e.Gagnants.Length == 1) Joueur[] gagnants = e.Gagnants;
BindingContext = ("Victoire", $"Le joueur {e.Gagnants.First().Nom} a gagné"); Joueur[] perdants = e.Perdants;
else if (e.Gagnants.Length > 1)
BindingContext = ("Egalité", $"Les joueurs {string.Join(' ', e.Gagnants.Select(joueur => joueur.Nom))} ont gagné"); 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 else
BindingContext = ("Défaite", "Personne n'a trouvé le code..."); 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 else
foreach (Joueur gagnant in e.Gagnants) foreach (Joueur gagnant in gagnants)
gagnant.AEgalite(); gagnant.AEgalite();
foreach (Joueur perdant in e.Gagnants) foreach (Joueur perdant in perdants)
perdant.APerdu(); perdant.APerdu();
} }

Loading…
Cancel
Save