diff --git a/Sources/CoreLibrary/Events/ConstruireJoueurEventArgs.cs b/Sources/CoreLibrary/Events/ConstruireJoueurEventArgs.cs
index 186fb2f..08af7fd 100644
--- a/Sources/CoreLibrary/Events/ConstruireJoueurEventArgs.cs
+++ b/Sources/CoreLibrary/Events/ConstruireJoueurEventArgs.cs
@@ -1,6 +1,4 @@
-using CoreLibrary.Joueurs;
-
-namespace CoreLibrary.Events
+namespace CoreLibrary.Events
{
///
/// Classe contenant les arguments passées en paramètre lors de l'événement ConstruireJoueurEventArgs.
@@ -10,15 +8,15 @@ namespace CoreLibrary.Events
///
/// Le nom du joueur à ajouter.
///
- public Joueur Joueur { get; private set; }
+ public string? Nom { get; private set; }
///
/// Initialise une nouvelle instance de la classe avec les informations spécifiées.
///
- /// Le joueur à ajouter.
- public ConstruireJoueurEventArgs(Joueur joueur)
+ /// Le nom du joueur à ajouter.
+ public ConstruireJoueurEventArgs(string? nom)
{
- Joueur = joueur;
+ Nom = nom;
}
}
}
diff --git a/Sources/CoreLibrary/Joueurs/JoueurBuilder.cs b/Sources/CoreLibrary/Joueurs/JoueurBuilder.cs
index 6a0f3bf..b136b7b 100644
--- a/Sources/CoreLibrary/Joueurs/JoueurBuilder.cs
+++ b/Sources/CoreLibrary/Joueurs/JoueurBuilder.cs
@@ -6,11 +6,11 @@ namespace CoreLibrary.Joueurs
{
public event EventHandler? ConstruireJoueur;
- private void QuandConstruireJoueur(Joueur joueur) => ConstruireJoueur?.Invoke(this, new ConstruireJoueurEventArgs(joueur));
+ private void QuandConstruireJoueur(string? nom) => ConstruireJoueur?.Invoke(this, new ConstruireJoueurEventArgs(nom));
- public void Joueur(Joueur joueur)
+ public void Nom(string? nom)
{
- QuandConstruireJoueur(joueur);
+ QuandConstruireJoueur(nom);
}
}
}
diff --git a/Sources/CoreLibrary/Partie.cs b/Sources/CoreLibrary/Partie.cs
index b892ee9..9c9a14b 100644
--- a/Sources/CoreLibrary/Partie.cs
+++ b/Sources/CoreLibrary/Partie.cs
@@ -12,6 +12,10 @@ namespace CoreLibrary
{
public IRegles Regles { get; private set; }
+ private readonly List joueurs = new List();
+ private readonly List plateaux = new List();
+ private int? courant;
+
///
/// Événement déclenché lorsqu'il est nécessaire de d'ajouter un joueur.
///
@@ -110,7 +114,7 @@ namespace CoreLibrary
JoueurBuilder joueurBuilder = new JoueurBuilder();
joueurBuilder.ConstruireJoueur += Joueur;
- QuandDemanderNom(Regles.NbJoueurs + 1, joueurBuilder);
+ QuandDemanderNom(joueurs.Count + 1, joueurBuilder);
}
///
@@ -118,17 +122,19 @@ namespace CoreLibrary
///
private void Joueur(Object? sender, ConstruireJoueurEventArgs e)
{
- Joueur joueur = e.Joueur;
+ Joueur joueur = new Joueur(string.IsNullOrEmpty(e.Nom) ? $"Joueur {joueurs.Count + 1}" : e.Nom);
+ Plateau plateau = new Plateau(Regles.TailleCodeMaximum, Regles.TourMaximum);
- Regles.AjouterJoueur(joueur);
+ joueurs.Add(joueur);
+ plateaux.Add(plateau);
QuandAjouterJoueur(joueur);
joueur.JouerCode += Tour;
- if (Regles.NbJoueurs != Regles.NbJoueursMaximum)
+ if (joueurs.Count != Regles.NbJoueursMaximum)
{
JoueurBuilder joueurBuilder = new JoueurBuilder();
joueurBuilder.ConstruireJoueur += Joueur;
- QuandDemanderNom(Regles.NbJoueurs + 1, joueurBuilder);
+ QuandDemanderNom(joueurs.Count + 1, joueurBuilder);
}
else
{
@@ -141,11 +147,12 @@ namespace CoreLibrary
///
private void Commencer()
{
- Regles.CommencerLaPartie();
+ courant = 0;
+ Joueur joueurCourant = joueurs[courant.Value];
+ Plateau plateauCourant = plateaux[courant.Value];
QuandDebutPartie();
- (Joueur joueurCourant, Plateau plateauCourant) = Regles.JoueurCourant();
- QuandNouveauTour(joueurCourant, plateauCourant.Tour, Regles.GenererCode(), plateauCourant.Grille(), plateauCourant.Indicateurs());
+ QuandNouveauTour(joueurCourant, plateauCourant.Tour, new Code(Regles.TailleCodeMaximum), plateauCourant.Grille(), plateauCourant.Indicateurs());
}
///
@@ -153,21 +160,24 @@ namespace CoreLibrary
///
private void Tour(Object? sender, JouerCodeEventArgs e)
{
- (Joueur joueurCourant, Plateau plateauCourant) = Regles.JoueurCourant();
+ Plateau plateauCourant = plateaux[courant!.Value];
+
plateauCourant.AjouterCode(e.Code);
QuandAjouterCode(e.Code);
- Regles.PasserLaMain();
+ if (++courant == joueurs.Count)
+ courant = 0;
QuandPasserMain();
- if (Regles.EstTerminee())
+ if(courant == 0 && (plateauCourant.Tour > Regles.TourMaximum || plateaux.Where(plateau => plateau.Victoire).Any()))
{
Terminee();
}
else
{
- (joueurCourant, plateauCourant) = Regles.JoueurCourant();
- QuandNouveauTour(joueurCourant, plateauCourant.Tour, Regles.GenererCode(), plateauCourant.Grille(), plateauCourant.Indicateurs());
+ Joueur joueurCourant = joueurs[courant!.Value];
+ plateauCourant = plateaux[courant!.Value];
+ QuandNouveauTour(joueurCourant, plateauCourant.Tour, new Code(Regles.TailleCodeMaximum), plateauCourant.Grille(), plateauCourant.Indicateurs());
}
}
@@ -176,7 +186,18 @@ namespace CoreLibrary
///
private void Terminee()
{
- QuandPartieTerminee(Regles.Gagnants(), Regles.Perdants());
+ List gagnants = new List();
+ List perdants = new List();
+
+ for(int i = 0; i < joueurs.Count; i++)
+ {
+ if (plateaux[i].Victoire)
+ gagnants.Add(joueurs[i]);
+ else
+ perdants.Add(joueurs[i]);
+ }
+
+ QuandPartieTerminee(gagnants, perdants);
}
}
}
diff --git a/Sources/CoreLibrary/Regles/IRegles.cs b/Sources/CoreLibrary/Regles/IRegles.cs
index b3bc4a9..bba390b 100644
--- a/Sources/CoreLibrary/Regles/IRegles.cs
+++ b/Sources/CoreLibrary/Regles/IRegles.cs
@@ -1,5 +1,4 @@
using CoreLibrary.Core;
-using CoreLibrary.Joueurs;
namespace CoreLibrary.Regles
{
@@ -23,60 +22,9 @@ namespace CoreLibrary.Regles
///
int TailleCodeMaximum { get; }
- ///
- /// Le nombre de joueurs actuels.
- ///
- int NbJoueurs { get; }
-
///
/// Le nombre maximum de joueurs.
///
int NbJoueursMaximum { get; }
-
- ///
- /// Ajoute un joueur à la partie.
- ///
- /// Joueur à ajouter.
- void AjouterJoueur(Joueur joueur);
-
- ///
- /// Récupère le joueur courant.
- ///
- /// Le joueur courant.
- (Joueur, Plateau) JoueurCourant();
-
- ///
- /// Passe la main au joueur suivant.
- ///
- void PasserLaMain();
-
- ///
- /// Génère un code selon les règles du jeu.
- ///
- /// Le code généré.
- Code GenererCode();
-
- ///
- /// Démarre la partie.
- ///
- void CommencerLaPartie();
-
- ///
- /// Vérifie si la partie est terminée.
- ///
- /// True si la partie est terminée, sinon False.
- bool EstTerminee();
-
- ///
- /// Récupère les joueurs gagnants.
- ///
- /// Les joueurs gagnants.
- IEnumerable Gagnants();
-
- ///
- /// Récupère les joueurs perdants.
- ///
- /// Les joueurs perdants.
- IEnumerable Perdants();
}
}
diff --git a/Sources/CoreLibrary/Regles/ReglesClassiques.cs b/Sources/CoreLibrary/Regles/ReglesClassiques.cs
index 35abefb..7c929c2 100644
--- a/Sources/CoreLibrary/Regles/ReglesClassiques.cs
+++ b/Sources/CoreLibrary/Regles/ReglesClassiques.cs
@@ -9,11 +9,6 @@ namespace CoreLibrary.Regles
///
public class ReglesClassiques : IRegles
{
- private int nbJoueurs = 0;
- private int? joueurCourant;
- private readonly Joueur[] joueurs;
- private readonly Plateau[] plateaux;
-
///
/// Le nom des règles.
///
@@ -27,145 +22,11 @@ namespace CoreLibrary.Regles
///
/// La taille maximale d'un code.
///
-
public int TailleCodeMaximum { get => 4; }
- ///
- /// Le nombre de joueurs actuels dans le jeu.
- ///
- public int NbJoueurs { get => nbJoueurs; }
///
/// Me nombre maximum de joueurs possibles pour le jeu.
///
-
public int NbJoueursMaximum { get => 2; }
-
-
- ///
- /// Initialise une nouvelle instance de la classe
- ///
- public ReglesClassiques()
- {
- joueurs = new Joueur[NbJoueursMaximum];
- plateaux = new Plateau[NbJoueursMaximum];
- }
-
- ///
- /// Ajoute un joueur à la partie.
- ///
- /// Le joueur à ajouter.
- public void AjouterJoueur(Joueur joueur)
- {
- joueurs[nbJoueurs] = joueur;
- plateaux[nbJoueurs++] = new Plateau(TailleCodeMaximum, TourMaximum);
- }
-
- ///
- /// Obtient le joueur dont c'est actuellement le tour.
- ///
- /// Le joueur actuel.
- /// Levée lorsque la partie n'a pas commencée.
-
- public (Joueur, Plateau) JoueurCourant()
- {
- if (!joueurCourant.HasValue)
- throw new PartieNonCommenceeException();
-
- return (joueurs[joueurCourant.Value], plateaux[joueurCourant.Value]);
- }
-
- ///
- /// Passe la main au joueur suivant.
- ///
- /// Levée lorsque la partie n'a pas commmencée.
- public void PasserLaMain()
- {
- if (!joueurCourant.HasValue)
- {
- throw new PartieNonCommenceeException();
- }
-
- ++joueurCourant;
-
- if (joueurCourant >= joueurs.Length)
- {
- joueurCourant = 0;
- }
-
- }
-
- ///
- /// Génère un nouveau code respectant les règles classiques.
- ///
- /// Le code généré.
- public Code GenererCode()
- {
- return new Code(TailleCodeMaximum);
- }
-
- ///
- /// Démarre la partie en décidant que le premier joueur commence.
- ///
- public void CommencerLaPartie()
- {
- joueurCourant = 0;
- }
-
- ///
- /// Vérifie si la partie est terminée.
- ///
- /// True si la partie est terminée, sinon False.
- public bool EstTerminee()
- {
- if (!joueurCourant.HasValue || joueurCourant != 0)
- return false;
-
- if (JoueurCourant().Item2.Tour > TourMaximum)
- return true;
-
- for (int i = 0; i < joueurs.Length; ++i)
- {
- if (plateaux[i].Victoire)
- return true;
- }
-
- return false;
- }
-
- ///
- /// Obtient les joueurs gagnants de la partie.
- ///
- /// La liste des joueurs gagnants.
- public IEnumerable Gagnants()
- {
- Joueur[] gagnants = [];
- for (int i = 0; i < joueurs.Length; ++i)
- {
- if (plateaux[i].Victoire)
- {
- gagnants = gagnants.Append(joueurs[i]).ToArray();
- }
- }
-
- return gagnants;
- }
-
- ///
- /// Obtient les joueurs perdants de la partie.
- ///
- /// La liste des joueurs perdants.
- public IEnumerable Perdants()
- {
- Joueur[] perdants = [];
- for (int i = 0; i < joueurs.Length; ++i)
- {
- if (!plateaux[i].Victoire)
- {
- perdants = perdants.Append(joueurs[i]).ToArray();
- }
- }
-
- return perdants;
- }
}
}
diff --git a/Sources/MauiSpark/Pages/ConnexionPage.xaml b/Sources/MauiSpark/Pages/ConnexionPage.xaml
index 80b99e0..834ee7f 100644
--- a/Sources/MauiSpark/Pages/ConnexionPage.xaml
+++ b/Sources/MauiSpark/Pages/ConnexionPage.xaml
@@ -25,7 +25,6 @@
RowDefinitions="auto">
diff --git a/Sources/MauiSpark/Pages/ConnexionPage.xaml.cs b/Sources/MauiSpark/Pages/ConnexionPage.xaml.cs
index a0cafeb..9184657 100644
--- a/Sources/MauiSpark/Pages/ConnexionPage.xaml.cs
+++ b/Sources/MauiSpark/Pages/ConnexionPage.xaml.cs
@@ -18,7 +18,7 @@ public partial class ConnexionPage : ContentPage
joueurBuilder = e.JoueurBuilder;
- if (partie.Regles.NbJoueurs + 1 == partie.Regles.NbJoueursMaximum)
+ if (e.Indice == partie.Regles.NbJoueursMaximum)
{
partie.NouveauTour += QuandNouveauTour;
partie.PartieTerminee += PartieTerminee;
@@ -35,7 +35,7 @@ public partial class ConnexionPage : ContentPage
private void QuandSeConnecterPresse(Object sender, EventArgs e)
{
- joueurBuilder.Joueur(new Joueur(Nom.Text));
+ joueurBuilder.Nom(Nom.Text);
}
private void PartieTerminee(Object? sender, PartieTermineeEventArgs e)
diff --git a/Sources/MauiSpark/Views/CTableauScore.xaml.cs b/Sources/MauiSpark/Views/CTableauScore.xaml.cs
index c1f1136..0085d27 100644
--- a/Sources/MauiSpark/Views/CTableauScore.xaml.cs
+++ b/Sources/MauiSpark/Views/CTableauScore.xaml.cs
@@ -1,8 +1,8 @@
using CoreLibrary.Joueurs;
using CoreLibrary.Manager;
-
-namespace MauiSpark.Views;
-
+
+namespace MauiSpark.Views;
+
public class JoueurClassementNbCoupParPartie
{
private Manager manager;
@@ -27,8 +27,8 @@ public class JoueurClassementNbCoupParPartie
this.manager = manager;
this.joueur = joueur;
}
-}
-
+}
+
public class JoueurClassementPartieGagnee
{
private Manager manager;
@@ -52,8 +52,8 @@ public class JoueurClassementPartieGagnee
this.manager = manager;
this.joueur = joueur;
}
-}
-
+}
+
public class JoueurClassementPartieEgalite
{
private Manager manager;
@@ -77,8 +77,8 @@ public class JoueurClassementPartieEgalite
this.manager = manager;
this.joueur = joueur;
}
-}
-
+}
+
public class JoueurClassementPartiePerdue
{
private Manager manager;
@@ -229,13 +229,13 @@ public partial class CTableauScore : ContentView
}
}
- public CTableauScore()
- {
- InitializeComponent();
+ public CTableauScore()
+ {
+ InitializeComponent();
}
-
+
public void UpdateClassement(Func> getClassement)
{
BindingContext = getClassement();
- }
+ }
}
\ No newline at end of file