|
|
|
@ -12,6 +12,10 @@ namespace CoreLibrary
|
|
|
|
|
{
|
|
|
|
|
public IRegles Regles { get; private set; }
|
|
|
|
|
|
|
|
|
|
private readonly List<Joueur> joueurs = new List<Joueur>();
|
|
|
|
|
private readonly List<Plateau> plateaux = new List<Plateau>();
|
|
|
|
|
private int? courant;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Événement déclenché lorsqu'il est nécessaire de d'ajouter un joueur.
|
|
|
|
|
/// </summary>
|
|
|
|
@ -110,7 +114,7 @@ namespace CoreLibrary
|
|
|
|
|
JoueurBuilder joueurBuilder = new JoueurBuilder();
|
|
|
|
|
joueurBuilder.ConstruireJoueur += Joueur;
|
|
|
|
|
|
|
|
|
|
QuandDemanderNom(Regles.NbJoueurs + 1, joueurBuilder);
|
|
|
|
|
QuandDemanderNom(joueurs.Count + 1, joueurBuilder);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
@ -118,17 +122,19 @@ namespace CoreLibrary
|
|
|
|
|
/// </summary>
|
|
|
|
|
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
|
|
|
|
|
/// </summary>
|
|
|
|
|
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());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
@ -153,21 +160,24 @@ namespace CoreLibrary
|
|
|
|
|
/// </summary>
|
|
|
|
|
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
|
|
|
|
|
/// </summary>
|
|
|
|
|
private void Terminee()
|
|
|
|
|
{
|
|
|
|
|
QuandPartieTerminee(Regles.Gagnants(), Regles.Perdants());
|
|
|
|
|
List<Joueur> gagnants = new List<Joueur>();
|
|
|
|
|
List<Joueur> perdants = new List<Joueur>();
|
|
|
|
|
|
|
|
|
|
for(int i = 0; i < joueurs.Count; i++)
|
|
|
|
|
{
|
|
|
|
|
if (plateaux[i].Victoire)
|
|
|
|
|
gagnants.Add(joueurs[i]);
|
|
|
|
|
else
|
|
|
|
|
perdants.Add(joueurs[i]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
QuandPartieTerminee(gagnants, perdants);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|