Transfert des règles vers partie
continuous-integration/drone/push Build is failing Details

master
Céleste BARBOSA 11 months ago
parent 84ca6115f3
commit b355e26c61

@ -1,6 +1,4 @@
using CoreLibrary.Joueurs;
namespace CoreLibrary.Events
namespace CoreLibrary.Events
{
/// <summary>
/// Classe contenant les arguments passées en paramètre lors de l'événement ConstruireJoueurEventArgs.
@ -10,15 +8,15 @@ namespace CoreLibrary.Events
/// <summary>
/// Le nom du joueur à ajouter.
/// </summary>
public Joueur Joueur { get; private set; }
public string? Nom { get; private set; }
/// <summary>
/// Initialise une nouvelle instance de la classe <see cref="ConstruireJoueurEventArgs"/> avec les informations spécifiées.
/// </summary>
/// <param name="joueur">Le joueur à ajouter.</param>
public ConstruireJoueurEventArgs(Joueur joueur)
/// <param name="nom">Le nom du joueur à ajouter.</param>
public ConstruireJoueurEventArgs(string? nom)
{
Joueur = joueur;
Nom = nom;
}
}
}

@ -6,11 +6,11 @@ namespace CoreLibrary.Joueurs
{
public event EventHandler<ConstruireJoueurEventArgs>? 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);
}
}
}

@ -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);
}
}
}

@ -1,5 +1,4 @@
using CoreLibrary.Core;
using CoreLibrary.Joueurs;
namespace CoreLibrary.Regles
{
@ -23,60 +22,9 @@ namespace CoreLibrary.Regles
/// </summary>
int TailleCodeMaximum { get; }
/// <summary>
/// Le nombre de joueurs actuels.
/// </summary>
int NbJoueurs { get; }
/// <summary>
/// Le nombre maximum de joueurs.
/// </summary>
int NbJoueursMaximum { get; }
/// <summary>
/// Ajoute un joueur à la partie.
/// </summary>
/// <param name="joueur">Joueur à ajouter.</param>
void AjouterJoueur(Joueur joueur);
/// <summary>
/// Récupère le joueur courant.
/// </summary>
/// <returns>Le joueur courant.</returns>
(Joueur, Plateau) JoueurCourant();
/// <summary>
/// Passe la main au joueur suivant.
/// </summary>
void PasserLaMain();
/// <summary>
/// Génère un code selon les règles du jeu.
/// </summary>
/// <returns>Le code généré.</returns>
Code GenererCode();
/// <summary>
/// Démarre la partie.
/// </summary>
void CommencerLaPartie();
/// <summary>
/// Vérifie si la partie est terminée.
/// </summary>
/// <returns>True si la partie est terminée, sinon False.</returns>
bool EstTerminee();
/// <summary>
/// Récupère les joueurs gagnants.
/// </summary>
/// <returns>Les joueurs gagnants.</returns>
IEnumerable<Joueur> Gagnants();
/// <summary>
/// Récupère les joueurs perdants.
/// </summary>
/// <returns>Les joueurs perdants.</returns>
IEnumerable<Joueur> Perdants();
}
}

@ -9,11 +9,6 @@ namespace CoreLibrary.Regles
/// </summary>
public class ReglesClassiques : IRegles
{
private int nbJoueurs = 0;
private int? joueurCourant;
private readonly Joueur[] joueurs;
private readonly Plateau[] plateaux;
/// <summary>
/// Le nom des règles.
/// </summary>
@ -27,145 +22,11 @@ namespace CoreLibrary.Regles
/// <summary>
/// La taille maximale d'un code.
/// </summary>
public int TailleCodeMaximum { get => 4; }
/// <summary>
/// Le nombre de joueurs actuels dans le jeu.
/// </summary>
public int NbJoueurs { get => nbJoueurs; }
/// <summary>
/// Me nombre maximum de joueurs possibles pour le jeu.
/// </summary>
public int NbJoueursMaximum { get => 2; }
/// <summary>
/// Initialise une nouvelle instance de la classe <see cref="ReglesClassiques"/>
/// </summary>
public ReglesClassiques()
{
joueurs = new Joueur[NbJoueursMaximum];
plateaux = new Plateau[NbJoueursMaximum];
}
/// <summary>
/// Ajoute un joueur à la partie.
/// </summary>
/// <param name="joueur">Le joueur à ajouter.</param>
public void AjouterJoueur(Joueur joueur)
{
joueurs[nbJoueurs] = joueur;
plateaux[nbJoueurs++] = new Plateau(TailleCodeMaximum, TourMaximum);
}
/// <summary>
/// Obtient le joueur dont c'est actuellement le tour.
/// </summary>
/// <returns>Le joueur actuel.</returns>
/// <exception cref="PartieNonCommenceeException">Levée lorsque la partie n'a pas commencée.</exception>
public (Joueur, Plateau) JoueurCourant()
{
if (!joueurCourant.HasValue)
throw new PartieNonCommenceeException();
return (joueurs[joueurCourant.Value], plateaux[joueurCourant.Value]);
}
/// <summary>
/// Passe la main au joueur suivant.
/// </summary>
/// <exception cref="PartieNonCommenceeException">Levée lorsque la partie n'a pas commmencée.</exception>
public void PasserLaMain()
{
if (!joueurCourant.HasValue)
{
throw new PartieNonCommenceeException();
}
++joueurCourant;
if (joueurCourant >= joueurs.Length)
{
joueurCourant = 0;
}
}
/// <summary>
/// Génère un nouveau code respectant les règles classiques.
/// </summary>
/// <returns>Le code généré.</returns>
public Code GenererCode()
{
return new Code(TailleCodeMaximum);
}
/// <summary>
/// Démarre la partie en décidant que le premier joueur commence.
/// </summary>
public void CommencerLaPartie()
{
joueurCourant = 0;
}
/// <summary>
/// Vérifie si la partie est terminée.
/// </summary>
/// <returns>True si la partie est terminée, sinon False.</returns>
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;
}
/// <summary>
/// Obtient les joueurs gagnants de la partie.
/// </summary>
/// <returns>La liste des joueurs gagnants.</returns>
public IEnumerable<Joueur> Gagnants()
{
Joueur[] gagnants = [];
for (int i = 0; i < joueurs.Length; ++i)
{
if (plateaux[i].Victoire)
{
gagnants = gagnants.Append(joueurs[i]).ToArray();
}
}
return gagnants;
}
/// <summary>
/// Obtient les joueurs perdants de la partie.
/// </summary>
/// <returns>La liste des joueurs perdants.</returns>
public IEnumerable<Joueur> Perdants()
{
Joueur[] perdants = [];
for (int i = 0; i < joueurs.Length; ++i)
{
if (!plateaux[i].Victoire)
{
perdants = perdants.Append(joueurs[i]).ToArray();
}
}
return perdants;
}
}
}

@ -25,7 +25,6 @@
RowDefinitions="auto">
<Label
x:Name="Nom"
Text="{Binding}"
FontSize="Large"
Margin="50, 0, 0, 0"
@ -33,6 +32,7 @@
HorizontalOptions="Center"/>
<Entry
x:Name="Nom"
Grid.Column="2"
FontSize="Medium"
Margin="50, 0"/>

@ -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)

@ -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<IEnumerable<object>> getClassement)
{
BindingContext = getClassement();
}
}
}
Loading…
Cancel
Save