using CoreLibrary.Core;
using System.Diagnostics.CodeAnalysis;
namespace ConsoleApp
{
///
/// Classe utilitaire contenant des méthodes pour dessiner des éléments dans la console.
///
[ExcludeFromCodeCoverage]
public static class Utils
{
// Dictionnaires associant les valeurs des énumérations avec les couleurs de la console
private readonly static Dictionary couleursTerminal = new Dictionary()
{
{Couleur.NOIR, ConsoleColor.Black },
{Couleur.BLANC, ConsoleColor.White },
{Couleur.ROUGE, ConsoleColor.Red },
{Couleur.VERT, ConsoleColor.Green },
{Couleur.BLEU, ConsoleColor.Blue },
{Couleur.JAUNE, ConsoleColor.DarkYellow }
};
private readonly static Dictionary indicateursTerminal = new Dictionary()
{
{Indicateur.BONNEPLACE, ConsoleColor.Black },
{Indicateur.BONNECOULEUR, ConsoleColor.White }
};
///
/// Dessine le titre du jeu dans la console.
///
public static void DessinerTitre()
{
Console.WriteLine(@"
__ __ _ _ _
| \/ | __ _ ___| |_ ___ _ _ _ __ (_) _ _ __| |
| |\/| |/ _` |(_-<| _|/ -_)| '_|| ' \ | || ' \ / _` |
|_| |_|\__,_|/__/ \__|\___||_| |_|_|_||_||_||_|\__,_|
");
DessinerSeparateur();
}
///
/// Dessine un séparateur dans la console.
///
public static void DessinerSeparateur()
{
Console.WriteLine(@"
───────────────────────────────────────────────────────
");
}
///
/// Dessine un pion dans la console.
///
/// Le pion à dessiner (une couleur ou un indicateur).
public static void DessinerPion(Enum pion)
{
Console.Write(" ");
// Sélectionne la couleur appropriée en fonction du type de pion (une couleur ou un indicateur)
// Si Couleur.ROUGE alors le fond sera ConsoleColor.Red
// Si Indicateur.BONNEPLACE alors le fond sera ConsoleColor.Black
Console.ForegroundColor = pion.GetType().Equals(typeof(Couleur)) ?
couleursTerminal.GetValueOrDefault((Couleur)pion) :
indicateursTerminal.GetValueOrDefault((Indicateur)pion);
// Si la couleur du pion est noir, alors le fond devient blanc, sinon il reste noir
Console.BackgroundColor = Console.ForegroundColor.Equals(ConsoleColor.Black) ? ConsoleColor.White : ConsoleColor.Black;
Console.OutputEncoding = System.Text.Encoding.UTF8;
Console.Write("O");
Console.ResetColor();
Console.Write(" ");
}
///
/// Dessine une ligne de pions sur la console.
///
/// Un tableau d'énumérations représentant les pions à dessiner.
private static void DessinerLigne(Enum[] ligne)
{
foreach(Enum pion in ligne)
DessinerPion(pion);
// Ajoute des espaces s'il y a moins de 4 pions à dessiner
Console.Write("".PadLeft((4 - ligne.Length) * 3));
}
///
/// Dessine un plateau de jeu dans la console, affichant les codes et leurs indicateurs.
///
/// La grille de jeu.
/// Les indicateurs associés à chaque ligne.
public static void DessinerPlateau(IEnumerable> grille, IEnumerable> indicateurs)
{
IEnumerable[] grilleTableau = grille.ToArray();
IEnumerable[] indicateursTableau = indicateurs.ToArray();
Console.WriteLine(" Codes Indicateurs ");
Console.WriteLine("──────────────── ────────────────");
Console.WriteLine("│ │ │ │");
for (int i = 0; i < grille.Count(); ++i)
{
Console.Write("│ ");
DessinerLigne(
grilleTableau[i]
.Where(jeton => jeton.HasValue)
.Select(jeton => (Enum)jeton!.Value.Couleur)
.ToArray()
);
Console.Write(" │ │ ");
if (indicateursTableau[i] == null)
{
indicateursTableau[i] = [];
}
DessinerLigne(
indicateursTableau[i]
.Select(indicateur => (Enum)indicateur)
.ToArray()
);
Console.WriteLine(" │");
}
Console.WriteLine("│ │ │ │");
Console.WriteLine("──────────────── ────────────────");
}
}
}