using CoreLibrary.Events;
using CoreLibrary;
namespace ConsoleApp
{
///
/// Fournit des gestionnaires d'événements les événements liés au déroulement de la partie.
///
public static class Evenements
{
///
/// Gestionnaire d'événement pour l'ajout d'un joueur.
///
public static string? DemanderJoueur(Object? sender, DemanderJoueurEventArgs e)
{
Console.WriteLine($"Joueur {e.Numero}");
Console.Write(">>> ");
string? nom = Console.ReadLine();
Console.WriteLine();
return nom;
}
///
/// Gestionnaire d'événement pour le début de la partie.
///
public static void CommencerLaPartie(Object? sender, DebutPartieEventArgs e)
{
Utils.DessinerSeparateur();
Console.WriteLine("La partie commence, bonne chance à tous !\n");
}
///
/// Gestionnaire d'événement pour le début d'un nouveau tour.
///
public static void NouveauTour(Object? sender, NouveauTourEventArgs e)
{
Utils.DessinerSeparateur();
Console.WriteLine($"Tour {e.Tour} - {e.Joueur.Nom}\n");
Utils.DessinerPlateau(e.Grille, e.Indicateurs);
Console.WriteLine();
}
///
/// Gestionnaire d'événement pour la demande d'ajout d'un jeton.
///
public static Jeton? DemanderJeton(Object? sender, DemanderJetonEventArgs e)
{
Console.TreatControlCAsInput = true;
bool aChoisi = false;
int indice = 0;
Couleur[] couleurs = (Couleur[])Enum.GetValues(typeof(Couleur));
while (!aChoisi)
{
Utils.DessinerPion(couleurs[indice]);
Console.Write("\b\b\b");
switch (Console.ReadKey(true).Key)
{
case ConsoleKey.Enter:
aChoisi = true;
break;
case ConsoleKey.LeftArrow:
--indice;
break;
case ConsoleKey.RightArrow:
++indice;
break;
case ConsoleKey.Escape:
return null;
default:
break;
}
if (indice < 0)
indice = couleurs.Length - 1;
else if (indice >= couleurs.Length)
indice = 0;
}
Console.TreatControlCAsInput = false;
return new Jeton(couleurs[indice]);
}
///
/// Gestionnaire d'événement pour l'ajout d'un jeton.
///
public static void AjouterJeton(Object? sender, AjouterJetonEventArgs e)
{
Utils.DessinerPion(e.Jeton.Couleur);
}
///
/// Gestionnaire d'événement pour la suppression du dernier jeton ajouté.
///
public static void SupprimerDernierJeton(Object? sender, SupprimerDernierJetonEventArgs e)
{
Console.Write("\b\b\b \b\b\b\b\b\b");
}
///
/// Gestionnaire d'événement pour l'ajout d'un code.
///
public static void AjouterCode(Object? sender, AjouterCodeEventArgs e)
{
Console.WriteLine();
Utils.DessinerSeparateur();
}
///
/// Gestionnaire d'événement pour la fin de la partie.
///
public static void PartieTerminee(Object? sender, PartieTermineeEventArgs 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...");
}
}
}
}