|
|
|
@ -12,26 +12,15 @@ namespace CoreLibrary
|
|
|
|
|
{
|
|
|
|
|
private readonly IRegles regles;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Définit le délégué pour gérer les événements avec des arguments de type string.
|
|
|
|
|
/// </summary>
|
|
|
|
|
public delegate string? StringEventHandler<in TEventArgs>(Object? sender, TEventArgs e);
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Définit le délégué pour gérer les événements avec des arguments de type Jeton.
|
|
|
|
|
/// </summary>
|
|
|
|
|
public delegate Jeton? JetonEventHandler<in TEventArgs>(Object? sender, TEventArgs e);
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Événement déclenché lorsqu'il est nécessaire de d'ajouter un joueur.
|
|
|
|
|
/// </summary>
|
|
|
|
|
public event StringEventHandler<DemanderNomEventArgs>? DemanderNom;
|
|
|
|
|
public event EventHandler<DemanderNomEventArgs>? DemanderNom;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Événement déclenché lorsqu'il est nécessaire d'ajouter un joueur.
|
|
|
|
|
/// </summary>
|
|
|
|
|
public event EventHandler<AjouterJoueursEventArgs>? AjouterJoueur;
|
|
|
|
|
public event EventHandler<AjouterJoueurEventArgs>? AjouterJoueur;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Événement déclenché lorsqu'une partie commence.
|
|
|
|
@ -43,17 +32,6 @@ namespace CoreLibrary
|
|
|
|
|
/// </summary>
|
|
|
|
|
public event EventHandler<NouveauTourEventArgs>? NouveauTour;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Événement déclenché lorsqu'il est nécessaire d'ajouter un jeton.
|
|
|
|
|
/// </summary>
|
|
|
|
|
public event EventHandler<AjouterJetonEventArgs>? AjouterJeton;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Événement déclenché lorsqu'un jeton est supprimé.
|
|
|
|
|
/// </summary>
|
|
|
|
|
public event EventHandler<SupprimerDernierJetonEventArgs>? SupprimerDernierJeton;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Événement déclenché lorsqu'un code est ajouté.
|
|
|
|
|
/// </summary>
|
|
|
|
@ -70,49 +48,38 @@ namespace CoreLibrary
|
|
|
|
|
public event EventHandler<PartieTermineeEventArgs>? PartieTerminee;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Méthode pour déclencher l'événement de demande d'ajout d'un joueur.
|
|
|
|
|
/// Méthode pour déclencher l'événement de demande du nom d'un joueur.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="numero">Le numéro du joueur à ajouter</param>
|
|
|
|
|
/// <returns>Le nom du joueur demandé</returns></returns>
|
|
|
|
|
private string? QuandDemanderNom(int numero, JoueurBuilder joueurBuilder) => DemanderNom?.Invoke(this, new DemanderNomEventArgs(numero, joueurBuilder));
|
|
|
|
|
/// <param name="joueurBuilder">La classe dans laquelle le nom doit être défini</param>
|
|
|
|
|
private void QuandDemanderNom(int numero, JoueurBuilder joueurBuilder) => DemanderNom?.Invoke(this, new DemanderNomEventArgs(numero, joueurBuilder));
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Méthode pour déclencher l'événement d'ajout d'un joueur.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="joueur">Le joueur à ajouter.</param>
|
|
|
|
|
private void QuandAjouterJoueur(Joueur joueur) => AjouterJoueur?.Invoke(this, new AjouterJoueursEventArgs(joueur));
|
|
|
|
|
private void QuandAjouterJoueur(Joueur joueur) => AjouterJoueur?.Invoke(this, new AjouterJoueurEventArgs(joueur));
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Méthode pour déclencher l'événement du début d'un partie.
|
|
|
|
|
/// </summary>
|
|
|
|
|
private void QuandDebutPartie() => DebutPartie?.Invoke(this, new DebutPartieEventArgs());
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Méthode pour déclencher l'événement d'un nouveau tour.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="joueur">Le joueur dont c'est le tour.</param>
|
|
|
|
|
/// <param name="tour">Le numéro du tour.</param>
|
|
|
|
|
/// <param name="code">Le code dans lequel il faut ajouter les jetons.</param>
|
|
|
|
|
/// <param name="grille">La grille de jeu.</param>
|
|
|
|
|
/// <param name="indicateurs">Les indicateurs de jeu.</param>
|
|
|
|
|
private void QuandNouveauTour(Joueur joueur, int tour, IEnumerable<IEnumerable<Jeton?>> grille, IEnumerable<IEnumerable<Indicateur>> indicateurs) => NouveauTour?.Invoke(this, new NouveauTourEventArgs(joueur, tour, grille, indicateurs));
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Méthode pour déclencher l'événement d'ajout d'un nouveau jeton.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="jeton">Le jeton à ajouter.</param>
|
|
|
|
|
private void QuandNouveauJeton(Jeton jeton) => AjouterJeton?.Invoke(this, new AjouterJetonEventArgs(jeton));
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Méthode pour déclencher l'événement de suppression du dernier jeton du code.
|
|
|
|
|
/// </summary>
|
|
|
|
|
private void QuandSupprimerDernierJeton() => SupprimerDernierJeton?.Invoke(this, new SupprimerDernierJetonEventArgs());
|
|
|
|
|
private void QuandNouveauTour(Joueur joueur, int tour, Code code, IEnumerable<IEnumerable<Jeton?>> grille, IEnumerable<IEnumerable<Indicateur>> indicateurs) => NouveauTour?.Invoke(this, new NouveauTourEventArgs(joueur, tour, code, grille, indicateurs));
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Méthode pour déclencher l'événement d'ajout d'un nouveau code.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="code">Le code à ajouter.</param>
|
|
|
|
|
private void QuandNouveauCode(Code code) => AjouterCode?.Invoke(this, new AjouterCodeEventArgs(code));
|
|
|
|
|
/// <param name="code">Le code ajouté.</param>
|
|
|
|
|
private void QuandAjouterCode(Code code) => AjouterCode?.Invoke(this, new AjouterCodeEventArgs(code));
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Méthode pour déclencher l'événement de passage de la main au joueur suivant.
|
|
|
|
@ -146,9 +113,12 @@ namespace CoreLibrary
|
|
|
|
|
QuandDemanderNom(regles.NbJoueurs + 1, joueurBuilder);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void Joueur(Object? sender, ConstruireJoueurEventArgs e)
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Un joueur a saisi son nom
|
|
|
|
|
/// </summary>
|
|
|
|
|
private void Joueur(Object? sender, ConstruireJoueurEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
Joueur joueur = regles.AjouterJoueur(e.Nom);
|
|
|
|
|
Joueur joueur = regles.AjouterJoueur(e.Nom ?? $"Joueur {regles.NbJoueurs + 1}");
|
|
|
|
|
QuandAjouterJoueur(joueur);
|
|
|
|
|
joueur.JouerCode += Tour;
|
|
|
|
|
|
|
|
|
@ -164,20 +134,26 @@ namespace CoreLibrary
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void Commencer()
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// La partie démarre
|
|
|
|
|
/// </summary>
|
|
|
|
|
private void Commencer()
|
|
|
|
|
{
|
|
|
|
|
regles.CommencerLaPartie();
|
|
|
|
|
QuandDebutPartie();
|
|
|
|
|
|
|
|
|
|
(Joueur joueurCourant, Plateau plateauCourant) = regles.JoueurCourant();
|
|
|
|
|
QuandNouveauTour(joueurCourant, plateauCourant.Tour, plateauCourant.Grille(), plateauCourant.Indicateurs());
|
|
|
|
|
QuandNouveauTour(joueurCourant, plateauCourant.Tour, regles.GenererCode(), plateauCourant.Grille(), plateauCourant.Indicateurs());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Un joueur a joué son tour
|
|
|
|
|
/// </summary>
|
|
|
|
|
private void Tour(Object? sender, JouerCodeEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
(Joueur joueurCourant, Plateau plateauCourant) = regles.JoueurCourant();
|
|
|
|
|
plateauCourant.AjouterCode(e.Code);
|
|
|
|
|
QuandNouveauCode(e.Code);
|
|
|
|
|
QuandAjouterCode(e.Code);
|
|
|
|
|
|
|
|
|
|
if(regles.EstTerminee())
|
|
|
|
|
{
|
|
|
|
@ -187,9 +163,15 @@ namespace CoreLibrary
|
|
|
|
|
{
|
|
|
|
|
regles.PasserLaMain();
|
|
|
|
|
QuandPasserMain();
|
|
|
|
|
|
|
|
|
|
(joueurCourant, plateauCourant) = regles.JoueurCourant();
|
|
|
|
|
QuandNouveauTour(joueurCourant, plateauCourant.Tour, regles.GenererCode(), plateauCourant.Grille(), plateauCourant.Indicateurs());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// La partie est terminée
|
|
|
|
|
/// </summary>
|
|
|
|
|
private void Terminee()
|
|
|
|
|
{
|
|
|
|
|
QuandPartieTerminee(regles.Gagnants(), regles.Perdants());
|
|
|
|
|