You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
mastermind/Sources/MauiSpark/Pages/TableauScore.xaml.cs

141 lines
4.8 KiB

using CoreLibrary.Joueurs;
using CoreLibrary.Manageurs;
using CoreLibrary.Statistiques;
using System.Linq;
using CoreLibrary.Regles;
namespace MauiSpark.Pages
{
public partial class TableauScore : ContentPage
{
private IRegles regles = new ReglesClassiques();
public TableauScore()
{
NavigationPage.SetHasNavigationBar(this, false);
InitializeComponent();
QuandButtonClassementClique(null, EventArgs.Empty);
}
private void QuandButtonRegleClassiqueClique(object sender, EventArgs e)
{
regles = new ReglesClassiques();
}
public int NbClique { get; set; } = 0;
public IEnumerable<Classement> GetClassement(Func<Joueur, object> critereTri)
{
IEnumerable<Joueur> 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<Joueur, object> 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<67>e":
critereTri = joueur => joueur.Statistique(regles, Statistique.PartieGagnee);
break;
case "Partie Perdue":
critereTri = joueur => joueur.Statistique(regles, Statistique.PartiePerdue);
break;
case "Partie <20>galit<69>":
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);
int a = 2;
}
}
public class Classement
{
private IRegles regles;
private Manageur manageur;
private Joueur joueur;
private Func<Joueur, object> critereTri;
public Joueur Joueur
{
get => joueur;
private set => joueur = value;
}
public int Place
{
get => manageur.joueurs
.OrderBy(critereTri)
.ToList()
.IndexOf(joueur) + 1;
}
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 double NbCoupMoyen
{
get
{
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;
}
}
public Classement(Joueur joueur, Manageur manageur, Func<Joueur, object> critereTri, IRegles regles)
{
this.manageur = manageur;
this.joueur = joueur;
this.critereTri = critereTri;
this.regles = regles;
}
}
}