Binding avec manageur
continuous-integration/drone/push Build is failing Details

master
Céleste BARBOSA 11 months ago
commit aaefed3542

@ -17,7 +17,7 @@ namespace ConsoleApp
/// <param name="e">L'instance de l'événement DemanderNomEventArgs créée par Partie.</param> /// <param name="e">L'instance de l'événement DemanderNomEventArgs créée par Partie.</param>
/// <returns>Le nom du joueur.</returns> /// <returns>Le nom du joueur.</returns>
/// </summary> /// </summary>
public static void DemanderNom(Object? sender, DemanderNomEventArgs e) public static void DemanderNom(Object? sender, DemanderJoueurEventArgs e)
{ {
Console.WriteLine($"Joueur {e.Indice}"); Console.WriteLine($"Joueur {e.Indice}");
Console.Write(">>> "); Console.Write(">>> ");

@ -1,11 +1,13 @@
using CoreLibrary.Exceptions; using CoreLibrary.Exceptions;
using System.Collections.ObjectModel; using System.Collections.ObjectModel;
using System.Runtime.Serialization;
namespace CoreLibrary.Core namespace CoreLibrary.Core
{ {
/// <summary> /// <summary>
/// Classe représentant un code composé de jetons et ses différentes méthodes. /// Classe représentant un code composé de jetons et ses différentes méthodes.
/// </summary> /// </summary>
[DataContract]
public class Code public class Code
{ {
private readonly ObservableCollection<Jeton?> lesJetons = new ObservableCollection<Jeton?>(); private readonly ObservableCollection<Jeton?> lesJetons = new ObservableCollection<Jeton?>();
@ -13,13 +15,16 @@ namespace CoreLibrary.Core
/// <summary> /// <summary>
/// Le nombre maximum de jetons dans le code. /// Le nombre maximum de jetons dans le code.
/// </summary> /// </summary>
[DataMember]
public int NbJetonsMax { get; private set; } public int NbJetonsMax { get; private set; }
/// <summary> /// <summary>
/// Le nombre de jetons dans le code. /// Le nombre de jetons dans le code.
/// </summary> /// </summary>
[DataMember]
public int NbJetons { get => lesJetons.Count; } public int NbJetons { get => lesJetons.Count; }
[DataMember]
public ObservableCollection<Jeton?> Jetons => lesJetons; public ObservableCollection<Jeton?> Jetons => lesJetons;
/// <summary> /// <summary>

@ -1,8 +1,11 @@
namespace CoreLibrary.Core using System.Runtime.Serialization;
namespace CoreLibrary.Core
{ {
/// <summary> /// <summary>
/// Enumération des indicateurs disponibles pour les jetons. /// Enumération des indicateurs disponibles pour les jetons.
/// </summary> /// </summary>
[DataContract]
public enum Indicateur public enum Indicateur
{ {
BONNEPLACE, BONNEPLACE,

@ -1,13 +1,17 @@
namespace CoreLibrary.Core using System.Runtime.Serialization;
namespace CoreLibrary.Core
{ {
/// <summary> /// <summary>
/// Structure représentant un jeton de couleur /// Structure représentant un jeton de couleur
/// </summary> /// </summary>
[DataContract]
public struct Jeton public struct Jeton
{ {
/// <summary> /// <summary>
/// La couleur du jeton. /// La couleur du jeton.
/// </summary> /// </summary>
[DataMember]
public readonly Couleur Couleur { get; private init; } public readonly Couleur Couleur { get; private init; }
/// <summary> /// <summary>

@ -1,4 +1,5 @@
using CoreLibrary.Exceptions; using CoreLibrary.Exceptions;
using System.Runtime.Serialization;
using System.Security.Cryptography; using System.Security.Cryptography;
namespace CoreLibrary.Core namespace CoreLibrary.Core
@ -6,22 +7,29 @@ namespace CoreLibrary.Core
/// <summary> /// <summary>
/// Classe représentant un plateau de jeu composé de codes et leurs indicateurs ainsi que les méthodes associées. /// Classe représentant un plateau de jeu composé de codes et leurs indicateurs ainsi que les méthodes associées.
/// </summary> /// </summary>
[DataContract]
public class Plateau public class Plateau
{ {
[DataMember]
private readonly Code codeSecret; private readonly Code codeSecret;
[DataMember]
private readonly Code?[] grille; private readonly Code?[] grille;
[DataMember]
private readonly IEnumerable<Indicateur>[] indicateurs; private readonly IEnumerable<Indicateur>[] indicateurs;
[DataMember]
private readonly int tailleCode; private readonly int tailleCode;
/// <summary> /// <summary>
/// Le numéro de tour actuel. /// Le numéro de tour actuel.
/// </summary> /// </summary>
[DataMember]
public int Tour { get; private set; } = 1; public int Tour { get; private set; } = 1;
/// <summary> /// <summary>
/// La victoire du joueur, True si le joueur a gagné sinon False /// La victoire du joueur, True si le joueur a gagné sinon False
/// </summary> /// </summary>
[DataMember]
public bool Victoire { get; private set; } = false; public bool Victoire { get; private set; } = false;
/// <summary> /// <summary>

@ -6,4 +6,8 @@
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
</PropertyGroup> </PropertyGroup>
<ItemGroup>
<Compile Remove="Persistance\Persistance.cs" />
</ItemGroup>
</Project> </Project>

@ -1,4 +1,6 @@
namespace CoreLibrary.Events using CoreLibrary.Joueurs;
namespace CoreLibrary.Events
{ {
/// <summary> /// <summary>
/// Classe contenant les arguments passées en paramètre lors de l'événement ConstruireJoueurEventArgs. /// Classe contenant les arguments passées en paramètre lors de l'événement ConstruireJoueurEventArgs.
@ -6,17 +8,17 @@
public class ConstruireJoueurEventArgs : EventArgs public class ConstruireJoueurEventArgs : EventArgs
{ {
/// <summary> /// <summary>
/// Le nom du joueur à ajouter. /// Le joueur à ajouter.
/// </summary> /// </summary>
public string? Nom { get; private set; } public Joueur Joueur { get; private set; }
/// <summary> /// <summary>
/// Initialise une nouvelle instance de la classe <see cref="ConstruireJoueurEventArgs"/> avec les informations spécifiées. /// Initialise une nouvelle instance de la classe <see cref="ConstruireJoueurEventArgs"/> avec les informations spécifiées.
/// </summary> /// </summary>
/// <param name="nom">Le nom du joueur à ajouter.</param> /// <param name="joueur">Le joueur à ajouter.</param>
public ConstruireJoueurEventArgs(string? nom) public ConstruireJoueurEventArgs(Joueur joueur)
{ {
Nom = nom; Joueur = joueur;
} }
} }
} }

@ -10,19 +10,19 @@ namespace CoreLibrary.Events
/// <summary> /// <summary>
/// Les joueurs gagnants de la partie. /// Les joueurs gagnants de la partie.
/// </summary> /// </summary>
public IEnumerable<Joueur> Gagnants { get; private set; } public Joueur[] Gagnants { get; private set; }
/// <summary> /// <summary>
/// Les joueurs perdants de la partie. /// Les joueurs perdants de la partie.
/// </summary> /// </summary>
public IEnumerable<Joueur> Perdants { get; private set; } public Joueur[] Perdants { get; private set; }
/// <summary> /// <summary>
/// Initialise une nouvelle instance de la classe <see cref="PartieTermineeEventArgs"/> avec les gagnants et les perdants spécifiés. /// Initialise une nouvelle instance de la classe <see cref="PartieTermineeEventArgs"/> avec les gagnants et les perdants spécifiés.
/// </summary> /// </summary>
/// <param name="gagnants">Les gagnants.</param> /// <param name="gagnants">Les gagnants.</param>
/// <param name="perdants">Les perdants.</param> /// <param name="perdants">Les perdants.</param>
public PartieTermineeEventArgs(IEnumerable<Joueur> gagnants, IEnumerable<Joueur> perdants) public PartieTermineeEventArgs(Joueur[] gagnants, Joueur[] perdants)
{ {
Gagnants = gagnants; Gagnants = gagnants;
Perdants = perdants; Perdants = perdants;

@ -1,21 +1,27 @@
using CoreLibrary.Core; using CoreLibrary.Core;
using CoreLibrary.Events; using CoreLibrary.Events;
using System.Runtime.Serialization;
namespace CoreLibrary.Joueurs namespace CoreLibrary.Joueurs
{ {
/// <summary> /// <summary>
/// Classe représentant un joueur. /// Classe représentant un joueur.
/// </summary> /// </summary>
[DataContract]
public class Joueur public class Joueur
{ {
/// <summary> /// <summary>
/// Le nom du joueur. /// Le nom du joueur.
/// </summary> /// </summary>
[DataMember]
public string Nom { get; private init; } public string Nom { get; private init; }
[DataMember]
public int NbCoutTotal { get; set; } public int NbCoutTotal { get; set; }
[DataMember]
public int NbPartieGagnee { get; set; } public int NbPartieGagnee { get; set; }
[DataMember]
public int NbPartieEgalite { get; set; } public int NbPartieEgalite { get; set; }
[DataMember]
public int NbPartiePerdue { get; set; } public int NbPartiePerdue { get; set; }
/// <summary> /// <summary>
@ -53,9 +59,15 @@ namespace CoreLibrary.Joueurs
public void Code(Code code) public void Code(Code code)
{ {
++NbCoutTotal;
QuandJouerCode(code); QuandJouerCode(code);
} }
public void AGagne() => ++NbPartieGagnee;
public void APerdu() => ++NbPartiePerdue;
public void AEgalite() => ++NbPartieEgalite;
public override String ToString() public override String ToString()
{ {
return Nom; return Nom;

@ -6,11 +6,11 @@ namespace CoreLibrary.Joueurs
{ {
public event EventHandler<ConstruireJoueurEventArgs>? ConstruireJoueur; public event EventHandler<ConstruireJoueurEventArgs>? ConstruireJoueur;
private void QuandConstruireJoueur(string? nom) => ConstruireJoueur?.Invoke(this, new ConstruireJoueurEventArgs(nom)); private void QuandConstruireJoueur(Joueur joueur) => ConstruireJoueur?.Invoke(this, new ConstruireJoueurEventArgs(joueur));
public void Nom(string? nom) public void Joueur(Joueur joueur)
{ {
QuandConstruireJoueur(nom); QuandConstruireJoueur(joueur);
} }
} }
} }

@ -1,13 +0,0 @@
using CoreLibrary.Joueurs;
namespace CoreLibrary.Manager
{
public interface IPersistanceManager
{
public bool EstEnregistre { get; }
public IEnumerable<Joueur> Charger();
public void Enregistrer(IEnumerable<Joueur> donnees);
}
}

@ -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<Joueur> joueurs;
public IEnumerable<Joueur> 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);
}
}
}

@ -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<Joueur> 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<Joueur> donnees)
{
EstEnregistre = true;
}
}
}

@ -0,0 +1,44 @@
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;
public Manageur(IPersistance persistance)
{
this.persistance = persistance;
joueurs = persistance.Charger<Joueur>().ToList();
parties = persistance.Charger<Partie>().ToList();
}
public void NouvellePartie(Partie partie)
{
this.partie = partie;
parties.Add(partie);
}
public Joueur DemanderJoueur(string nom)
{
foreach (Joueur joueur in joueurs)
{
if (joueur.Nom == nom)
return joueur;
}
Joueur nouveauJoueur = new Joueur(nom);
joueurs.Add(nouveauJoueur);
return nouveauJoueur;
}
~Manageur()
{
persistance.Enregistrer<Joueur>(joueurs.ToArray());
persistance.Enregistrer<Partie>(parties.ToArray());
}
}
}

@ -1,19 +1,26 @@
using CoreLibrary.Core; using CoreLibrary.Core;
using CoreLibrary.Events; using CoreLibrary.Events;
using CoreLibrary.Joueurs; using CoreLibrary.Joueurs;
using CoreLibrary.Persistance;
using CoreLibrary.Regles; using CoreLibrary.Regles;
using System.Runtime.Serialization;
namespace CoreLibrary namespace CoreLibrary
{ {
/// <summary> /// <summary>
/// Représente une partie de jeu. /// Représente une partie de jeu.
/// </summary> /// </summary>
[DataContract]
public class Partie public class Partie
{ {
[DataMember]
public IRegles Regles { get; private set; } public IRegles Regles { get; private set; }
[DataMember]
private readonly List<Joueur> joueurs = new List<Joueur>(); private readonly List<Joueur> joueurs = new List<Joueur>();
[DataMember]
private readonly List<Plateau> plateaux = new List<Plateau>(); private readonly List<Plateau> plateaux = new List<Plateau>();
[DataMember]
private int? courant; private int? courant;
/// <summary> /// <summary>
@ -95,12 +102,13 @@ namespace CoreLibrary
/// </summary> /// </summary>
/// <param name="gagnants">La liste des joueurs gagnants.</param> /// <param name="gagnants">La liste des joueurs gagnants.</param>
/// <param name="perdants">La liste des joueurs perdants.</param> /// <param name="perdants">La liste des joueurs perdants.</param>
private void QuandPartieTerminee(IEnumerable<Joueur> gagnants, IEnumerable<Joueur> perdants) => PartieTerminee?.Invoke(this, new PartieTermineeEventArgs(gagnants, perdants)); private void QuandPartieTerminee(Joueur[] gagnants, Joueur[] perdants) => PartieTerminee?.Invoke(this, new PartieTermineeEventArgs(gagnants, perdants));
/// <summary> /// <summary>
/// Crée une nouvelle instance de la classe Partie. /// Crée une nouvelle instance de la classe Partie.
/// </summary> /// </summary>
/// <param name="regles">Les règles de la partie.</param> /// <param name="regles">Les règles de la partie.</param>
/// <param name="persistance">Persistance de la partie.</param>
public Partie(IRegles regles) public Partie(IRegles regles)
{ {
Regles = regles; Regles = regles;
@ -122,7 +130,7 @@ namespace CoreLibrary
/// </summary> /// </summary>
private void Joueur(Object? sender, ConstruireJoueurEventArgs e) private void Joueur(Object? sender, ConstruireJoueurEventArgs e)
{ {
Joueur joueur = new Joueur(string.IsNullOrEmpty(e.Nom) ? $"Joueur {joueurs.Count + 1}" : e.Nom); Joueur joueur = e.Joueur;
Plateau plateau = new Plateau(Regles.TailleCodeMaximum, Regles.TourMaximum); Plateau plateau = new Plateau(Regles.TailleCodeMaximum, Regles.TourMaximum);
joueurs.Add(joueur); joueurs.Add(joueur);
@ -168,8 +176,8 @@ namespace CoreLibrary
if (++courant == joueurs.Count) if (++courant == joueurs.Count)
courant = 0; courant = 0;
QuandPasserMain(); QuandPasserMain();
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(); Terminee();
} }
@ -189,7 +197,7 @@ namespace CoreLibrary
List<Joueur> gagnants = new List<Joueur>(); List<Joueur> gagnants = new List<Joueur>();
List<Joueur> perdants = new List<Joueur>(); List<Joueur> perdants = new List<Joueur>();
for(int i = 0; i < joueurs.Count; i++) for (int i = 0; i < joueurs.Count; i++)
{ {
if (plateaux[i].Victoire) if (plateaux[i].Victoire)
gagnants.Add(joueurs[i]); gagnants.Add(joueurs[i]);
@ -197,7 +205,7 @@ namespace CoreLibrary
perdants.Add(joueurs[i]); perdants.Add(joueurs[i]);
} }
QuandPartieTerminee(gagnants, perdants); QuandPartieTerminee(gagnants.ToArray(), perdants.ToArray());
} }
} }
} }

@ -0,0 +1,11 @@
 using CoreLibrary.Joueurs;
namespace CoreLibrary.Persistance
{
public interface IPersistance
{
public T[] Charger<T>();
public void Enregistrer<T>(T[] elements);
}
}

@ -0,0 +1,78 @@
using CoreLibrary.Joueurs;
using System.Runtime.Serialization.Json;
using System.Text;
using System.Xml;
namespace CoreLibrary.Persistance
{
public class PersistanceJSON : IPersistance
{
public T[] Charger<T>()
{
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);
return [];
}
else
{
Directory.SetCurrentDirectory(Path.Combine(Directory.GetCurrentDirectory(), "Fichiers"));
}
if (!File.Exists(fichier))
{
Directory.SetCurrentDirectory(ancienDossier);
return [];
}
;
DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(IEnumerable<T>));
T[] elements;
using (FileStream s = File.OpenRead(fichier))
{
elements = jsonSerializer.ReadObject(s) as T[];
}
Directory.SetCurrentDirectory(ancienDossier);
return elements;
}
public void Enregistrer<T>(T[] elements)
{
string fichier = $"{typeof(T).Name}.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(IEnumerable<T>));
using(FileStream s = File.Create(fichier))
{
using(XmlDictionaryWriter writer = JsonReaderWriterFactory.CreateJsonWriter(
s,
Encoding.UTF8,
false,
true))
{
jsonSerializer.WriteObject(writer, elements);
}
}
Directory.SetCurrentDirectory(ancienDossier);
}
}
}

@ -1,4 +1,5 @@
using CoreLibrary.Core; using CoreLibrary.Core;
using System.Runtime.Serialization;
namespace CoreLibrary.Regles namespace CoreLibrary.Regles
{ {

@ -1,28 +1,35 @@
namespace CoreLibrary.Regles using System.Runtime.Serialization;
namespace CoreLibrary.Regles
{ {
/// <summary> /// <summary>
/// Classe définissant les règles classiques du jeu. /// Classe définissant les règles classiques du jeu.
/// </summary> /// </summary>
[DataContract]
public class ReglesClassiques : IRegles public class ReglesClassiques : IRegles
{ {
/// <summary> /// <summary>
/// Le nom des règles. /// Le nom des règles.
/// </summary> /// </summary>
[DataMember]
public string Nom { get => "Règles classiques"; } public string Nom { get => "Règles classiques"; }
/// <summary> /// <summary>
/// Le nombre maximum de tour. /// Le nombre maximum de tour.
/// </summary> /// </summary>
[DataMember]
public int TourMaximum { get => 2; } public int TourMaximum { get => 2; }
/// <summary> /// <summary>
/// La taille maximale d'un code. /// La taille maximale d'un code.
/// </summary> /// </summary>
[DataMember]
public int TailleCodeMaximum { get => 4; } public int TailleCodeMaximum { get => 4; }
/// <summary> /// <summary>
/// Me nombre maximum de joueurs possibles pour le jeu. /// Me nombre maximum de joueurs possibles pour le jeu.
/// </summary> /// </summary>
[DataMember]
public int NbJoueursMaximum { get => 2; } public int NbJoueursMaximum { get => 2; }
} }
} }

@ -1,4 +1,6 @@
using MauiSpark.Pages; using CoreLibrary.Manager;
using CoreLibrary.Persistance;
using MauiSpark.Pages;
namespace MauiSpark namespace MauiSpark
{ {

@ -1,11 +1,12 @@
using CoreLibrary.Manager; using CoreLibrary.Manager;
using CoreLibrary.Persistance;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
namespace MauiSpark namespace MauiSpark
{ {
public static class MauiProgram public static class MauiProgram
{ {
public static Manager Manager { get; private set; } = new Manager(new Stub()); public static Manageur Manageur { get; private set; } = new Manageur(new PersistanceJSON());
public static MauiApp CreateMauiApp() public static MauiApp CreateMauiApp()
{ {

@ -1,5 +1,6 @@
using CoreLibrary.Events; using CoreLibrary.Events;
using CoreLibrary.Joueurs; using CoreLibrary.Joueurs;
using Microsoft.UI.Xaml.Documents;
namespace MauiSpark.Pages; namespace MauiSpark.Pages;
@ -7,6 +8,7 @@ namespace MauiSpark.Pages;
public partial class ConnexionPage : ContentPage public partial class ConnexionPage : ContentPage
{ {
private JoueurBuilder? joueurBuilder; private JoueurBuilder? joueurBuilder;
private int? indice;
public ConnexionPage() public ConnexionPage()
{ {
@ -22,12 +24,22 @@ public partial class ConnexionPage : ContentPage
Nom.Text = ""; Nom.Text = "";
joueurBuilder = e.JoueurBuilder; joueurBuilder = e.JoueurBuilder;
BindingContext = $"Joueur {e.Indice}"; indice = e.Indice;
BindingContext = $"Joueur {e.Indice}";
} }
private void QuandSeConnecterPresse(Object sender, EventArgs e) private void QuandSeConnecterPresse(Object sender, EventArgs e)
{ {
if(joueurBuilder != null) if(joueurBuilder != null)
joueurBuilder.Nom(Nom.Text); {
if(string.IsNullOrEmpty(Nom.Text))
{
joueurBuilder.Joueur(new Joueur($"Joueur {indice}"));
}
else
{
joueurBuilder.Joueur(MauiProgram.Manageur.DemanderJoueur(Nom.Text));
}
}
} }
} }

@ -1,4 +1,5 @@
using CoreLibrary.Events; using CoreLibrary.Events;
using CoreLibrary.Joueurs;
namespace MauiSpark.Pages; namespace MauiSpark.Pages;
@ -29,12 +30,22 @@ public partial class Victoire : ContentPage
Application.Current.MainPage.Navigation.RemovePage(page); Application.Current.MainPage.Navigation.RemovePage(page);
} }
if(e.Gagnants.Count() == 1) if (e.Gagnants.Length == 1)
BindingContext = ("Victoire", $"Le joueur {e.Gagnants.First().Nom} a gagné"); BindingContext = ("Victoire", $"Le joueur {e.Gagnants.First().Nom} a gagné");
else if(e.Gagnants.Count() > 1) else if (e.Gagnants.Length > 1)
BindingContext = ("Egalité", $"Les joueurs {string.Join(' ', e.Gagnants)} ont gagné"); BindingContext = ("Egalité", $"Les joueurs {string.Join(' ', e.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();
else
foreach (Joueur gagnant in e.Gagnants)
gagnant.AEgalite();
foreach (Joueur perdant in e.Gagnants)
perdant.APerdu();
} }
public async void QuandMenuPresse(object sender, EventArgs e) public async void QuandMenuPresse(object sender, EventArgs e)

@ -5,7 +5,7 @@ namespace MauiSpark.Views;
public class JoueurClassementNbCoupParPartie public class JoueurClassementNbCoupParPartie
{ {
private Manager manager; private Manageur manageur;
private Joueur joueur; private Joueur joueur;
public Joueur Joueur public Joueur Joueur
@ -15,23 +15,23 @@ public class JoueurClassementNbCoupParPartie
} }
public int Place public int Place
{ {
get => manager.Joueurs get => manageur.joueurs
.OrderBy(joueur => joueur.NbCoutTotal/(joueur.NbPartiePerdue+joueur.NbPartieGagnee+joueur.NbPartieEgalite)).ToList() .OrderBy(joueur => joueur.NbCoutTotal/(joueur.NbPartiePerdue+joueur.NbPartieGagnee+joueur.NbPartieEgalite)).ToList()
.IndexOf(Joueur) + 1; .IndexOf(Joueur) + 1;
} }
public int NbCoutMoyen => joueur.NbCoutTotal / (joueur.NbPartiePerdue + joueur.NbPartieGagnee + joueur.NbPartieEgalite); public int NbCoutMoyen => joueur.NbCoutTotal / (joueur.NbPartiePerdue + joueur.NbPartieGagnee + joueur.NbPartieEgalite);
public JoueurClassementNbCoupParPartie(Joueur joueur, Manager manager) public JoueurClassementNbCoupParPartie(Joueur joueur, Manageur manageur)
{ {
this.manager = manager; this.manageur = manageur;
this.joueur = joueur; this.joueur = joueur;
} }
} }
public class JoueurClassementPartieGagnee public class JoueurClassementPartieGagnee
{ {
private Manager manager; private Manageur manageur;
private Joueur joueur; private Joueur joueur;
public Joueur Joueur public Joueur Joueur
@ -42,21 +42,21 @@ public class JoueurClassementPartieGagnee
public int Place public int Place
{ {
get => manager.Joueurs.OrderByDescending(joueur => joueur.NbPartieGagnee).ToList().IndexOf(Joueur) + 1; get => manageur.joueurs.OrderByDescending(joueur => joueur.NbPartieGagnee).ToList().IndexOf(Joueur) + 1;
} }
public int NbCoutMoyen => joueur.NbCoutTotal / (joueur.NbPartiePerdue + joueur.NbPartieGagnee + joueur.NbPartieEgalite); public int NbCoutMoyen => joueur.NbCoutTotal / (joueur.NbPartiePerdue + joueur.NbPartieGagnee + joueur.NbPartieEgalite);
public JoueurClassementPartieGagnee(Joueur joueur, Manager manager) public JoueurClassementPartieGagnee(Joueur joueur, Manageur manageur)
{ {
this.manager = manager; this.manageur = manageur;
this.joueur = joueur; this.joueur = joueur;
} }
} }
public class JoueurClassementPartieEgalite public class JoueurClassementPartieEgalite
{ {
private Manager manager; private Manageur manageur;
private Joueur joueur; private Joueur joueur;
public Joueur Joueur public Joueur Joueur
@ -67,21 +67,21 @@ public class JoueurClassementPartieEgalite
public int Place public int Place
{ {
get => manager.Joueurs.OrderByDescending(joueur => joueur.NbPartieEgalite).ToList().IndexOf(joueur)+1; get => manageur.joueurs.OrderByDescending(joueur => joueur.NbPartieEgalite).ToList().IndexOf(joueur)+1;
} }
public int NbCoutMoyen => joueur.NbCoutTotal / (joueur.NbPartiePerdue + joueur.NbPartieGagnee + joueur.NbPartieEgalite); public int NbCoutMoyen => joueur.NbCoutTotal / (joueur.NbPartiePerdue + joueur.NbPartieGagnee + joueur.NbPartieEgalite);
public JoueurClassementPartieEgalite(Joueur joueur, Manager manager) public JoueurClassementPartieEgalite(Joueur joueur, Manageur manageur)
{ {
this.manager = manager; this.manageur = manageur;
this.joueur = joueur; this.joueur = joueur;
} }
} }
public class JoueurClassementPartiePerdue public class JoueurClassementPartiePerdue
{ {
private Manager manager; private Manageur manageur;
private Joueur joueur; private Joueur joueur;
public Joueur Joueur public Joueur Joueur
@ -92,21 +92,21 @@ public class JoueurClassementPartiePerdue
public int Place public int Place
{ {
get => manager.Joueurs.OrderByDescending(joueur => joueur.NbPartiePerdue).ToList().IndexOf(joueur)+1; get => manageur.joueurs.OrderByDescending(joueur => joueur.NbPartiePerdue).ToList().IndexOf(joueur)+1;
} }
public int NbCoutMoyen => joueur.NbCoutTotal / (joueur.NbPartiePerdue + joueur.NbPartieGagnee + joueur.NbPartieEgalite); public int NbCoutMoyen => joueur.NbCoutTotal / (joueur.NbPartiePerdue + joueur.NbPartieGagnee + joueur.NbPartieEgalite);
public JoueurClassementPartiePerdue(Joueur joueur, Manager manager) public JoueurClassementPartiePerdue(Joueur joueur, Manageur manageur)
{ {
this.manager = manager; this.manageur = manageur;
this.joueur = joueur; this.joueur = joueur;
} }
} }
public class JoueurClassementAlphabet public class JoueurClassementAlphabet
{ {
private Manager manager; private Manageur manageur;
private Joueur joueur; private Joueur joueur;
public Joueur Joueur public Joueur Joueur
@ -117,115 +117,115 @@ public class JoueurClassementAlphabet
public int Place public int Place
{ {
get => manager.Joueurs get => manageur.joueurs
.OrderBy(joueur => joueur.NbCoutTotal / (joueur.NbPartiePerdue + joueur.NbPartieGagnee + joueur.NbPartieEgalite)).ToList() .OrderBy(joueur => joueur.NbCoutTotal / (joueur.NbPartiePerdue + joueur.NbPartieGagnee + joueur.NbPartieEgalite)).ToList()
.IndexOf(Joueur) + 1; .IndexOf(Joueur) + 1;
} }
public int NbCoutMoyen => joueur.NbCoutTotal / (joueur.NbPartiePerdue + joueur.NbPartieGagnee + joueur.NbPartieEgalite); public int NbCoutMoyen => joueur.NbCoutTotal / (joueur.NbPartiePerdue + joueur.NbPartieGagnee + joueur.NbPartieEgalite);
public JoueurClassementAlphabet(Joueur joueur, Manager manager) public JoueurClassementAlphabet(Joueur joueur, Manageur manager)
{ {
this.manager = manager; this.manageur = manager;
this.joueur = joueur; this.joueur = joueur;
} }
} }
public partial class CTableauScore : ContentView public partial class CTableauScore : ContentView
{ {
public int NbCliquer { get; set; } = 0; public int NbClique { get; set; } = 0;
public IEnumerable<JoueurClassementNbCoupParPartie> GetClassementNbCoupParPartie() public IEnumerable<JoueurClassementNbCoupParPartie> GetClassementNbCoupParPartie()
{ {
if(NbCliquer % 2 == 0) if(NbClique % 2 == 0)
{ {
NbCliquer++; NbClique++;
return MauiProgram.Manager.Joueurs return MauiProgram.Manageur.joueurs
.OrderBy(joueur => joueur.NbCoutTotal / (joueur.NbPartiePerdue + joueur.NbPartieGagnee + joueur.NbPartieEgalite)) .OrderBy(joueur => joueur.NbCoutTotal / (joueur.NbPartiePerdue + joueur.NbPartieGagnee + joueur.NbPartieEgalite))
.Select(joueur => new JoueurClassementNbCoupParPartie(joueur, MauiProgram.Manager)); .Select(joueur => new JoueurClassementNbCoupParPartie(joueur, MauiProgram.Manageur));
} }
else else
{ {
NbCliquer++; NbClique++;
return MauiProgram.Manager.Joueurs return MauiProgram.Manageur.joueurs
.OrderByDescending(joueur => joueur.NbCoutTotal / (joueur.NbPartiePerdue + joueur.NbPartieGagnee + joueur.NbPartieEgalite)) .OrderByDescending(joueur => joueur.NbCoutTotal / (joueur.NbPartiePerdue + joueur.NbPartieGagnee + joueur.NbPartieEgalite))
.Select(joueur => new JoueurClassementNbCoupParPartie(joueur, MauiProgram.Manager)); .Select(joueur => new JoueurClassementNbCoupParPartie(joueur, MauiProgram.Manageur));
} }
} }
public IEnumerable<JoueurClassementPartieGagnee> GetClassementPartieGagnee() public IEnumerable<JoueurClassementPartieGagnee> GetClassementPartieGagnee()
{ {
if(NbCliquer % 2 == 0) if(NbClique % 2 == 0)
{ {
NbCliquer++; NbClique++;
return MauiProgram.Manager.Joueurs return MauiProgram.Manageur.joueurs
.OrderByDescending(joueur => joueur.NbPartieGagnee) .OrderByDescending(joueur => joueur.NbPartieGagnee)
.Select(joueur => new JoueurClassementPartieGagnee(joueur, MauiProgram.Manager)); .Select(joueur => new JoueurClassementPartieGagnee(joueur, MauiProgram.Manageur));
} }
else else
{ {
NbCliquer++; NbClique++;
return MauiProgram.Manager.Joueurs return MauiProgram.Manageur.joueurs
.OrderBy(joueur => joueur.NbPartieGagnee) .OrderBy(joueur => joueur.NbPartieGagnee)
.Select(joueur => new JoueurClassementPartieGagnee(joueur, MauiProgram.Manager)); .Select(joueur => new JoueurClassementPartieGagnee(joueur, MauiProgram.Manageur));
} }
} }
public IEnumerable<JoueurClassementPartieEgalite> GetClassementPartieEgalite() public IEnumerable<JoueurClassementPartieEgalite> GetClassementPartieEgalite()
{ {
if(NbCliquer % 2 == 0) if(NbClique % 2 == 0)
{ {
NbCliquer++; NbClique++;
return MauiProgram.Manager.Joueurs return MauiProgram.Manageur.joueurs
.OrderByDescending(joueur => joueur.NbPartieEgalite) .OrderByDescending(joueur => joueur.NbPartieEgalite)
.Select(joueur => new JoueurClassementPartieEgalite(joueur, MauiProgram.Manager)); .Select(joueur => new JoueurClassementPartieEgalite(joueur, MauiProgram.Manageur));
} }
else else
{ {
NbCliquer++; NbClique++;
return MauiProgram.Manager.Joueurs return MauiProgram.Manageur.joueurs
.OrderBy(joueur => joueur.NbPartieEgalite) .OrderBy(joueur => joueur.NbPartieEgalite)
.Select(joueur => new JoueurClassementPartieEgalite(joueur, MauiProgram.Manager)); .Select(joueur => new JoueurClassementPartieEgalite(joueur, MauiProgram.Manageur));
} }
} }
public IEnumerable<JoueurClassementPartiePerdue> GetClassementPartiePerdue() public IEnumerable<JoueurClassementPartiePerdue> GetClassementPartiePerdue()
{ {
if(NbCliquer % 2 == 0) if(NbClique % 2 == 0)
{ {
NbCliquer++; NbClique++;
return MauiProgram.Manager.Joueurs return MauiProgram.Manageur.joueurs
.OrderByDescending(joueur => joueur.NbPartiePerdue) .OrderByDescending(joueur => joueur.NbPartiePerdue)
.Select(joueur => new JoueurClassementPartiePerdue(joueur, MauiProgram.Manager)); .Select(joueur => new JoueurClassementPartiePerdue(joueur, MauiProgram.Manageur));
} }
else else
{ {
NbCliquer++; NbClique++;
; return MauiProgram.Manager.Joueurs ; return MauiProgram.Manageur.joueurs
.OrderBy(joueur => joueur.NbPartiePerdue) .OrderBy(joueur => joueur.NbPartiePerdue)
.Select(joueur => new JoueurClassementPartiePerdue(joueur, MauiProgram.Manager)); .Select(joueur => new JoueurClassementPartiePerdue(joueur, MauiProgram.Manageur));
} }
} }
public IEnumerable<JoueurClassementAlphabet> GetClassementAlphabet() public IEnumerable<JoueurClassementAlphabet> GetClassementAlphabet()
{ {
if(NbCliquer % 2 == 0) if(NbClique % 2 == 0)
{ {
NbCliquer++; NbClique++;
return MauiProgram.Manager.Joueurs return MauiProgram.Manageur.joueurs
.OrderBy(joueur => joueur.Nom) .OrderBy(joueur => joueur.Nom)
.Select(joueur => new JoueurClassementAlphabet(joueur, MauiProgram.Manager)); .Select(joueur => new JoueurClassementAlphabet(joueur, MauiProgram.Manageur));
} }
else else
{ {
NbCliquer++; NbClique++;
return MauiProgram.Manager.Joueurs return MauiProgram.Manageur.joueurs
.OrderByDescending(joueur => joueur.Nom) .OrderByDescending(joueur => joueur.Nom)
.Select(joueur => new JoueurClassementAlphabet(joueur, MauiProgram.Manager)); .Select(joueur => new JoueurClassementAlphabet(joueur, MauiProgram.Manageur));
} }
} }

@ -12,7 +12,7 @@ namespace UnitTesting
JoueurBuilder joueurBuilder = new JoueurBuilder(); JoueurBuilder joueurBuilder = new JoueurBuilder();
int indice = 15; int indice = 15;
DemanderNomEventArgs evenement = new DemanderNomEventArgs(indice, joueurBuilder); DemanderJoueurEventArgs evenement = new DemanderJoueurEventArgs(indice, joueurBuilder);
Assert.Equal(joueurBuilder, evenement.JoueurBuilder); Assert.Equal(joueurBuilder, evenement.JoueurBuilder);
Assert.Equal(indice, evenement.Indice); Assert.Equal(indice, evenement.Indice);

@ -9,7 +9,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ConsoleApp", "ConsoleApp\Co
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MauiSpark", "MauiSpark\MauiSpark.csproj", "{BD22A919-E40E-4791-A6B0-2B8D37BBE834}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MauiSpark", "MauiSpark\MauiSpark.csproj", "{BD22A919-E40E-4791-A6B0-2B8D37BBE834}"
EndProject 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 ProjectSection(ProjectDependencies) = postProject
{341FB405-085D-4C34-B395-64EF0F9B93E0} = {341FB405-085D-4C34-B395-64EF0F9B93E0} {341FB405-085D-4C34-B395-64EF0F9B93E0} = {341FB405-085D-4C34-B395-64EF0F9B93E0}
EndProjectSection EndProjectSection

Loading…
Cancel
Save