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.
364 lines
11 KiB
364 lines
11 KiB
// See https://aka.ms/new-console-template for more information
|
|
|
|
using Model;
|
|
using System;
|
|
using System.Diagnostics.Metrics;
|
|
using System.Reflection.Metadata.Ecma335;
|
|
using System.Reflection.PortableExecutable;
|
|
|
|
// Déclaration du STUB
|
|
UserBase ub = new UserBase();
|
|
MonsterBase monsterBase = new MonsterBase();
|
|
|
|
//======================================= Fonctions d'affichage ============================================//
|
|
|
|
///<summary>
|
|
///Cette fonction est appelée lors de la fermeture de l'application.
|
|
///</summary>
|
|
void exitAppConsole()
|
|
{
|
|
Console.Clear();
|
|
Console.WriteLine();
|
|
Console.ForegroundColor = ConsoleColor.Red;
|
|
Console.WriteLine("\tFermeture de l'application...");
|
|
Console.ResetColor();
|
|
Thread.Sleep(800);
|
|
Console.WriteLine("\tA bientôt !");
|
|
Console.WriteLine();
|
|
}
|
|
|
|
// Cette fonction permet d'écrire une string en rouge, le plus souvent lorsque l'on veut notifier une erreur
|
|
void writeLineError(string text)
|
|
{
|
|
Console.WriteLine();
|
|
Console.ForegroundColor = ConsoleColor.Red;
|
|
Console.WriteLine($"\t{text}");
|
|
Console.ResetColor();
|
|
}
|
|
|
|
|
|
|
|
//======================================= Menus ============================================//
|
|
void menuAccueil(){
|
|
// Si jamais il y a eu des modifications de la couleur du terminal,
|
|
// cela reset le texte en blanc.
|
|
Console.ResetColor();
|
|
int choix;
|
|
|
|
do
|
|
{
|
|
choix = ConsoleHelper.MultipleChoice("Menu principal", true,
|
|
"Connexion", "Inscription", "Continuer en tant qu'invité", "Quitter l'application");
|
|
|
|
//Traitement du choix de l'utilisateur
|
|
switch (choix)
|
|
{
|
|
case -1:
|
|
// Lorsque l'utilisateur appuie sur Echap, alors quitter l'application.
|
|
exitAppConsole();
|
|
break;
|
|
case 0:
|
|
Console.Clear();
|
|
if (menuConnexion() == -1)
|
|
{
|
|
exitAppConsole();
|
|
return;
|
|
}
|
|
|
|
break;
|
|
|
|
case 1:
|
|
Console.Clear();
|
|
if (menuInscription() == -1)
|
|
{
|
|
exitAppConsole();
|
|
return;
|
|
}
|
|
break;
|
|
|
|
case 2:
|
|
Console.Clear();
|
|
menuMontres();
|
|
break;
|
|
|
|
case 3:
|
|
exitAppConsole();
|
|
return;
|
|
|
|
default:
|
|
// Pour toutes les autres possiblités non comprise entre -1 et 3
|
|
// (normalement pas possible, mais on est jamais trop prudent)
|
|
Console.Clear();
|
|
writeLineError($"La valeur {choix} n'est pas valide. Fermeture de l'application.");
|
|
return;
|
|
}
|
|
} while ( choix != -1 );
|
|
}
|
|
|
|
int menuConnexion()
|
|
{
|
|
string? id, psswd;
|
|
int nbTries = 1; // Initialise le nombre d'essais à 1
|
|
bool exists = false;
|
|
|
|
while (exists!)
|
|
{
|
|
if (nbTries > 3) // Si il y a eu plus de 3 essais effectués
|
|
{
|
|
ConsoleHelper.displayTitle("Connexion", true);
|
|
writeLineError("Trop d'erreurs. Réessayez plus tard.");
|
|
Console.WriteLine();
|
|
Thread.Sleep(1500);
|
|
return -1;
|
|
}
|
|
ConsoleHelper.displayTitle("Connexion", true);
|
|
Console.WriteLine();
|
|
|
|
// Saisie de l'identifiant
|
|
Console.Write($"\tEssai n°{nbTries} Identifiant : ");
|
|
id = Console.ReadLine();
|
|
nbTries++;
|
|
|
|
if (string.IsNullOrEmpty(id))
|
|
{
|
|
Console.Clear();
|
|
continue;
|
|
}
|
|
|
|
// Saisie du mot de passe (affichage avec des étoiles dans la console)
|
|
Console.Write("\tMot de passe : ");
|
|
psswd = ConsoleHelper.ReadPassword();
|
|
|
|
if (string.IsNullOrEmpty(psswd))
|
|
{
|
|
Console.Clear();
|
|
continue;
|
|
}
|
|
|
|
exists = ub.checkIfExists(id, psswd);
|
|
if ( !exists ) // Si le nom d'utilisateur ou le mot de passe ne correspondent pas,
|
|
// ou s'ils ne sont pas présent dans la base de données.
|
|
{
|
|
writeLineError("Erreur, identifiant ou mot de passe incorrect.");
|
|
Thread.Sleep(1000); // Pause de 1 seconde pour afficher l'erreur
|
|
}
|
|
else
|
|
{
|
|
Console.WriteLine();
|
|
Console.ForegroundColor = ConsoleColor.Green;
|
|
Console.WriteLine("\tConnexion réussie !");
|
|
Console.ResetColor ();
|
|
Thread.Sleep(2000); // Pause de 2 secondes
|
|
}
|
|
}
|
|
menuMontres();
|
|
return 0;
|
|
}
|
|
|
|
int menuInscription()
|
|
{
|
|
string pseudo;
|
|
string nom;
|
|
string prenom;
|
|
string mdp;
|
|
int n = 1; //Itérateur du nombre d'essais
|
|
while (n <= 4)
|
|
{
|
|
ConsoleHelper.displayTitle("Inscription", false);
|
|
if (n > 3)
|
|
{
|
|
writeLineError("Trop de tentatives. Réessayez plus tard.");
|
|
Console.WriteLine();
|
|
Thread.Sleep(1500);
|
|
return -1;
|
|
}
|
|
Console.WriteLine();
|
|
Console.WriteLine($"\tTentatives (jusqu'à 3) : {n}");
|
|
Console.Write("\tPrénom : ");
|
|
prenom = Console.ReadLine();
|
|
if (string.IsNullOrEmpty(prenom))
|
|
{
|
|
Console.Clear();
|
|
n++;
|
|
continue;
|
|
}
|
|
Console.Write("\tNom : ");
|
|
nom = Console.ReadLine();
|
|
if (string.IsNullOrEmpty(nom))
|
|
{
|
|
Console.Clear();
|
|
n++;
|
|
continue;
|
|
}
|
|
Console.Write("\tPseudo : ");
|
|
pseudo = Console.ReadLine();
|
|
if (string.IsNullOrEmpty(pseudo))
|
|
{
|
|
Console.Clear();
|
|
n++;
|
|
continue;
|
|
}
|
|
Console.Write("\tMot de passe : ");
|
|
mdp = ConsoleHelper.ReadPassword();
|
|
if (string.IsNullOrEmpty(mdp))
|
|
{
|
|
Console.Clear();
|
|
n++;
|
|
continue;
|
|
}
|
|
|
|
if(ub.checkIfPseudoExists(pseudo))
|
|
{
|
|
Console.Clear();
|
|
ConsoleHelper.displayTitle("Inscription", true);
|
|
writeLineError("Erreur, ce pseudo est déjà pris.");
|
|
Console.WriteLine();
|
|
System.Threading.Thread.Sleep(1500);
|
|
n++;
|
|
}
|
|
else if (ub.addUser(pseudo, nom, prenom, mdp))
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
Console.ForegroundColor = ConsoleColor.Green;
|
|
Console.WriteLine();
|
|
Console.WriteLine("\tInscription réussie !");
|
|
Console.ResetColor ();
|
|
System.Threading.Thread.Sleep(2000); // Pause de 2 secondes
|
|
return 0;
|
|
}
|
|
|
|
void menuMontres()
|
|
{
|
|
int choix;
|
|
do
|
|
{
|
|
choix = ConsoleHelper.MultipleChoice("Index des monstres", true,
|
|
"Afficher la liste des montres", "Afficher les informations d'un monstre", "Recherche", "Filtrer", "Retour à l'accueil");
|
|
|
|
switch (choix)
|
|
{
|
|
case -1:
|
|
// Lorsque l'utilisateur appuie sur Echap, retourner à l'accueil.
|
|
Console.Clear();
|
|
break;
|
|
case 0:
|
|
Console.Clear();
|
|
displayAllMonsters();
|
|
break;
|
|
|
|
case 1:
|
|
Console.Clear();
|
|
//================= A FAIRE =================//
|
|
break;
|
|
|
|
case 2:
|
|
Console.Clear();
|
|
rechercheMonstre();
|
|
break;
|
|
case 3:
|
|
Console.Clear();
|
|
//================= A FAIRE =================//
|
|
break;
|
|
|
|
case 4:
|
|
return;
|
|
|
|
default:
|
|
// Pour toutes les autres possiblités non comprise entre -1 et 3
|
|
// (normalement pas possible, mais on est jamais trop prudent)
|
|
Console.Clear();
|
|
writeLineError($"La valeur {choix} n'est pas valide.");
|
|
return;
|
|
}
|
|
} while (choix != -1); // Tant que l'utilisateur n'appuie pas sur Echap
|
|
}
|
|
|
|
//======================================= Fonctions d'affichage ============================================//
|
|
void displayAllMonsters()
|
|
{
|
|
ConsoleHelper.displayTitle("Index des monstres - Affichage des monstres", true);
|
|
displayAllMonstersLegend();
|
|
Console.WriteLine();
|
|
foreach (Monstre m in monsterBase.ListMonsters)
|
|
{
|
|
// Afficher le monstre d'une certaine couleur selon son hostilité
|
|
switch (m.Dangerosite)
|
|
{
|
|
case "hostile":
|
|
Console.ForegroundColor = ConsoleColor.DarkRed;
|
|
Console.WriteLine($"\t{m.Name}");
|
|
Console.ResetColor();
|
|
continue;
|
|
case "boss":
|
|
Console.ForegroundColor = ConsoleColor.Magenta;
|
|
Console.WriteLine($"\t{m.Name}");
|
|
Console.ResetColor();
|
|
continue;
|
|
case "passif":
|
|
Console.ForegroundColor = ConsoleColor.DarkGreen;
|
|
Console.WriteLine($"\t{m.Name}");
|
|
Console.ResetColor();
|
|
continue;
|
|
}
|
|
}
|
|
}
|
|
|
|
void displayAllMonstersLegend()
|
|
{
|
|
Console.Write("Les monstres sont soit ");
|
|
Console.ForegroundColor = ConsoleColor.DarkGreen;
|
|
Console.Write("passifs");
|
|
Console.ResetColor();
|
|
Console.Write(", ");
|
|
Console.ForegroundColor = ConsoleColor.DarkRed;
|
|
Console.Write("hostiles");
|
|
Console.ResetColor();
|
|
Console.Write(" ou ");
|
|
Console.ForegroundColor = ConsoleColor.Magenta;
|
|
Console.WriteLine("très agressifs (boss) :");
|
|
Console.ResetColor();
|
|
}
|
|
|
|
// Fonction de recherche de monstre, mise à jour de la liste à chaque touche appuyée
|
|
void rechercheMonstre()
|
|
{
|
|
List<Monstre> m;
|
|
Console.Clear();
|
|
ConsoleKeyInfo carac;
|
|
string listCarac = "";
|
|
|
|
ConsoleHelper.displayTitle("Index des monstres - Recherche", true);
|
|
Console.Write("\tRecherche : ");
|
|
carac = Console.ReadKey(true);
|
|
Console.WriteLine();
|
|
while (carac.Key != ConsoleKey.Enter && carac.Key != ConsoleKey.Escape)
|
|
{
|
|
ConsoleHelper.displayTitle("Index des monstres - Recherche", true);
|
|
Console.Write("\tRecherche : ");
|
|
if (carac.Key != ConsoleKey.Backspace)
|
|
{
|
|
listCarac += carac.KeyChar;
|
|
}
|
|
else if (carac.Key == ConsoleKey.Backspace && !string.IsNullOrEmpty(listCarac))
|
|
{
|
|
listCarac = listCarac.Remove(listCarac.Length - 1, 1);
|
|
}
|
|
|
|
Console.Write(listCarac);
|
|
Console.WriteLine();
|
|
Console.WriteLine();
|
|
m = monsterBase.search(listCarac.ToString(), monsterBase);
|
|
foreach (Monstre mnstr in m)
|
|
{
|
|
Console.WriteLine($"\t- {mnstr.Name}");
|
|
}
|
|
carac = Console.ReadKey(true);
|
|
}
|
|
writeLineError("Retour à la page précédente...");
|
|
Thread.Sleep(1000);
|
|
}
|
|
|
|
|
|
menuAccueil(); |