Ajout de la possibilité de supprimer le dernier jeton en faisant echap
continuous-integration/drone/push Build is passing Details

master
Céleste BARBOSA 12 months ago
parent 43a0c68f72
commit 84d05806d3

@ -0,0 +1,121 @@
using CoreLibrary.Events;
using CoreLibrary;
namespace ConsoleApp
{
public class Evenements
{
public static string? DemanderJoueur(Object? sender, DemanderJoueurEventArgs e)
{
Console.WriteLine($"Joueur {e.Numero}");
Console.Write(">>> ");
string? nom = Console.ReadLine();
Console.WriteLine();
return nom;
}
public static void CommencerLaPartie(Object? sender, DebutPartieEventArgs e)
{
Utils.DessinerSeparateur();
Console.WriteLine("La partie commence, bonne chance à tous !\n");
}
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();
}
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]);
}
public static void AjouterJeton(Object? sender, AjouterJetonEventArgs e)
{
Utils.DessinerPion(e.Jeton.Couleur);
}
public static void SupprimerDernierJeton(Object? sender, SupprimerDernierJetonEventArgs e)
{
Console.Write("\b\b\b \b\b\b\b\b\b");
}
public static void AjouterCode(Object? sender, AjouterCodeEventArgs e)
{
Console.WriteLine();
Utils.DessinerSeparateur();
}
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...");
}
}
}
}

@ -8,14 +8,13 @@ Utils.DessinerTitre();
Partie maPartie = new Partie(new ReglesClassiques());
maPartie.DemanderJoueur += Utils.DemanderJoueur;
maPartie.DebutPartie += Utils.CommencerLaPartie;
maPartie.NouveauTour += Utils.NouveauTour;
maPartie.DemanderJeton += Utils.DemanderJeton;
maPartie.AjouterJeton += Utils.AjouterJeton;
maPartie.AjouterCode += Utils.AjouterCode;
maPartie.PartieTerminee += Utils.PartieTerminee;
maPartie.Jouer();
maPartie.DemanderJoueur += Evenements.DemanderJoueur;
maPartie.DebutPartie += Evenements.CommencerLaPartie;
maPartie.NouveauTour += Evenements.NouveauTour;
maPartie.DemanderJeton += Evenements.DemanderJeton;
maPartie.AjouterJeton += Evenements.AjouterJeton;
maPartie.SupprimerDernierJeton += Evenements.SupprimerDernierJeton;
maPartie.AjouterCode += Evenements.AjouterCode;
maPartie.PartieTerminee += Evenements.PartieTerminee;
maPartie.Jouer();

@ -1,7 +1,4 @@
using CoreLibrary;
using CoreLibrary.Events;
using System.Collections.Generic;
using System.Reflection;
namespace ConsoleApp
{
@ -34,7 +31,7 @@ namespace ConsoleApp
DessinerSeparateur();
}
public static void DessinerSeparateur()
{
@ -50,9 +47,9 @@ namespace ConsoleApp
{
Console.Write(" ");
Console.ForegroundColor = pion.GetType().Equals(typeof(Couleur)) ?
couleursTerminal.GetValueOrDefault((Couleur) pion) :
indicateursTerminal.GetValueOrDefault((Indicateur) pion);
Console.ForegroundColor = pion.GetType().Equals(typeof(Couleur)) ?
couleursTerminal.GetValueOrDefault((Couleur)pion) :
indicateursTerminal.GetValueOrDefault((Indicateur)pion);
Console.BackgroundColor = Console.ForegroundColor.Equals(ConsoleColor.Black) ? ConsoleColor.White : ConsoleColor.Black;
@ -65,8 +62,8 @@ namespace ConsoleApp
public static void DessinerPlateau(IEnumerable<IEnumerable<Jeton?>> grille, IEnumerable<IEnumerable<Indicateur>> indicateurs)
{
IEnumerable<Jeton?>[] grilleTableau = (IEnumerable<Jeton?>[]) grille.ToArray();
IEnumerable<Indicateur>[] indicateursTableau = (IEnumerable<Indicateur>[]) indicateurs.ToArray();
IEnumerable<Jeton?>[] grilleTableau = (IEnumerable<Jeton?>[])grille.ToArray();
IEnumerable<Indicateur>[] indicateursTableau = (IEnumerable<Indicateur>[])indicateurs.ToArray();
Console.WriteLine(" Codes Indicateurs ");
Console.WriteLine("──────────────── ────────────────");
@ -82,7 +79,7 @@ namespace ConsoleApp
{
Jeton? jeton = ligneGrille[j];
if(jeton.HasValue)
if (jeton.HasValue)
{
DessinerPion(jeton.Value.Couleur);
}
@ -90,12 +87,12 @@ namespace ConsoleApp
{
Console.Write(" ");
}
}
Console.Write(" │ │ ");
if(indicateursTableau[i] != null)
if (indicateursTableau[i] != null)
{
Indicateur[] ligneIndicateurs = indicateursTableau[i].ToArray();
@ -121,114 +118,5 @@ namespace ConsoleApp
Console.WriteLine("│ │ │ │");
Console.WriteLine("──────────────── ────────────────");
}
public static string? DemanderJoueur(Object? sender, DemanderJoueurEventArgs e)
{
Console.WriteLine($"Joueur {e.Numero}");
Console.Write(">>> ");
string? nom = Console.ReadLine();
Console.WriteLine();
return nom;
}
public static void CommencerLaPartie(Object? sender, DebutPartieEventArgs e)
{
DessinerSeparateur();
Console.WriteLine("La partie commence, bonne chance à tous !\n");
}
public static void NouveauTour(Object? sender, NouveauTourEventArgs e)
{
DessinerSeparateur();
Console.WriteLine($"Tour {e.Tour} - {e.Joueur.Nom}\n");
DessinerPlateau(e.Grille, e.Indicateurs);
Console.WriteLine();
}
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)
{
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]);
}
public static void AjouterJeton(Object? sender, AjouterJetonEventArgs e)
{
DessinerPion(e.Jeton.Couleur);
}
public static void AjouterCode(Object? sender, AjouterCodeEventArgs e)
{
Console.WriteLine();
DessinerSeparateur();
}
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...");
}
}
}
}

@ -0,0 +1,6 @@
namespace CoreLibrary.Events
{
public class SupprimerDernierJetonEventArgs : EventArgs
{
}
}

@ -1,4 +1,5 @@
using CoreLibrary.Events;
using CoreLibrary.Exceptions;
namespace CoreLibrary
{
@ -7,7 +8,7 @@ namespace CoreLibrary
private readonly IRegles regles;
public delegate string? StringEventHandler<TEventArgs>(Object? sender, TEventArgs e);
public delegate Jeton JetonEventHandler<TEventArgs>(Object? sender, TEventArgs e);
public delegate Jeton? JetonEventHandler<TEventArgs>(Object? sender, TEventArgs e);
public event StringEventHandler<DemanderJoueurEventArgs>? DemanderJoueur;
public event JetonEventHandler<DemanderJetonEventArgs>? DemanderJeton;
@ -16,6 +17,7 @@ namespace CoreLibrary
public event EventHandler<DebutPartieEventArgs>? DebutPartie;
public event EventHandler<NouveauTourEventArgs>? NouveauTour;
public event EventHandler<AjouterJetonEventArgs>? AjouterJeton;
public event EventHandler<SupprimerDernierJetonEventArgs>? SupprimerDernierJeton;
public event EventHandler<AjouterCodeEventArgs>? AjouterCode;
public event EventHandler<PasserMainEventArgs>? PasserMain;
public event EventHandler<PartieTermineeEventArgs>? PartieTerminee;
@ -28,6 +30,7 @@ namespace CoreLibrary
private void QuandDebutPartie() => DebutPartie?.Invoke(this, new DebutPartieEventArgs());
private void QuandNouveauTour(Joueur joueur, int tour, IEnumerable<IEnumerable<Jeton?>> grille, IEnumerable<IEnumerable<Indicateur>> indicateurs) => NouveauTour?.Invoke(this, new NouveauTourEventArgs(joueur, tour, grille, indicateurs));
private void QuandNouveauJeton(Jeton jeton) => AjouterJeton?.Invoke(this, new AjouterJetonEventArgs(jeton));
private void QuandSupprimerDernierJeton() => SupprimerDernierJeton?.Invoke(this, new SupprimerDernierJetonEventArgs());
private void QuandNouveauCode(Code code) => AjouterCode?.Invoke(this, new AjouterCodeEventArgs(code));
private void QuandPasserMain() => PasserMain?.Invoke(this, new PasserMainEventArgs());
private void QuandPartieTerminee(IEnumerable<Joueur> gagnants, IEnumerable<Joueur> perdants) => PartieTerminee?.Invoke(this, new PartieTermineeEventArgs(gagnants, perdants));
@ -61,9 +64,32 @@ namespace CoreLibrary
while (!code.EstComplet())
{
Jeton jeton = QuandDemanderJeton() ?? new Jeton();
code.AjouterJeton(jeton);
QuandNouveauJeton(jeton);
Jeton? jeton = QuandDemanderJeton();
if(jeton == null)
{
if(DemanderJeton != null)
{
// Si quelqu'un écoute l'événement mais ne renvoie rien, alors on supprime le dernier jeton
try
{
code.SupprimerDernierJeton();
QuandSupprimerDernierJeton();
}
catch(CodeVideException){}
}
else
{
// Si personne n'écoute l'évenment, on met un jeton aléatoire
jeton = new Jeton();
}
}
if(jeton != null)
{
code.AjouterJeton(jeton.Value);
QuandNouveauJeton(jeton.Value);
}
}
plateauCourant.AjouterCode(code);
QuandNouveauCode(code);

Loading…
Cancel
Save