public void AjoutElement(ref List<Elements.Element> lElements, int ligne, int col)
        {
            Console.CursorVisible = true;
            Console.SetCursorPosition(col+1, ligne); Console.Write("Nom Element : ");
            ElementSet nouvelElement = new ElementSet(Console.ReadLine());
            Console.CursorVisible = false;
            List<string> affichageMenu = new List<string>();
            for (int i = 0; i < nouvelElement.NombreObjet; i++)
                affichageMenu.Add(lElements[nouvelElement.indiceNumObjet(i)].ToString());
            affichageMenu.Add("   Nouvel Objet   ");
            affichageMenu.Add("        OK        ");

            bool ok = false; int choixMenu = 0;
            while (!ok)
            {
                bool continu = false;
                #region affichage contour
                Console.SetCursorPosition(col, ligne);
                Console.Write("+--------------------------------+                ");
                Console.SetCursorPosition(col, ligne + 1);
                Console.Write("|        {0, 16}        |", nouvelElement.Nom);
                Console.SetCursorPosition(col, ligne + 2);
                Console.Write("|                                |");
                for (int i = 0; i < (affichageMenu.Count + nouvelElement.NombreObjet); i++)
                {
                    Console.SetCursorPosition(col, ligne + 3 + i);
                    Console.Write("|                                |");
                }
                Console.SetCursorPosition(col, ligne + 3 + affichageMenu.Count);
                Console.Write("|                                |");
                Console.SetCursorPosition(col, ligne + 4 + affichageMenu.Count);
                Console.Write("+--------------------------------+");
                for (int i = 0; i < 5; i++)
                {
                    Console.SetCursorPosition(col, i + ligne + 5 + affichageMenu.Count);
                    Console.Write("                                  ");
                }

                #endregion

                #region affichage contenu
                for (int i = 0; i < affichageMenu.Count; i++)
                {
                    if (affichageMenu.Count - i < 2)
                        Console.SetCursorPosition(col + 5, ligne + 3 + i);
                    else
                        Console.SetCursorPosition(col + 2, ligne + 3 + i);
                    Console.ForegroundColor = (i == choixMenu ? ConsoleColor.Red : ConsoleColor.White);
                    if (affichageMenu.Count - i < 2)
                         Console.Write(affichageMenu[i]);
                    else Console.Write("{0,-23} (+/-) ", affichageMenu[i]);
                    Console.ForegroundColor = ConsoleColor.White;
                }
                #endregion

                ConsoleKeyInfo touchePress = Console.ReadKey();
                #region Reaction touche Pressée
                switch (touchePress.Key)
                {
                    case ConsoleKey.Add:
                        if (choixMenu >= nouvelElement.NombreObjet) break; // si pas pour un element
                        nouvelElement.incNombreObjet(choixMenu);
                        break;
                    case ConsoleKey.Subtract:
                        if (choixMenu >= nouvelElement.NombreObjet) break;
                        nouvelElement.decNombreObjet(choixMenu);
                        break;
                    case ConsoleKey.UpArrow:
                        choixMenu--; if (choixMenu < 0) choixMenu++;
                        break;
                    case ConsoleKey.DownArrow:
                        choixMenu++;
                        if (choixMenu >= affichageMenu.Count)
                            choixMenu--;
                        break;
                    case ConsoleKey.Enter: continu = true; break;
                    case ConsoleKey.Escape: return;
                    default: break;
                }
                #endregion
                if (continu) // si choix parmis le menu
                {
                    choixMenu -= nouvelElement.NombreObjet;
                    switch (choixMenu)
                    {
                        // ligne ajoutObjet = ligne + taille menu + nombre Objet + bordures + titre
                        case 0: nouvelElement.ajoutObjet(ref lElements,
                                                         ligne + affichageMenu.Count
                                                         + nouvelElement.NombreObjet + 5, col);
                            break; // (ligne, col)
                        case 1: ok = true; break;
                    }
                }
            } // fin while nouvel ELement Ajouté
            nouvelElement.verifieObjet();
            m_ElementsDuSet.Add(nouvelElement);
        }
 public void AjoutElement(ElementSet es)
 {
     m_ElementsDuSet.Add(es);
 }
        static void Main(string[] args)
        {
            Console.Clear();
            Console.ForegroundColor = ConsoleColor.White;
            Console.Title = "Monster Hunter Helper";
            Console.SetWindowSize(125, 50);
            Console.CursorVisible = false;
            Sets.Set set = new Sets.Set("");
            
            List<Elements.Element> lElements = new List<Elements.Element>();
            List<Sets.Set> lSets = new List<Sets.Set>();
            List<Monstres.Monstre> lMonstre = new List<Monstres.Monstre>();

            List<int> nombreNecessaire = new List<int>(), nombreDisponible = new List<int>();
            List<Triplet> affichage = new List<Triplet>();

            #region Chargement Information
            using (StreamReader sr = new StreamReader("carnet.joueur"))
            {
                string[] elements = sr.ReadLine().Split('@');
                
                #region ajout Elements
                foreach(string element in elements)
                    lElements.Add(new Elements.Element(element.Split(',')[0], element.Split(',')[1]));
                #endregion

                string[] nombres = sr.ReadLine().Split(',');
                int nombreSet = Int32.Parse(nombres[0]),
                    nombreMonstre = Int32.Parse(nombres[1]);

                #region Ajout Sets
                for(int i = 0; i < nombreSet; i++)
                { 
                    string[] infos = sr.ReadLine().Split(',');
                    set = new Sets.Set(infos[0]);
                    int nombreES = Int32.Parse(sr.ReadLine());
                    while(nombreES-- > 0)
                    {
                        string[] sES = sr.ReadLine().Split('@');
                        Sets.ElementSet es = new Sets.ElementSet(sES[0]);
                        for (int j = 1; j < sES.Length; j++)
                        {
                            if (Int32.Parse(sES[j].Split(',')[1]) > 0)
                            {
                                es.ajoutObjet(Int32.Parse(sES[j].Split(',')[0]));
                                int nombreObjet = Int32.Parse(sES[j].Split(',')[1]);
                                while (nombreObjet-- > 0) es.incNombreObjet(j - 1); // j-1 car j démarre de 1  
                            }
                        }
                        set.AjoutElement(es);
                    }
                    lSets.Add(set);
                }
                #endregion
                
                #region Ajout Monstres
                for(int i = 0; i < nombreMonstre; i++)
                {
                    string[] infos = sr.ReadLine().Split('@');
                    Monstres.Monstre m = new Monstres.Monstre(infos[0]);
                    for(int j = 1; j < infos.Length; j++)
                        m.ajoutObjetDrop(Int32.Parse(infos[j]));
                    lMonstre.Add(m);
                }
                #endregion
                   
            } // fin using
            #endregion

            

            Console.Clear();
            List<string> menuPrinc = new List<string>(), menuAjout = new List<string>(),
                                                         menuInterraction = new List<string>(),
                                                         menuListe = new List<string>();
            menuPrinc.Add("Ajouter");
                menuAjout.Add("Element");
                menuAjout.Add("  Set  "); 
                menuAjout.Add("Monstre");
            menuPrinc.Add("Interragir");
                menuInterraction.Add("");
                menuInterraction.Add("");
                menuInterraction.Add("");
            menuPrinc.Add("Liste");
                menuListe.Add("Element");
                menuListe.Add("  Set  "); 
                menuListe.Add("Monstre");
            menuPrinc.Add("Quitter");
            while(true)
            {
                try{
                switch(Menu.Menu.menu("Menu principal", new string[][] { menuPrinc.ToArray() },
                                     1, new int[] { 0 }, new int[] { 20 }, new int[] { 20 })[0])
                {
                    case 0 : break;
                    case 1 : break;
                    case 2 : break;
                    case 3 : Console.Clear(); Console.CursorVisible = true; return;
                    default : break;
                }
                } catch(ExitException) { }
            }

            /*
            #region Création du set par le joueur
            else
            {
                Console.Write("Entrez le nom de votre set : ");
                Console.CursorVisible = true;
                Console.CursorVisible = false;
                set = new Sets.Set(Console.ReadLine());
                bool ok = false;
                while (!ok)
                {
                    List<string> listeElement = new List<string>();
                    for (int i = 0; i < set.NombreElement; i++)
                        listeElement.Add(set.Element(i));
                    listeElement.Add("Ajouter un element");
                    listeElement.Add("        OK        ");
                    
                    
                    switch (Menu.Menu.menu("", // Titre
                                           new string[][] { listeElement.ToArray()}, 1,
            /* ligne[], colone[] *//* new int[] { 14 }, new int[] { 25 },
                       /* largeur[] *//*     new int[] { 34 })[0])
                    {
                        case 0: set.AjoutElement(14, 61); break; // (ligne, col)
                        case 1: ok = true; break;
                    }
                }
            }
            #endregion
            set.recupObjets(ref lElements, ref nombreNecessaire);
            foreach (int nombre in nombreNecessaire) nombreDisponible.Add(0);
            for (int i = 0; i < objets.Count; i++)
                affichage.Add(new Triplet(objets[i], nombreNecessaire[i], nombreDisponible[i]));
            #region Enregistrement du set
            using (StreamWriter sw = new StreamWriter(set.Nom + ".set", false))
            { sw.WriteLine(set.ToString()); }
            #endregion
            #region interraction avec le set
            // Affichage de deux fenetres cote a cote, une qui affiche les éléments du set, l'autre qui affiche les objets de l'autre coté
            int hauteur = (objets.Count >= set.NombreElement ? objets.Count : set.NombreElement);
            int numFenetre = 0; // Deux morceaux de fenetres, 0 et 1
            int positionFenetre0 = 27, positionFenetre1 = 60;
            int selection = 0; // indique la ligne selectionnée
            bool quit = false;
            while (!quit)
            {
                Console.Clear();
                #region Affichage contour
                Console.SetCursorPosition(25, 0);
                Console.Write("+--------------------------------+--------------------------------------+");
                Console.SetCursorPosition(25, 1);
                Console.Write("|                      {0, -20}                             |", set.Nom);
                Console.SetCursorPosition(25, 2);
                Console.Write("|                                |                                      |", set.Nom);
                for (int i = 0; i < hauteur; i++)
                {
                    Console.SetCursorPosition(25, i + 3);
                    Console.Write("|                                |                                      |");
                }
                Console.SetCursorPosition(25, hauteur + 3);
                Console.Write("|                                |                                      |");
                Console.SetCursorPosition(25, hauteur + 4);
                Console.Write("+--------------------------------+--------------------------------------+");
                #endregion
                #region affichage des Listes
                for (int i = 0; i < set.NombreElement; i++)
                {
                    Console.SetCursorPosition(positionFenetre0, 3 + i);
                    if (numFenetre == 0 && selection == i)
                        Console.ForegroundColor = (set.Construit(i) ? ConsoleColor.DarkRed : ConsoleColor.Red);
                    else
                        Console.ForegroundColor = (set.Construit(i) ? ConsoleColor.Gray : ConsoleColor.White);

                    Console.Write(set.Element(i));
                    Console.ForegroundColor = ConsoleColor.White;
                }
                for (int i = 0; i < objets.Count; i++)
                {
                    Console.SetCursorPosition(positionFenetre1, 3 + i);
                    Console.ForegroundColor = (numFenetre == 1 && selection == i ?
                                    ConsoleColor.Red : ConsoleColor.White);
                    Console.Write(affichage[i].objet + " (" + affichage[i].nombreDisponible + "/" + affichage[i].nombreNecessaire + ")");
                    Console.ForegroundColor = ConsoleColor.White;
                }
                #endregion

                ConsoleKeyInfo touchePressee = Console.ReadKey();

                switch (touchePressee.Key)
                {
                    case ConsoleKey.DownArrow:
                        selection++;
                        if (selection >= (numFenetre == 0 ? set.NombreElement : objets.Count))
                            selection--;
                        break;
                    case ConsoleKey.UpArrow:
                        selection--; if (selection < 0) selection++;
                        break;
                    case ConsoleKey.RightArrow:
                        numFenetre++; numFenetre %= 2;
                        break;
                    case ConsoleKey.LeftArrow:
                        numFenetre--; if (numFenetre < 0) numFenetre++;
                        break;
                    case ConsoleKey.Add:
                        if (numFenetre == 1)
                            nombreDisponible[selection]++;
                        break;
                    case ConsoleKey.Subtract:
                        if (numFenetre == 1)
                        {
                            nombreDisponible[selection]--;
                            if (nombreDisponible[selection] < 0)
                                nombreDisponible[selection]++;
                        }
                        break;
                    case ConsoleKey.Enter:
                        if (numFenetre == 0)
                            set.estConstruit(selection);

                        break;
                    case ConsoleKey.Escape: quit = true; break;
                }
                if (numFenetre == 0 && selection > set.NombreElement) selection = set.NombreElement - 1;
                objets = new List<string>(); nombreNecessaire = new List<int>(); affichage = new List<Triplet>();
                set.recupObjets(ref objets, ref nombreNecessaire);
                for (int i = 0; i < objets.Count; i++)
                    affichage.Add(new Triplet(objets[i], nombreNecessaire[i], nombreDisponible[i]));

            }

            #endregion
            #region Enregistrement du set
            using (StreamWriter sw = new StreamWriter(set.Nom + ".set", false))
            { sw.WriteLine(set.ToString()); }
            #endregion
            //*/
        }