You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
mastermind/Sources/ConsoleApp/Evenements.cs

116 lines
4.4 KiB

using CoreLibrary.Evenements;
using CoreLibrary.Joueurs;
using CoreLibrary.Core;
using System.Diagnostics.CodeAnalysis;
namespace ConsoleApp
{
/// <summary>
/// Fournit un ensemble de méthodes écoutant les événements liés au déroulement de la partie.
/// </summary>
[ExcludeFromCodeCoverage]
public static class Evenements
{
/// <summary>
/// Ecoute l'événement en rapport avec la demande du nom d'un joueur.
/// <param name="sender">La classe qui appelle l'événement; ici Partie.</param>
/// <param name="e">L'instance de l'événement DemanderNomEventArgs créée par Partie.</param>
/// <returns>Le nom du joueur.</returns>
/// </summary>
public static void DemanderNom(Object? sender, PartieDemanderJoueurEventArgs e)
{
Console.WriteLine($"Joueur {e.Indice}");
Console.Write(">>> ");
string? nom = Console.ReadLine();
Console.WriteLine();
e.JoueurDemande.SeConnecter(!string.IsNullOrEmpty(nom) ? Program.Manageur.DemanderJoueur(nom) : new Joueur($"Joueur {e.Indice}"));
}
/// <summary>
/// Ecoute l'événement en rapport avec le début de la partie.
/// <param name="sender">La classe qui appelle l'événement; ici Partie.</param>
/// <param name="e">L'instance de l'événement DebutPartieEventArgs créée par Partie.</param>
/// </summary>
public static void CommencerLaPartie(Object? sender, PartieDebutPartieEventArgs e)
{
Utils.DessinerSeparateur();
Console.WriteLine("La partie commence, bonne chance à tous !\n");
}
/// <summary>
/// Ecoute l'événement en rapport avec un nouveau tour.
/// <param name="sender">La classe qui appelle l'événement; ici Partie.</param>
/// <param name="e">L'instance de l'événement NouveauTourEventArgs créée par Partie.</param>
/// </summary>
public static void NouveauTour(Object? sender, PartieNouveauTourEventArgs e)
{
Utils.DessinerSeparateur();
Console.WriteLine($"Tour {e.Tour} - {e.Joueur.Nom}\n");
(IReadOnlyList<IReadOnlyList<Jeton>> codes, IReadOnlyList<IReadOnlyList<Indicateur>> indicateurs) = e.Plateau.Grille;
Utils.DessinerPlateau(e.Plateau);
Console.WriteLine();
Code code = e.Code;
while(!code.Complet)
{
Jeton? jeton = Utils.SaisirJeton(code.Taille);
if (jeton.HasValue)
{
Utils.DessinerPion(jeton.Value.Couleur);
code.AjouterJeton(jeton.Value);
}
else
{
Utils.SupprimerDernierJeton();
code.SupprimerDernierJeton();
}
}
e.Plateau.AjouterCode(code);
}
/// <summary>
/// Ecoute l'événement en rapport avec l'ajout d'un code dans le plateau.
/// <param name="sender">La classe qui appelle l'événement; ici Partie.</param>
/// <param name="e">L'instance de l'événement AjouterCodeEventArgs créée par Partie.</param>
/// </summary>
public static void AjouterCode(Object? sender, PartiePasserLaMainEventArgs e)
{
Console.WriteLine();
Utils.DessinerSeparateur();
}
/// <summary>
/// Ecoute l'événement en rapport avec la fin de la partie.
/// <param name="sender">La classe qui appelle l'événement; ici Partie.</param>
/// <param name="e">L'instance de l'événement PartieTermineeEventArgs créée par Partie.</param>
/// </summary>
public static void PartieTerminee(Object? sender, PartiePartieTermineeEventArgs e)
{
Joueur[] gagnants = e.Gagnants.ToArray();
if (gagnants.Length > 1)
{
Console.WriteLine("C'est une égalité !");
}
else if (gagnants.Length == 1)
{
Console.WriteLine($"C'est une victoire de {gagnants[0].Nom}.");
}
else
{
Console.WriteLine("C'est une défaite des deux joueurs...");
}
}
}
}