diff --git a/Sources/CoreLibrary/Joueurs/Joueur.cs b/Sources/CoreLibrary/Joueurs/Joueur.cs index 2956f4d..ed27989 100644 --- a/Sources/CoreLibrary/Joueurs/Joueur.cs +++ b/Sources/CoreLibrary/Joueurs/Joueur.cs @@ -47,8 +47,7 @@ namespace CoreLibrary.Joueurs public override string ToString() => Nom; - public int Statistique(IRegles regles, Statistique statistique) => - statistiques.GetValueOrDefault((regles, statistique), 0); + public int Statistique(IRegles regles, Statistique statistique) => statistiques.GetValueOrDefault((regles, statistique),0); public void IncrementerStatistique(IRegles regles, Statistique statistique) => statistiques[(regles, statistique)] = Statistique(regles, statistique) + 1; diff --git a/Sources/CoreLibrary/Manageurs/Manageur.cs b/Sources/CoreLibrary/Manageurs/Manageur.cs index 884272d..2d83bad 100644 --- a/Sources/CoreLibrary/Manageurs/Manageur.cs +++ b/Sources/CoreLibrary/Manageurs/Manageur.cs @@ -79,7 +79,6 @@ namespace CoreLibrary.Manageurs { DemanderJoueur(perdant).IncrementerStatistique(partie.Regles, Statistique.PartiePerdue); } - Sauvegarder(); }; } diff --git a/Sources/CoreLibrary/Persistance/PersistanceJSON.cs b/Sources/CoreLibrary/Persistance/PersistanceJSON.cs index 1640fde..0daaf1c 100644 --- a/Sources/CoreLibrary/Persistance/PersistanceJSON.cs +++ b/Sources/CoreLibrary/Persistance/PersistanceJSON.cs @@ -26,6 +26,7 @@ namespace CoreLibrary.Persistance return []; Directory.SetCurrentDirectory(Path.Combine(Directory.GetCurrentDirectory(), nomDossier)); + var directory = Directory.GetCurrentDirectory(); if (!File.Exists(fichier)) return []; diff --git a/Sources/CoreLibrary/Regles/ReglesClassiques.cs b/Sources/CoreLibrary/Regles/ReglesClassiques.cs index 6a8723c..a2718df 100644 --- a/Sources/CoreLibrary/Regles/ReglesClassiques.cs +++ b/Sources/CoreLibrary/Regles/ReglesClassiques.cs @@ -9,5 +9,16 @@ namespace CoreLibrary.Regles public int NbJoueurs => 2; public int NbTour => 12; public int TailleCode => 4; + + public override bool Equals(object? obj) + { + if (obj == null || obj is not ReglesClassiques) return false; + return true; + } + + public override int GetHashCode() + { + return HashCode.Combine(Nom, NbJoueurs, NbTour, TailleCode); + } } } diff --git a/Sources/MauiSpark/Pages/ConnexionPage.xaml b/Sources/MauiSpark/Pages/ConnexionPage.xaml index bdcb7b2..bfe3e6d 100644 --- a/Sources/MauiSpark/Pages/ConnexionPage.xaml +++ b/Sources/MauiSpark/Pages/ConnexionPage.xaml @@ -1,7 +1,6 @@ diff --git a/Sources/MauiSpark/Pages/PlateauPage.xaml b/Sources/MauiSpark/Pages/PlateauPage.xaml index 1efa84f..291eb56 100644 --- a/Sources/MauiSpark/Pages/PlateauPage.xaml +++ b/Sources/MauiSpark/Pages/PlateauPage.xaml @@ -112,7 +112,7 @@ - + diff --git a/Sources/MauiSpark/Pages/TableauScore.xaml b/Sources/MauiSpark/Pages/TableauScore.xaml index 0f52200..6c9954d 100644 --- a/Sources/MauiSpark/Pages/TableauScore.xaml +++ b/Sources/MauiSpark/Pages/TableauScore.xaml @@ -3,15 +3,46 @@ xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:pages="clr-namespace:MauiSpark.Pages" x:Class="MauiSpark.Pages.TableauScore" + xmlns:vues="clr-namespace:MauiSpark.Vues" Title="TableauScore"> - + - + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Sources/MauiSpark/Pages/TableauScore.xaml.cs b/Sources/MauiSpark/Pages/TableauScore.xaml.cs index 98f9347..3810649 100644 --- a/Sources/MauiSpark/Pages/TableauScore.xaml.cs +++ b/Sources/MauiSpark/Pages/TableauScore.xaml.cs @@ -1,11 +1,140 @@ -namespace MauiSpark.Pages; +using CoreLibrary.Joueurs; +using CoreLibrary.Manageurs; +using CoreLibrary.Statistiques; +using System.Linq; +using CoreLibrary.Regles; -public partial class TableauScore : ContentPage +namespace MauiSpark.Pages { - public TableauScore() + public partial class TableauScore : ContentPage { - NavigationPage.SetHasNavigationBar(this, false); + private IRegles regles = new ReglesClassiques(); + public TableauScore() + { + NavigationPage.SetHasNavigationBar(this, false); + InitializeComponent(); + QuandButtonClassementClique(null, EventArgs.Empty); + } - InitializeComponent(); + private void QuandButtonRegleClassiqueClique(object sender, EventArgs e) + { + regles = new ReglesClassiques(); + QuandButtonClassementClique(null, EventArgs.Empty); + } + + public int NbClique { get; set; } = 0; + + public IEnumerable GetClassement(Func critereTri) + { + IEnumerable joueursTries = NbClique % 2 == 0 + ? MauiProgram.Manageur.Joueurs.OrderBy(critereTri) + : MauiProgram.Manageur.Joueurs.OrderByDescending(critereTri); + + NbClique++; + + return joueursTries.Select(joueur => new Classement(joueur, MauiProgram.Manageur, critereTri, regles)); + } + + public void QuandButtonClassementClique(object sender, EventArgs e) + { + Button button = sender as Button; + string nom = button?.Text ?? string.Empty; + Func critereTri; + + switch (nom) + { + case "PSEUDO": + critereTri = joueur => joueur.Nom; + break; + + case "Cout Moyen": + critereTri = joueur => + { + int totalParties = joueur.Statistique(regles, Statistique.PartiePerdue) + + joueur.Statistique(regles, Statistique.PartieGagnee) + + joueur.Statistique(regles, Statistique.PartieEgalite); + return totalParties == 0 ? 0 : (double)joueur.Statistique(regles, Statistique.CoupJoue) / totalParties; + }; + break; + + case "Partie Gagnée": + critereTri = joueur => joueur.Statistique(regles, Statistique.PartieGagnee); + break; + + case "Partie Perdue": + critereTri = joueur => joueur.Statistique(regles, Statistique.PartiePerdue); + break; + + case "Partie Égalité": + critereTri = joueur => joueur.Statistique(regles, Statistique.PartieEgalite); + break; + + default: + critereTri = joueur => + { + + int totalParties = joueur.Statistique(regles, Statistique.PartiePerdue) + + joueur.Statistique(regles, Statistique.PartieGagnee) + + joueur.Statistique(regles, Statistique.PartieEgalite); + return totalParties == 0 ? 0 : (double)joueur.Statistique(regles, Statistique.CoupJoue) / totalParties; + }; + break; + } + + BindingContext = GetClassement(critereTri); + + } + } + + public class Classement + { + private IRegles regles; + private Manageur manageur; + private Joueur joueur; + private Func critereTri; + + public Joueur Joueur + { + get => joueur; + private set => joueur = value; + } + + public int Place + { + get => manageur.Joueurs + .OrderBy(critereTri) + .ToList() + .IndexOf(joueur) + 1; + } + + public double NbCoupMoyen + { + get + { + int totalParties = PartieEgalite + PartiePerdue + PartieGagnee; + return totalParties == 0 ? 0 : joueur.Statistique(regles, Statistique.CoupJoue) / totalParties; + } + } + + public int PartieGagnee + { + get => joueur.Statistique(regles, Statistique.PartieGagnee); + } + + public int PartiePerdue + { + get => joueur.Statistique(regles, Statistique.PartiePerdue); + } + public int PartieEgalite + { + get => joueur.Statistique(regles, Statistique.PartieEgalite); + } + public Classement(Joueur joueur, Manageur manageur, Func critereTri, IRegles regles) + { + this.manageur = manageur; + this.joueur = joueur; + this.critereTri = critereTri; + this.regles = regles; + } } } \ No newline at end of file diff --git a/Sources/MauiSpark/Resources/Styles/Styles.xaml b/Sources/MauiSpark/Resources/Styles/Styles.xaml index d54d87a..2069dc8 100644 --- a/Sources/MauiSpark/Resources/Styles/Styles.xaml +++ b/Sources/MauiSpark/Resources/Styles/Styles.xaml @@ -16,10 +16,30 @@ - - + + + + + + +