diff --git a/Sources/Fichiers/joueurs.json b/Sources/Fichiers/joueurs.json
index 527ab1b..1a549ec 100644
--- a/Sources/Fichiers/joueurs.json
+++ b/Sources/Fichiers/joueurs.json
@@ -2,24 +2,6 @@
{
"Nom": "Céleste",
"statistiques": [
- {
- "Key": {
- "Item1": {
- "__type": "ReglesClassiques:#CoreLibrary.Regles"
- },
- "Item2": 3
- },
- "Value": 6
- },
- {
- "Key": {
- "Item1": {
- "__type": "ReglesClassiques:#CoreLibrary.Regles"
- },
- "Item2": 3
- },
- "Value": 2
- },
{
"Key": {
"Item1": {
@@ -41,26 +23,24 @@
},
"Item2": 3
},
- "Value": 6
- },
- {
- "Key": {
- "Item1": {
- "__type": "ReglesClassiques:#CoreLibrary.Regles"
- },
- "Item2": 3
- },
- "Value": 1
- },
- {
- "Key": {
- "Item1": {
- "__type": "ReglesClassiques:#CoreLibrary.Regles"
- },
- "Item2": 3
- },
- "Value": 1
+ "Value": 2
}
]
+ },
+ {
+ "Nom": "a",
+ "statistiques": [ ]
+ },
+ {
+ "Nom": "b",
+ "statistiques": [ ]
+ },
+ {
+ "Nom": "e",
+ "statistiques": [ ]
+ },
+ {
+ "Nom": "f",
+ "statistiques": [ ]
}
]
\ No newline at end of file
diff --git a/Sources/Fichiers/parties.json b/Sources/Fichiers/parties.json
index 80d1f59..780cb44 100644
--- a/Sources/Fichiers/parties.json
+++ b/Sources/Fichiers/parties.json
@@ -4,18 +4,8 @@
"__type": "ReglesClassiques:#CoreLibrary.Regles"
},
"Termine": false,
- "Tour": 0,
+ "Tour": 3,
"courant": 0,
- "joueurs": [ ],
- "plateaux": [ ]
- },
- {
- "Regles": {
- "__type": "ReglesClassiques:#CoreLibrary.Regles"
- },
- "Termine": false,
- "Tour": 2,
- "courant": 1,
"joueurs": [
"Céleste",
"Pauline"
@@ -28,232 +18,21 @@
"codeSecret": {
"Jetons": [
{
- "Couleur": 0
- },
- {
- "Couleur": 3
+ "Couleur": 2
},
{
"Couleur": 3
},
{
"Couleur": 5
- }
- ],
- "TailleMax": 4
- },
- "codes": [
- {
- "Jetons": [
- {
- "Couleur": 3
- },
- {
- "Couleur": 3
- },
- {
- "Couleur": 3
- },
- {
- "Couleur": 3
- }
- ],
- "TailleMax": 4
- },
- {
- "Jetons": [
- {
- "Couleur": 1
- },
- {
- "Couleur": 1
- },
- {
- "Couleur": 1
- },
- {
- "Couleur": 1
- }
- ],
- "TailleMax": 4
- }
- ],
- "indicateurs": [
- [
- 0,
- 0
- ],
- [ ]
- ]
- },
- {
- "TailleMax": 12,
- "TailleMaxCode": 4,
- "Victoire": false,
- "codeSecret": {
- "Jetons": [
- {
- "Couleur": 0
},
{
"Couleur": 0
- },
- {
- "Couleur": 2
- },
- {
- "Couleur": 2
- }
- ],
- "TailleMax": 4
- },
- "codes": [
- {
- "Jetons": [
- {
- "Couleur": 2
- },
- {
- "Couleur": 2
- },
- {
- "Couleur": 2
- },
- {
- "Couleur": 2
- }
- ],
- "TailleMax": 4
- }
- ],
- "indicateurs": [
- [
- 0,
- 0
- ]
- ]
- }
- ]
- },
- {
- "Regles": {
- "__type": "ReglesClassiques:#CoreLibrary.Regles"
- },
- "Termine": false,
- "Tour": 8,
- "courant": 1,
- "joueurs": [
- "Céleste",
- "Pauline"
- ],
- "plateaux": [
- {
- "TailleMax": 12,
- "TailleMaxCode": 4,
- "Victoire": false,
- "codeSecret": {
- "Jetons": [
- {
- "Couleur": 2
- },
- {
- "Couleur": 0
- },
- {
- "Couleur": 2
- },
- {
- "Couleur": 4
}
],
"TailleMax": 4
},
"codes": [
- {
- "Jetons": [
- {
- "Couleur": 0
- },
- {
- "Couleur": 0
- },
- {
- "Couleur": 0
- },
- {
- "Couleur": 0
- }
- ],
- "TailleMax": 4
- },
- {
- "Jetons": [
- {
- "Couleur": 1
- },
- {
- "Couleur": 1
- },
- {
- "Couleur": 1
- },
- {
- "Couleur": 1
- }
- ],
- "TailleMax": 4
- },
- {
- "Jetons": [
- {
- "Couleur": 3
- },
- {
- "Couleur": 3
- },
- {
- "Couleur": 3
- },
- {
- "Couleur": 3
- }
- ],
- "TailleMax": 4
- },
- {
- "Jetons": [
- {
- "Couleur": 2
- },
- {
- "Couleur": 2
- },
- {
- "Couleur": 2
- },
- {
- "Couleur": 2
- }
- ],
- "TailleMax": 4
- },
- {
- "Jetons": [
- {
- "Couleur": 4
- },
- {
- "Couleur": 4
- },
- {
- "Couleur": 4
- },
- {
- "Couleur": 4
- }
- ],
- "TailleMax": 4
- },
{
"Jetons": [
{
@@ -287,45 +66,15 @@
}
],
"TailleMax": 4
- },
- {
- "Jetons": [
- {
- "Couleur": 3
- },
- {
- "Couleur": 3
- },
- {
- "Couleur": 3
- },
- {
- "Couleur": 3
- }
- ],
- "TailleMax": 4
}
],
"indicateurs": [
[
0
],
- [ ],
- [ ],
[
- 0,
0
- ],
- [
- 0
- ],
- [
- 0
- ],
- [
- 0
- ],
- [ ]
+ ]
]
},
{
@@ -335,38 +84,21 @@
"codeSecret": {
"Jetons": [
{
- "Couleur": 2
- },
- {
- "Couleur": 2
+ "Couleur": 0
},
{
"Couleur": 1
},
{
"Couleur": 2
+ },
+ {
+ "Couleur": 4
}
],
"TailleMax": 4
},
"codes": [
- {
- "Jetons": [
- {
- "Couleur": 4
- },
- {
- "Couleur": 4
- },
- {
- "Couleur": 4
- },
- {
- "Couleur": 4
- }
- ],
- "TailleMax": 4
- },
{
"Jetons": [
{
@@ -384,23 +116,6 @@
],
"TailleMax": 4
},
- {
- "Jetons": [
- {
- "Couleur": 0
- },
- {
- "Couleur": 0
- },
- {
- "Couleur": 0
- },
- {
- "Couleur": 0
- }
- ],
- "TailleMax": 4
- },
{
"Jetons": [
{
@@ -417,81 +132,29 @@
}
],
"TailleMax": 4
- },
- {
- "Jetons": [
- {
- "Couleur": 5
- },
- {
- "Couleur": 5
- },
- {
- "Couleur": 5
- },
- {
- "Couleur": 5
- }
- ],
- "TailleMax": 4
- },
- {
- "Jetons": [
- {
- "Couleur": 2
- },
- {
- "Couleur": 2
- },
- {
- "Couleur": 2
- },
- {
- "Couleur": 2
- }
- ],
- "TailleMax": 4
- },
- {
- "Jetons": [
- {
- "Couleur": 4
- },
- {
- "Couleur": 4
- },
- {
- "Couleur": 4
- },
- {
- "Couleur": 4
- }
- ],
- "TailleMax": 4
}
],
"indicateurs": [
- [ ],
[
- 0,
- 0,
0
],
- [ ],
[
0
- ],
- [ ],
- [
- 0,
- 0,
- 0
- ],
- [ ]
+ ]
]
}
]
},
+ {
+ "Regles": {
+ "__type": "ReglesClassiques:#CoreLibrary.Regles"
+ },
+ "Termine": false,
+ "Tour": 0,
+ "courant": 0,
+ "joueurs": [ ],
+ "plateaux": [ ]
+ },
{
"Regles": {
"__type": "ReglesClassiques:#CoreLibrary.Regles"
@@ -500,8 +163,8 @@
"Tour": 1,
"courant": 0,
"joueurs": [
- "Joueur 1",
- "Joueur 2"
+ "a",
+ "b"
],
"plateaux": [
{
@@ -511,16 +174,16 @@
"codeSecret": {
"Jetons": [
{
- "Couleur": 2
+ "Couleur": 0
},
{
"Couleur": 4
},
{
- "Couleur": 5
+ "Couleur": 4
},
{
- "Couleur": 2
+ "Couleur": 5
}
],
"TailleMax": 4
@@ -535,13 +198,13 @@
"codeSecret": {
"Jetons": [
{
- "Couleur": 1
+ "Couleur": 0
},
{
"Couleur": 4
},
{
- "Couleur": 2
+ "Couleur": 0
},
{
"Couleur": 4
@@ -562,8 +225,8 @@
"Tour": 1,
"courant": 0,
"joueurs": [
- "Céleste",
- "Pauline"
+ "e",
+ "f"
],
"plateaux": [
{
@@ -573,16 +236,16 @@
"codeSecret": {
"Jetons": [
{
- "Couleur": 3
+ "Couleur": 0
},
{
"Couleur": 3
},
{
- "Couleur": 4
+ "Couleur": 0
},
{
- "Couleur": 3
+ "Couleur": 2
}
],
"TailleMax": 4
@@ -597,16 +260,16 @@
"codeSecret": {
"Jetons": [
{
- "Couleur": 4
+ "Couleur": 0
},
{
"Couleur": 0
},
{
- "Couleur": 3
+ "Couleur": 2
},
{
- "Couleur": 4
+ "Couleur": 3
}
],
"TailleMax": 4
diff --git a/Sources/MauiSpark/MauiSpark.csproj b/Sources/MauiSpark/MauiSpark.csproj
index 551dd2c..648fc8f 100644
--- a/Sources/MauiSpark/MauiSpark.csproj
+++ b/Sources/MauiSpark/MauiSpark.csproj
@@ -79,6 +79,9 @@
ReglesPage.xaml
+
+ ClassementPage.xaml
+
VictoirePage.xaml
@@ -106,7 +109,7 @@
MSBuild:Compile
-
+
MSBuild:Compile
diff --git a/Sources/MauiSpark/Pages/AccueilPage.xaml.cs b/Sources/MauiSpark/Pages/AccueilPage.xaml.cs
index 4582923..13ef29c 100644
--- a/Sources/MauiSpark/Pages/AccueilPage.xaml.cs
+++ b/Sources/MauiSpark/Pages/AccueilPage.xaml.cs
@@ -1,22 +1,22 @@
-namespace MauiSpark.Pages;
-
-public partial class AccueilPage : ContentPage
-{
- public AccueilPage()
- {
- NavigationPage.SetHasBackButton(this, false);
- NavigationPage.SetHasNavigationBar(this, false);
-
- InitializeComponent();
- }
-
- private void QuandJouerClique(Object? sender, EventArgs e)
- {
- Navigation.PushAsync(new ModePage());
+namespace MauiSpark.Pages;
+
+public partial class AccueilPage : ContentPage
+{
+ public AccueilPage()
+ {
+ NavigationPage.SetHasBackButton(this, false);
+ NavigationPage.SetHasNavigationBar(this, false);
+
+ InitializeComponent();
+ }
+
+ private void QuandJouerClique(Object? sender, EventArgs e)
+ {
+ Navigation.PushAsync(new ModePage());
}
private void QuandReprendreClique(Object? sender, EventArgs e)
{
Navigation.PushAsync(new ReprendrePage());
- }
+ }
}
\ No newline at end of file
diff --git a/Sources/MauiSpark/Pages/ClassementPage.xaml b/Sources/MauiSpark/Pages/ClassementPage.xaml
new file mode 100644
index 0000000..34defd9
--- /dev/null
+++ b/Sources/MauiSpark/Pages/ClassementPage.xaml
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Sources/MauiSpark/Pages/ClassementPage.xaml.cs b/Sources/MauiSpark/Pages/ClassementPage.xaml.cs
new file mode 100644
index 0000000..e009198
--- /dev/null
+++ b/Sources/MauiSpark/Pages/ClassementPage.xaml.cs
@@ -0,0 +1,128 @@
+using CoreLibrary.Joueurs;
+using CoreLibrary.Statistiques;
+using CoreLibrary.Regles;
+using System.ComponentModel;
+using System.Runtime.CompilerServices;
+
+namespace MauiSpark.Pages
+{
+ partial class Enfant
+ {
+ private readonly Classement classement;
+
+ private int PartieJouee => PartieGagnee + PartieEgalite + PartiePerdue;
+
+ public Joueur Joueur { get; set; }
+ public int Place => classement.Enfants.ToList().IndexOf(this) + 1;
+ public int NbCoupMoyen => PartieJouee > 0 ? Joueur.Statistique(classement.Regles, Statistique.CoupJoue) / PartieJouee : Joueur.Statistique(classement.Regles, Statistique.CoupJoue);
+ public int PartieGagnee => Joueur.Statistique(classement.Regles, Statistique.PartieGagnee);
+ public int PartiePerdue => Joueur.Statistique(classement.Regles, Statistique.PartiePerdue);
+ public int PartieEgalite => Joueur.Statistique(classement.Regles, Statistique.PartieEgalite);
+
+ public Enfant(Joueur joueur, Classement classement)
+ {
+ this.classement = classement;
+ Joueur = joueur;
+ }
+
+ public override bool Equals(object? obj)
+ {
+ if (obj == null || obj is not Enfant)
+ return false;
+
+ return ((Enfant)obj).Joueur.Equals(Joueur);
+ }
+ }
+
+ partial class Classement : INotifyPropertyChanged
+ {
+ public event PropertyChangedEventHandler? PropertyChanged;
+
+ public void QuandProprieteChangee([CallerMemberName] string? nomPropriete = null)
+ {
+ PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nomPropriete));
+ }
+
+ private Dictionary> Tris => new Dictionary> {
+ { "Nom", Comparer.Create((enfant1, enfant2) => string.Compare(enfant1.Joueur.Nom, enfant2.Joueur.Nom)) },
+ { "CoupMoyen", Comparer.Create((enfant1, enfant2) => enfant2.NbCoupMoyen - enfant1.NbCoupMoyen) },
+ { "Gagnee", Comparer.Create((enfant1, enfant2) => enfant2.PartieGagnee - enfant1.PartieGagnee) },
+ { "Perdue", Comparer.Create((enfant1, enfant2) => enfant2.PartiePerdue - enfant1.PartiePerdue) },
+ { "Egalite", Comparer.Create((enfant1, enfant2) => enfant2.PartieEgalite - enfant1.PartieEgalite) },
+ };
+
+ private string typeTri = "CoupMoyen";
+ public string TypeTri {
+ get
+ {
+ return typeTri;
+ }
+ set
+ {
+ typeTri = value;
+ QuandProprieteChangee(nameof(Enfants));
+ }
+ }
+ private bool inverser = false;
+ public bool Inverser
+ {
+ get
+ {
+ return inverser;
+ }
+ set
+ {
+ inverser = value;
+ QuandProprieteChangee(nameof(Enfants));
+ }
+ }
+ private IRegles regles = new ReglesClassiques();
+ public IRegles Regles
+ {
+ get
+ {
+ return regles;
+ }
+ set
+ {
+ regles = value;
+ QuandProprieteChangee(nameof(Enfants));
+ }
+ }
+ public IComparer Tri => Tris.GetValueOrDefault(TypeTri) ?? Tris["CoupMoyen"];
+ public IEnumerable Enfants => Inverser ?
+ MauiProgram.Manageur.Joueurs.Select(joueur => new Enfant(joueur, this)).Order(Tri).Reverse() :
+ MauiProgram.Manageur.Joueurs.Select(joueur => new Enfant(joueur, this)).Order(Tri);
+ }
+
+ public partial class ClassementPage : ContentPage
+ {
+ public ClassementPage()
+ {
+ InitializeComponent();
+
+ NavigationPage.SetHasNavigationBar(this, false);
+
+ BindingContext = new Classement();
+ }
+
+ private void QuandBoutonPresse(object sender, EventArgs e)
+ {
+ Classement classement = (Classement)BindingContext;
+
+ if (sender == ReglesClassiques)
+ {
+ classement.Regles = new ReglesClassiques();
+ return;
+ }
+
+ if (classement.TypeTri == nameof(sender)) {
+ classement.Inverser = !classement.Inverser;
+ return;
+ }
+
+ classement.Inverser = false;
+ classement.TypeTri = nameof(sender);
+ }
+ }
+}
\ No newline at end of file
diff --git a/Sources/MauiSpark/Pages/TableauScore.xaml b/Sources/MauiSpark/Pages/TableauScore.xaml
deleted file mode 100644
index 6c9954d..0000000
--- a/Sources/MauiSpark/Pages/TableauScore.xaml
+++ /dev/null
@@ -1,49 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/Sources/MauiSpark/Pages/TableauScore.xaml.cs b/Sources/MauiSpark/Pages/TableauScore.xaml.cs
deleted file mode 100644
index 3810649..0000000
--- a/Sources/MauiSpark/Pages/TableauScore.xaml.cs
+++ /dev/null
@@ -1,140 +0,0 @@
-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();
- 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 2069dc8..823693f 100644
--- a/Sources/MauiSpark/Resources/Styles/Styles.xaml
+++ b/Sources/MauiSpark/Resources/Styles/Styles.xaml
@@ -17,27 +17,19 @@
-
+