Ajout de plusieurs fonctionalités, notamment l'affichage de la fonction 'ajouter conseil' si l'utilisateur est connecté, modification du code de LoaderXml.cs et des Managers -> Tous fonctionnels
continuous-integration/drone/push Build is passing Details

pull/32/head
Nicolas BLONDEAU 2 years ago
parent 7c841a7680
commit eb3a8e75d2

@ -10,7 +10,10 @@ using System.Reflection.PortableExecutable;
// Déclaration des Managers (et de leur méthode de sauvegarde)
UserManager userMngr = new UserManager(new LoaderXml());
//MonsterManager ub = new MonsterManager(new LoaderStub());
MonsterManager monsterBase = new MonsterManager(new LoaderXml());
// Variables statiques
bool isUserConnected = false;
//======================================= Fonctions d'affichage ============================================//
@ -47,6 +50,10 @@ void menuAccueil(){
Console.ResetColor();
int choix;
userMngr.loadUsers();
displayAllUsers();
Thread.Sleep(2000);
do
{
choix = ConsoleHelper.MultipleChoice("Menu principal", true,
@ -56,7 +63,10 @@ void menuAccueil(){
switch (choix)
{
case -1:
// Lorsque l'utilisateur appuie sur Echap, alors quitter l'application.
// Lorsque l'utilisateur appuie sur Echap, alors sauvegarder et quitter l'application.
userMngr.saveUsers(userMngr.ListUsers);
displayAllUsers();
Thread.Sleep(2000);
exitAppConsole();
break;
case 0:
@ -89,10 +99,12 @@ void menuAccueil(){
case 4:
userMngr.loadUsers();
displayAllUsers();
return;
case 5:
userMngr.saveUsers(userMngr.ListUsers);
displayAllUsers();
return;
default:
@ -154,6 +166,7 @@ int menuConnexion()
}
else
{
isUserConnected = true;
Console.WriteLine();
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("\tConnexion réussie !");
@ -244,14 +257,23 @@ 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");
if (isUserConnected)
{
choix = ConsoleHelper.MultipleChoice("Index des monstres", true,
"Afficher la liste des monstres", "Afficher les informations d'un monstre", "Recherche", "Filtrer", "Retour à l'accueil", "Ecrire un conseil");
}
else
{
choix = ConsoleHelper.MultipleChoice("Index des monstres", true,
"Afficher la liste des monstres", "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();
isUserConnected = false;
break;
case 0:
Console.Clear();
@ -260,7 +282,9 @@ void menuMontres()
case 1:
Console.Clear();
//================= A FAIRE =================//
string texte = rechercheMonstre();
List<Monstre> m;
afficherUnMonstre(monsterBase.search(texte.ToString()));
break;
case 2:
@ -273,22 +297,28 @@ void menuMontres()
break;
case 4:
Console.Clear();
//================= A FAIRE =================//
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();
isUserConnected = false;
writeLineError($"La valeur {choix} n'est pas valide.");
return;
}
} while (choix != -1); // Tant que l'utilisateur n'appuie pas sur Echap
}
void afficherUnMonstre(List<Monstre> m)
{
}
//======================================= Fonctions d'affichage ============================================//
void displayAllMonsters()
{
/*
ConsoleHelper.displayTitle("Index des monstres - Affichage des monstres", true);
displayAllMonstersLegend();
Console.WriteLine();
@ -313,9 +343,20 @@ void displayAllMonsters()
Console.ResetColor();
continue;
}
}*/
}
Console.ReadKey();
}
void displayAllUsers()
{
Console.WriteLine();
foreach (User u in userMngr.ListUsers)
{
Console.WriteLine($"{u.Pseudo} --> {u.Prenom} {u.Nom}");
}
}
void displayAllMonstersLegend()
{
Console.Write("Les monstres sont soit ");
@ -333,8 +374,8 @@ void displayAllMonstersLegend()
}
// Fonction de recherche de monstre, mise à jour de la liste à chaque touche appuyée
void rechercheMonstre()
{/*
string rechercheMonstre()
{
List<Monstre> m;
Console.Clear();
ConsoleKeyInfo carac;
@ -360,7 +401,7 @@ void rechercheMonstre()
Console.Write(listCarac);
Console.WriteLine();
Console.WriteLine();
m = monsterBase.search(listCarac.ToString(), monsterBase);
m = monsterBase.search(listCarac.ToString());
foreach (Monstre mnstr in m)
{
Console.WriteLine($"\t- {mnstr.Name}");
@ -368,7 +409,8 @@ void rechercheMonstre()
carac = Console.ReadKey(true);
}
writeLineError("Retour à la page précédente...");
Thread.Sleep(1000);*/
Thread.Sleep(1000);
return listCarac;
}
@ -382,4 +424,5 @@ Monstre monstre = new Monstre(1, "Dragon", "Dangereux", "Un redoutable dragon cr
Conseil conseil = new Conseil(auteur, "Soyez prudent lors de votre rencontre avec le dragon.", monstre);
// Affichage du conseil
conseil.affichConseil();
conseil.affichConseil();
menuAccueil();

@ -13,34 +13,33 @@ using System.Runtime.CompilerServices;
namespace Persistance
{
// Pas possible au final de factoriser la code je pense pcq les proto son différent à chaque fois et on peut pas changer le prototype dans un appel
public class LoaderXml : IUserDataManager, IMonsterDataManager
{
static string path = "../../../../Persistance/saves/";
static string fichierUserXML = "users.xml";
static string fichierMonstreXML = "monsters.xml";
public static void sauvegarderListUsers()
{
throw new NotImplementedException();
}
List<Monstre> IMonsterDataManager.loadMonsters()
// Serialisation / Deserialisation de Monstres
public List<Monstre> loadMonsters()
{
var serialiserXML = new DataContractSerializer(typeof(List<Monstre>));
List<Monstre>? monsters;
using (Stream s = File.OpenRead(fichierMonstreXML))
try
{
monsters = serialiserXML.ReadObject(s) as List<Monstre>;
using (Stream s = File.OpenRead(fichierMonstreXML))
{
monsters = serialiserXML.ReadObject(s) as List<Monstre>;
}
}
catch (FileNotFoundException e) {
throw new FileNotFoundException("The XML file used to load a list of monsters is missing.", e);
}
return monsters;
if (monsters != null) return monsters; // ça va faire un code smells
return new List<Monstre> { };
}
/// <summary>
/// Enregistre les données dans un fichier XML
/// CORECTION: à adapter en fonction de IUserDataManager mais sinon fonctionnelle
/// </summary>
void IMonsterDataManager.saveMonsters(List<Monstre> monstres)
{
Directory.SetCurrentDirectory(Path.Combine(Directory.GetCurrentDirectory(), path)); // Setup le chemin d'accès
@ -55,9 +54,26 @@ namespace Persistance
}
}
// Serialisation / Deserialisation de Users
public List<User> loadUsers()
{
var serialiserXML = new DataContractSerializer(typeof(List<User>));
List<User>? users;
using (Stream s = File.OpenRead(path + fichierUserXML))
{
users = serialiserXML.ReadObject(s) as List<User>;
}
if (users == null)
{
return null; // Surement que ça va faire un code smells, mais j'ai pas trop cherché pour le moment
}
return users;
}
void IUserDataManager.saveUsers(List<User> users)// Serialise correctement juste voir comment l'appelé en fonction de IUserDataManager
{
Directory.SetCurrentDirectory(Path.Combine(Directory.GetCurrentDirectory(), path)); // Setup le chemin d'accès
Directory.SetCurrentDirectory(Path.Combine(Directory.GetCurrentDirectory(), path));
var serialiserXML = new DataContractSerializer(typeof(List<User>));
XmlWriterSettings xmlSettings = new XmlWriterSettings() { Indent = true }; // Pour avoir le format xml dans le fichier ( indentation etc... )
@ -70,22 +86,7 @@ namespace Persistance
}
}
public List<User> loadUsers()
{
var serialiserXML = new DataContractSerializer(typeof(List<User>));
List<User>? users;
using (Stream s = File.OpenRead(path + fichierUserXML))
{
users = serialiserXML.ReadObject(s) as List<User>;
}
Console.WriteLine();
foreach (User u in users)
{
Console.WriteLine($"{u.Pseudo} --> {u.Prenom} {u.Nom}");
}
return users;
}
}
}

@ -25,12 +25,12 @@ namespace Persistance
}
void IMonsterDataManager.saveMonsters(List<Monstre> monstres)
{
throw new NotImplementedException();
Pers.saveMonsters(monstres);
}
List<Monstre> IMonsterDataManager.loadMonsters()
{
throw new NotImplementedException();
return Pers.loadMonsters();
}
public List<Monstre> search(string texte)
@ -40,7 +40,6 @@ namespace Persistance
select m).ToList(); // LINQ
}
public MonsterManager(IMonsterDataManager dataMngr) {
Pers = dataMngr;
ListMonsters = new LoaderStub().loadMonsters();

@ -63,4 +63,11 @@
<Pseudo>TestPseudo</Pseudo>
<Mdp>TestMdp</Mdp>
</User>
<User>
<monstresDejaVu i:nil="true" />
<Nom>FJDKSLFJKLDS</Nom>
<Prenom>NKLFF</Prenom>
<Pseudo>FJDSKLFJKLSDF</Pseudo>
<Mdp>A</Mdp>
</User>
</ArrayOfUser>
Loading…
Cancel
Save