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

@ -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<Joueur> joueurs;
public List<Partie> 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<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)
{
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<Joueur>(joueurs.ToArray());
persistance.Enregistrer<Partie>(parties.ToArray());
return nouveauJoueur;
}
}
}

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

@ -1,6 +1,4 @@
using CoreLibrary.Core;
using System.Runtime.Serialization;

namespace CoreLibrary.Regles
{
/// <summary>

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

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

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

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

Loading…
Cancel
Save