public Creature(Creature copie) { m_Couleur = copie.m_Couleur; m_CouleurDeFond = copie.m_CouleurDeFond; m_Defense = copie.m_Defense; m_DonneXP = copie.m_DonneXP; m_Espece = copie.m_Espece; m_Force = copie.m_Force; m_FrequenceApparition = copie.m_FrequenceApparition; m_Niveau = copie.m_Niveau; m_Vie = copie.m_Vie; m_VieMax = copie.m_VieMax; } // constructeur de copie, a partir d'un monstre original
public void jouerPartie(bool nouvellePartie, Aventurier joueur, string nomPartie) { #region demmarrage d'une nouvelle partie if (nouvellePartie) { //On recupere la position de l'aventurier dans la map string positionInitialAventurier; string[] infosPremierNiveau = m_InfosCartes[0][3].Split(';'); // la position est sur la 4eme ligne de la première map positionInitialAventurier = infosPremierNiveau[infosPremierNiveau.Length - 1]; //la position dans la map de l'aventurier est toujours le dernier element de la map joueur = new Vivant.Aventurier(positionInitialAventurier); } #endregion #region chargement des états de la partie en memoire sur le Dur else { m_EtatsDesCoffres = null; m_EtatsDesPieces = null; m_EtatsDesTorches = null; string coffreDecrypte = Fonctions.decryptage(nomPartie + "\\coffres.sav"), torcheDecrypte = Fonctions.decryptage(nomPartie + "\\torches.sav"), pieceDecrypte = Fonctions.decryptage(nomPartie + "\\pieces.sav") ; #region chargement coffre XmlSerializer xs = new XmlSerializer(typeof(List<List<Objets.Coffres>>)); using (StreamReader sw = new StreamReader(coffreDecrypte)) { m_EtatsDesCoffres = xs.Deserialize(sw) as List<List<Objets.Coffres>>; } #endregion #region chargement torche xs = new XmlSerializer(typeof(List<List<Objets.Torches>>)); using (StreamReader sw = new StreamReader(torcheDecrypte)) { m_EtatsDesTorches = xs.Deserialize(sw) as List<List<Objets.Torches>>; } #endregion #region chargement pieces xs = new XmlSerializer(typeof(List<List<Objets.Pieces>>)); using (StreamReader sw = new StreamReader(pieceDecrypte)) { m_EtatsDesPieces = xs.Deserialize(sw) as List<List<Objets.Pieces>>; } #endregion File.Delete(coffreDecrypte); File.Delete(torcheDecrypte); File.Delete(pieceDecrypte); } #endregion const int tailleMaxCarteX = 100, tailleMaxCarteY = 100; List<List<affichage>> affichageMap = new List<List<affichage>>(); #region première initialisation de affichageMap totalement vide for (int i = 0; i < tailleMaxCarteX; i++) { affichageMap.Add(new List<affichage>()); for (int j = 0; j < tailleMaxCarteY; j++) affichageMap[i].Add(new affichage()); } #endregion while (true) { // on affiche la map avec comme arguments : /* * l'état du joueur * l'états des torches * l'états des pîeces * */ m_Cartes[joueur.PositionZ].afficheMap(ref joueur, m_EtatsDesTorches[joueur.PositionZ], m_EtatsDesPieces[joueur.PositionZ], ref affichageMap); bool apparitionMonstre = false; // un monstre peut il apparaitre, est mis a true si deplacement ConsoleKeyInfo touchePresse = Console.ReadKey(); switch (touchePresse.Key) { #region reaction mouvement #region aller a gauche case ConsoleKey.LeftArrow: if (m_Cartes[joueur.PositionZ].m_Map[joueur.PositionX][(joueur.PositionY - 1)].estAtteignable) { joueur.PositionY--; } apparitionMonstre = true; break; #endregion #region aller a droite case ConsoleKey.RightArrow: if (m_Cartes[joueur.PositionZ].m_Map[joueur.PositionX][(joueur.PositionY + 1)].estAtteignable) { joueur.PositionY++; } apparitionMonstre = true; break; #endregion #region aller en haut case ConsoleKey.UpArrow: if (m_Cartes[joueur.PositionZ].m_Map[(joueur.PositionX - 1)][joueur.PositionY].estAtteignable) { joueur.PositionX--; } apparitionMonstre = true; break; #endregion #region aller en bas case ConsoleKey.DownArrow: if(m_Cartes[joueur.PositionZ].m_Map.Count > (joueur.PositionX+2)) // tant que le joueur ne sort pas de la map // c'est +2 a cause d'une ligne suplémentaire dans la variable if (m_Cartes[joueur.PositionZ].m_Map[(joueur.PositionX + 1)][joueur.PositionY].estAtteignable) { joueur.PositionX++; } apparitionMonstre = true; break; #endregion #region changer de niveau -C case ConsoleKey.C: TypeDeLieu caseSousJoueur = m_Cartes[joueur.PositionZ].m_Map[joueur.PositionX][joueur.PositionY].TypeDeLaCase; if (caseSousJoueur.Equals(TypeDeLieu.EscalierDescandant)) { joueur.PositionZ--; affichageMap = new List<List<affichage>>(); #region réinitialisation de affichageMap for (int i = 0; i < tailleMaxCarteX; i++) { affichageMap.Add(new List<affichage>()); for (int j = 0; j < tailleMaxCarteY; j++) affichageMap[i].Add(new affichage()); } #endregion } else if (caseSousJoueur.Equals(TypeDeLieu.EscalierMontant)) { joueur.PositionZ++; affichageMap = new List<List<affichage>>(); #region réinitialisation de affichageMap for (int i = 0; i < tailleMaxCarteX; i++) { affichageMap.Add(new List<affichage>()); for (int j = 0; j < tailleMaxCarteY; j++) affichageMap[i].Add(new affichage()); } #endregion } break; #endregion #endregion #region actions dans le monde #region allumer une torche - A case ConsoleKey.A: // si une des cases autour est une torche et qu'elle est eteinte // on allume la torche => on change son état et sa couleur foreach (Torches torche in m_EtatsDesTorches[joueur.PositionZ]) { if (!torche.estAllume) { if (joueur.PositionX + 1 == torche.posX && joueur.PositionY == torche.posY || joueur.PositionX - 1 == torche.posX && joueur.PositionY == torche.posY || joueur.PositionX == torche.posX && joueur.PositionY + 1 == torche.posY || joueur.PositionX == torche.posX && joueur.PositionY - 1 == torche.posY ) { torche.estAllume = true; torche.couleurTorche = ConsoleColor.Yellow; break; // on sort de la boucle puisqu'on a trouvé la bonne torche } } } //sinon rien ne se passe break; #endregion #region rammaser un objet - R case ConsoleKey.R: switch (m_Cartes[joueur.PositionZ].m_Map[joueur.PositionX][joueur.PositionY].TypeDeLaCase) { case TypeDeLieu.Piece: foreach (Pieces piece in m_EtatsDesPieces[joueur.PositionZ]) { if (joueur.PositionX == piece.posX && joueur.PositionY == piece.posY && !piece.estPrise) { piece.estPrise = true; joueur.NombreDePiece++; break; // on sort de la boucle puisqu'on a trouvé la bonne piece } } break; default: // si ce n'est pas l'un des cas si dessus break; // on ne fais rien du tout } break; #endregion #region ouvrir un coffre - O case ConsoleKey.O: foreach(Coffres coffre in m_EtatsDesCoffres[joueur.PositionZ]) { // si un coffre est a proximite if (joueur.PositionX + 1 == coffre.posX && joueur.PositionY == coffre.posY || joueur.PositionX - 1 == coffre.posX && joueur.PositionY == coffre.posY || joueur.PositionX == coffre.posX && joueur.PositionY + 1 == coffre.posY || joueur.PositionX == coffre.posX && joueur.PositionY - 1 == coffre.posY) { coffre.ouvert = true; foreach (Objet obj in coffre.m_Contient) { switch (obj.typeDeLObjet) { case TypeDObjet.Piece: joueur.NombreDePiece++; break; case TypeDObjet.Parchemin: joueur.nouveauSort((Parchemin)obj); break; case TypeDObjet.PotionMana: joueur.ajouterElement(obj); break; case TypeDObjet.PotionVie: joueur.ajouterElement(obj); break; } } Console.SetCursorPosition(25, 10); Console.WriteLine("+---------------+"); Console.SetCursorPosition(25, 11); Console.WriteLine("| Coffre ouvert |"); Console.SetCursorPosition(25, 12); Console.WriteLine("+---------------+"); break; } } break; #endregion #region ouvrir l'inventaire - I case ConsoleKey.I: joueur.afficherInventaire(); #region réinitialisation de affichageMap du fait des affichages précédents affichageMap = new List<List<affichage>>(); for (int i = 0; i < tailleMaxCarteX; i++) { affichageMap.Add(new List<affichage>()); for (int j = 0; j < tailleMaxCarteY; j++) affichageMap[i].Add(new affichage()); } #endregion break; #endregion #region menu(retour sauvegarde chargemment quitter) - ECHAP case ConsoleKey.Escape: bool choixMenu = false; int choix = 0; #region choix de l'action dans le menu while (!choixMenu) { const int nombreAction = 4; string[] action = new string[nombreAction]; action[0] = " Retour "; action[1] = "Sauvegarder"; action[2] = " Charger "; action[3] = " Quitter "; Console.ForegroundColor = ConsoleColor.Gray; #region affichage Console.SetCursorPosition(25, 10); Console.Write("+-------------------------------------+"); Console.SetCursorPosition(25, 11); Console.Write("| |"); Console.SetCursorPosition(25, 12); Console.Write("| |"); Console.SetCursorPosition(25, 13); Console.Write("| |"); Console.SetCursorPosition(25, 14); Console.Write("| |"); Console.SetCursorPosition(25, 15); Console.Write("| |"); Console.SetCursorPosition(25, 16); Console.Write("| |"); Console.SetCursorPosition(25, 17); Console.Write("+-------------------------------------+"); for (int i = 0; i < nombreAction; i++) { Console.ForegroundColor = (choix == i ? ConsoleColor.White : ConsoleColor.Gray); Console.SetCursorPosition(30, i + 12); Console.Write(String.Format("{0,11}", action[i])); } #endregion ConsoleKeyInfo presse = Console.ReadKey(); #region reaction switch (presse.Key) { case ConsoleKey.UpArrow: if (choix == 0) choix = nombreAction; choix--; break; case ConsoleKey.DownArrow: choix++; if (choix == nombreAction) choix = 0; break; case ConsoleKey.Enter: choixMenu = true; break; default: break; } #endregion } #endregion #region reaction au choix switch (choix) { case 0: break; // on ne fais rien case 1: // sauvegarde joueur.sauvegarder(m_EtatsDesCoffres, m_EtatsDesTorches, m_EtatsDesPieces); break; case 2: // chargement if(Fonctions.confirmationSauvegarde()) joueur.sauvegarder(m_EtatsDesCoffres, m_EtatsDesTorches, m_EtatsDesPieces); string nomPart; Partie part = new Partie(); part.jouerPartie(false, Program.chargement(out nomPart), nomPart); break; case 3: // quitter if (Fonctions.confirmationSauvegarde()) joueur.sauvegarder(m_EtatsDesCoffres, m_EtatsDesTorches, m_EtatsDesPieces); System.Diagnostics.Process.GetCurrentProcess().Kill(); break; } #endregion #region réinitialisation de affichageMap du fait des affichages précédents affichageMap = new List<List<affichage>>(); for (int i = 0; i < tailleMaxCarteX; i++) { affichageMap.Add(new List<affichage>()); for (int j = 0; j < tailleMaxCarteY; j++) affichageMap[i].Add(new affichage()); } #endregion break; #endregion #endregion #region aide declanchement d'action #region combat -D niv,lettre carractéristique du monstre case ConsoleKey.D: // test combat Console.SetCursorPosition(0, 40); string monstre = Console.ReadLine(); joueur.combat(new Creature(Int32.Parse(monstre.Split(',')[0]), monstre.Split(',')[1], (double)0 ) ); #region réinitialisation de affichageMap du fait des affichages précédents affichageMap = new List<List<affichage>>(); for (int i = 0; i < tailleMaxCarteX; i++) { affichageMap.Add(new List<affichage>()); for (int j = 0; j < tailleMaxCarteY; j++) affichageMap[i].Add(new affichage()); } #endregion break; #endregion #region pause -P case ConsoleKey.P: // test pause string duree = Console.ReadLine(); Temps.Temps.pause(Int32.Parse(duree)); break; #endregion #region gain XP -G case ConsoleKey.G: // test de gain de niveau joueur.gagneNiveau(true); #region réinitialisation de affichageMap du fait des affichages précédents affichageMap = new List<List<affichage>>(); for (int i = 0; i < tailleMaxCarteX; i++) { affichageMap.Add(new List<affichage>()); for (int j = 0; j < tailleMaxCarteY; j++) affichageMap[i].Add(new affichage()); } #endregion break; #endregion #region torches allumées -T case ConsoleKey.T: foreach (Torches tor in m_EtatsDesTorches[joueur.PositionZ]) { if (!tor.estAllume) { tor.estAllume = true; tor.couleurTorche = ConsoleColor.Yellow; break; } } break; #endregion #region ajouter sort -S boule de feu (niv20) -15 mana case ConsoleKey.S: joueur.m_Grimmoire.Add(new Magie.Sort(Magie.Sorts.BouleDeFeu, 15, 20)); break; #endregion #region ajouter objet -B case ConsoleKey.B: string objet = Console.ReadLine(); switch (objet) { case "poso": joueur.m_Sac.Add(new PotionSoin(0,0,25)); break; case "poma": joueur.m_Sac.Add(new PotionMana(0, 0, 25)); break; case "piece" : joueur.NombreDePiece++; break; default: break; } break; #endregion #endregion default : break; } // fin switch if (joueur.Mort) break; #region determination d'un combat if (apparitionMonstre) { Random nombre = new Random(); // calculer et effectuer la probabilité d'apparition des monstres puis voir si le monstre apparais List<Creature> monstrePouvantAttaquer = new List<Creature>(); // pour chaque créature, si il peut apparaitre (réussite du if) foreach (Creature monstre in m_CreaturesDansMaps[joueur.PositionZ]) if (monstre.FrequenceApparition > (double)(100 * nombre.NextDouble())) monstrePouvantAttaquer.Add(monstre); bool vraiAttaque = false; // pour vérifier si un monstre attaque réellement Creature monstreAttaquant = new Creature() ; foreach (Creature monstre in monstrePouvantAttaquer) if (monstreAttaquant.FrequenceApparition < monstre.FrequenceApparition) { monstreAttaquant = new Creature(monstre); vraiAttaque = true; } // on determine quel monstre attaque et on déclare une vrai attaque if (vraiAttaque) joueur.combat(monstreAttaquant); // enfin a la fin du combat, du fait des affichages, on réinitialise affichageMap a totalement vide #region réinitialisation de affichageMap affichageMap = new List<List<affichage>>(); for (int i = 0; i < tailleMaxCarteX; i++) { affichageMap.Add(new List<affichage>()); for (int j = 0; j < tailleMaxCarteY; j++) affichageMap[i].Add(new affichage()); } #endregion } #endregion } // fin while(true) } // fin fonction
public void combat(Creature attaquant) { Random hasard = new Random(); bool tourDeLAventurier = true; // on commence toujours avec l'initiative, sauf certains cas spéciaux, défini plus tards dans le temps const int nombreAttaqueMax = 14; int nombreAttaque = 0; string[] attaques = new string[nombreAttaqueMax]; string[] barreManaAventurier = new string[10], barreVieAttaquant = new string[10], barreVieAventurier = new string[10]; string[] attaque = new string[nombreAttaqueMax]; while (attaquant.Vie > 0) { #region remplissage des barres { int pourcentageVieAventurier = (int)(((float)m_Vie / (float)m_VieMax) * 100); int pourcentageManaAventurier = (int)(((float)m_Mana / (float)m_ManaMax) * 100); int pourcentageVieAttaquant = (int)(((float)attaquant.Vie / (float)attaquant.VieMax) * 100); for (int i = 0; i < 100; i += 10) { if (i <= pourcentageManaAventurier) barreManaAventurier[(i / 10)] = "|"; else barreManaAventurier[(i / 10)] = " "; if (i <= pourcentageVieAventurier) barreVieAventurier[(i / 10)] = "|"; else barreVieAventurier[(i / 10)] = " "; if (i <= pourcentageVieAttaquant) barreVieAttaquant[(i / 10)] = "|"; else barreVieAttaquant[(i / 10)] = " "; } } #endregion #region affichage Console.ForegroundColor = ConsoleColor.White; Console.SetCursorPosition(15, 12); Console.WriteLine("+------------------------------------------------+"); Console.SetCursorPosition(15, 13); Console.Write("| "); Console.BackgroundColor = (tourDeLAventurier ? m_CouleurDeFond : ConsoleColor.Black); Console.ForegroundColor = m_Couleur; Console.Write(String.Format("{0,-15}", m_Nom)); Console.BackgroundColor = ConsoleColor.Black; Console.ForegroundColor = ConsoleColor.White; Console.Write(" "); Console.BackgroundColor = (tourDeLAventurier ? ConsoleColor.Black : attaquant.CouleurDeFond); Console.ForegroundColor = attaquant.Couleur; Console.Write(String.Format("{0,15}", attaquant.Espece)); Console.ForegroundColor = ConsoleColor.White; Console.BackgroundColor = ConsoleColor.Black; Console.Write(" |"); Console.SetCursorPosition(15, 14); Console.Write("| |"); Console.SetCursorPosition(15, 15); Console.Write("| |"); Console.SetCursorPosition(15, 16); Console.Write("| |"); Console.SetCursorPosition(15, 17); Console.Write("| "); Console.ForegroundColor = ConsoleColor.Red; Console.Write(barreVieAventurier[09]); Console.ForegroundColor = ConsoleColor.White; Console.Write(" "); Console.ForegroundColor = ConsoleColor.Blue; Console.Write(barreManaAventurier[09]); Console.ForegroundColor = ConsoleColor.White; Console.Write(" "); Console.ForegroundColor = ConsoleColor.Red; Console.Write(barreVieAttaquant[09]); Console.ForegroundColor = ConsoleColor.White; Console.WriteLine(" |"); Console.SetCursorPosition(15, 18); Console.Write("| "); Console.ForegroundColor = ConsoleColor.Red; Console.Write(barreVieAventurier[08]); Console.ForegroundColor = ConsoleColor.White; Console.Write(" "); Console.ForegroundColor = ConsoleColor.Blue; Console.Write(barreManaAventurier[08]); Console.ForegroundColor = ConsoleColor.White; Console.Write(" "); Console.ForegroundColor = ConsoleColor.Red; Console.Write(barreVieAttaquant[08]); Console.ForegroundColor = ConsoleColor.White; Console.WriteLine(" |"); Console.SetCursorPosition(15, 19); Console.Write("| "); Console.ForegroundColor = ConsoleColor.Red; Console.Write(barreVieAventurier[07]); Console.ForegroundColor = ConsoleColor.White; Console.Write(" "); Console.ForegroundColor = ConsoleColor.Blue; Console.Write(barreManaAventurier[07]); Console.ForegroundColor = ConsoleColor.White; Console.Write(" "); Console.ForegroundColor = ConsoleColor.Red; Console.Write(barreVieAttaquant[07]); Console.ForegroundColor = ConsoleColor.White; Console.WriteLine(" |"); Console.SetCursorPosition(15, 20); Console.Write("| "); Console.ForegroundColor = ConsoleColor.Red; Console.Write(barreVieAventurier[06]); Console.ForegroundColor = ConsoleColor.White; Console.Write(" "); Console.ForegroundColor = ConsoleColor.Blue; Console.Write(barreManaAventurier[06]); Console.ForegroundColor = ConsoleColor.White; Console.Write(" "); Console.ForegroundColor = ConsoleColor.Red; Console.Write(barreVieAttaquant[06]); Console.ForegroundColor = ConsoleColor.White; Console.WriteLine(" |"); Console.SetCursorPosition(15, 21); Console.Write("| "); Console.ForegroundColor = ConsoleColor.Red; Console.Write(barreVieAventurier[05]); Console.ForegroundColor = ConsoleColor.White; Console.Write(" "); Console.ForegroundColor = ConsoleColor.Blue; Console.Write(barreManaAventurier[05]); Console.ForegroundColor = ConsoleColor.White; Console.Write(" "); Console.ForegroundColor = ConsoleColor.Red; Console.Write(barreVieAttaquant[05]); Console.ForegroundColor = ConsoleColor.White; Console.WriteLine(" |"); Console.SetCursorPosition(15, 22); Console.Write("| "); Console.ForegroundColor = ConsoleColor.Red; Console.Write(barreVieAventurier[04]); Console.ForegroundColor = ConsoleColor.White; Console.Write(" "); Console.ForegroundColor = ConsoleColor.Blue; Console.Write(barreManaAventurier[04]); Console.ForegroundColor = ConsoleColor.White; Console.Write(" "); Console.ForegroundColor = ConsoleColor.Red; Console.Write(barreVieAttaquant[04]); Console.ForegroundColor = ConsoleColor.White; Console.WriteLine(" |"); Console.SetCursorPosition(15, 23); Console.Write("| "); Console.ForegroundColor = ConsoleColor.Red; Console.Write(barreVieAventurier[03]); Console.ForegroundColor = ConsoleColor.White; Console.Write(" "); Console.ForegroundColor = ConsoleColor.Blue; Console.Write(barreManaAventurier[03]); Console.ForegroundColor = ConsoleColor.White; Console.Write(" "); Console.ForegroundColor = ConsoleColor.Red; Console.Write(barreVieAttaquant[03]); Console.ForegroundColor = ConsoleColor.White; Console.WriteLine(" |"); Console.SetCursorPosition(15, 24); Console.Write("| "); Console.ForegroundColor = ConsoleColor.Red; Console.Write(barreVieAventurier[02]); Console.ForegroundColor = ConsoleColor.White; Console.Write(" "); Console.ForegroundColor = ConsoleColor.Blue; Console.Write(barreManaAventurier[02]); Console.ForegroundColor = ConsoleColor.White; Console.Write(" "); Console.ForegroundColor = ConsoleColor.Red; Console.Write(barreVieAttaquant[02]); Console.ForegroundColor = ConsoleColor.White; Console.WriteLine(" |"); Console.SetCursorPosition(15, 25); Console.Write("| "); Console.ForegroundColor = ConsoleColor.Red; Console.Write(barreVieAventurier[01]); Console.ForegroundColor = ConsoleColor.White; Console.Write(" "); Console.ForegroundColor = ConsoleColor.Blue; Console.Write(barreManaAventurier[01]); Console.ForegroundColor = ConsoleColor.White; Console.Write(" "); Console.ForegroundColor = ConsoleColor.Red; Console.Write(barreVieAttaquant[01]); Console.ForegroundColor = ConsoleColor.White; Console.WriteLine(" |"); Console.SetCursorPosition(15, 26); Console.Write("| "); Console.ForegroundColor = ConsoleColor.Red; Console.Write(barreVieAventurier[00]); Console.ForegroundColor = ConsoleColor.White; Console.Write(" "); Console.ForegroundColor = ConsoleColor.Blue; Console.Write(barreManaAventurier[00]); Console.ForegroundColor = ConsoleColor.White; Console.Write(" "); Console.ForegroundColor = ConsoleColor.Red; Console.Write(barreVieAttaquant[00]); Console.ForegroundColor = ConsoleColor.White; Console.WriteLine(" |"); Console.SetCursorPosition(15, 27); Console.Write("| "); Console.Write(String.Format("{0,4}", m_Vie)); Console.Write(String.Format("{0,4}", m_Mana)); Console.Write(" "); Console.Write(String.Format("{0,4}", attaquant.Vie)); Console.WriteLine(" |"); Console.SetCursorPosition(15, 28); Console.Write("| |"); Console.SetCursorPosition(15, 29); Console.Write("| |"); Console.SetCursorPosition(15, 30); Console.WriteLine("+------------------------------------------------+"); for(int i = 0; i < nombreAttaque; i++) { Console.SetCursorPosition(25, (i + 15)); Console.Write(attaques[i]); } #endregion Temps.Temps.pause(1000); if (tourDeLAventurier) { bool choixFait = false; ConsoleKeyInfo touchePressee; #region determination du choix const int nombreActions = 4; string[] actions = new string[nombreActions]; actions[0] = " Attaquer "; actions[1] = "Sortileges"; actions[2] = "Inventaire"; actions[3] = " Fuite "; bool actionChoisi = false; int choix = 0; while (!actionChoisi) { #region affichage Console.ForegroundColor = ConsoleColor.White; Console.SetCursorPosition(5, 32); Console.Write("+-------------+"); Console.SetCursorPosition(5, 33); Console.Write("| |"); Console.SetCursorPosition(5, 34); Console.Write("| |"); Console.SetCursorPosition(5, 35); Console.Write("| |"); Console.SetCursorPosition(5, 36); Console.Write("| |"); Console.SetCursorPosition(5, 37); Console.Write("| |"); Console.SetCursorPosition(5, 38); Console.Write("| |"); Console.SetCursorPosition(5, 39); Console.Write("+-------------+"); for (int i = 0; i < nombreActions; i++) { Console.ForegroundColor = (i == choix) ? ConsoleColor.White : ConsoleColor.Gray; Console.SetCursorPosition(7, i + 34); Console.Write(actions[i]); } #endregion ConsoleKeyInfo touchePresse = Console.ReadKey(); #region reaction touche switch (touchePresse.Key) { case ConsoleKey.UpArrow: if (choix == 0) choix = nombreActions; choix--; break; case ConsoleKey.DownArrow: choix++; if (choix == nombreActions) choix = 0; break; case ConsoleKey.Enter: actionChoisi = true; break; default: break; } #endregion } #endregion #region reaction en fonction de l'action switch (choix) { case 0: #region attaque // si notre attaque + notre force est plus importante que celle du monstre if (((hasard.Next(1, 6) + hasard.Next(1, 6)) + attaquant.Force) <= ((hasard.Next(1, 6) + hasard.Next(1, 6)) + m_Force + 2)) // bénéficie d'un bonus de +2 du a l'initiative { // On a infligé 'force' degat a monstre attaques[nombreAttaque] = m_Nom + " ► " + attaquant.Espece + " : -" + m_Force + "pdv"; attaquant.Vie -= m_Force; if (attaquant.Vie < 0) attaquant.Vie = 0; } else // c'est que le monstre a été plus fort { // le monstre nous a infligé 'force' degats attaques[nombreAttaque] = m_Nom + " ◄ " + attaquant.Espece + " : -" + attaquant.Force + "pdv"; m_Vie -= attaquant.Force; if (m_Vie <= 0) mort(); } nombreAttaque++; if (nombreAttaque >= nombreAttaqueMax) nombreAttaque = 0; #endregion break; // attaquer case 1: #region sortilege if (m_Grimmoire.Count > 0) { #region affichage du grimoire choix = 0; while (!choixFait) { Console.ForegroundColor = ConsoleColor.White; Console.SetCursorPosition(22, 32); Console.WriteLine("+--------------------------------------------------+"); Console.SetCursorPosition(22, 33); Console.WriteLine("| Lancer le sort : |"); for (int i = 0; i < m_Grimmoire.Count; i++) { Console.SetCursorPosition(22, (34 + i)); Console.Write("| "); Console.ForegroundColor = (i == choix ? ConsoleColor.Red : ConsoleColor.White); Console.WriteLine(m_Grimmoire[i].ToString()); Console.ForegroundColor = ConsoleColor.White; Console.WriteLine(" |"); } Console.SetCursorPosition(22, (m_Grimmoire.Count + 34)); Console.WriteLine("| |"); Console.SetCursorPosition(22, (m_Grimmoire.Count + 35)); Console.WriteLine("+--------------------------------------------------+"); touchePressee = Console.ReadKey(); switch (touchePressee.Key) { case ConsoleKey.UpArrow: choix--; if (choix < 0) choix = m_Grimmoire.Count; break; case ConsoleKey.DownArrow: choix++; if (choix == m_Grimmoire.Count) choix = 0; break; case ConsoleKey.Enter: break; default: break; } } #endregion } #region si le joueur ne connais aucun sort else { Console.SetCursorPosition(22, 32); Console.WriteLine("+--------------------------------------------------+"); Console.SetCursorPosition(22, 33); Console.WriteLine("| |"); Console.SetCursorPosition(22, 34); Console.WriteLine("| Vous ne connaissez aucun sorts |"); Console.SetCursorPosition(22, 35); Console.WriteLine("| |"); Console.SetCursorPosition(22, 36); Console.WriteLine("+--------------------------------------------------+"); Console.ReadKey(); continue; } #endregion #endregion break; // sortilege case 2: #region inventaire choix = 0; List<string> inventaireSac = new List<string>(); #region remplissage de inventaireSac List<int> nombreValeurDejaUtilise = new List<int>(); for (int i = 0; i < m_Sac.Count; i++) { try { foreach (int j in nombreValeurDejaUtilise) if (i == j) throw new Exception(); // on recomm la boucle int nombreObj = 1; for (int j = (i + 1); j < m_Sac.Count; j++) // on parcour le reste du sac if (m_Sac[i].EstEgalA(m_Sac[j])) { nombreValeurDejaUtilise.Add(j); nombreObj++; } inventaireSac.Add(String.Format("{0,-48}", (m_Sac[i].ToString() + " x" + nombreObj))); } catch (Exception ex) { } // si on attrape une excepetion, c'est qu'on a déjà vu l'objet, il faut recom la boucle } #endregion if (inventaireSac.Count > 0) { while (!choixFait) { #region affichage du sac Console.ForegroundColor = ConsoleColor.White; Console.SetCursorPosition(22, 32); Console.WriteLine("+--------------------------------------------------+"); Console.SetCursorPosition(22, 33); Console.WriteLine("| Utiliser : |"); for (int i = 0; i < inventaireSac.Count; i++) { Console.SetCursorPosition(22, (34 + i)); Console.Write("| "); Console.ForegroundColor = (i == choix ? ConsoleColor.Red : ConsoleColor.White); Console.Write(inventaireSac[i]); Console.ForegroundColor = ConsoleColor.White; Console.WriteLine(" |"); } Console.SetCursorPosition(22, (inventaireSac.Count + 34)); Console.WriteLine("| |"); Console.SetCursorPosition(22, (inventaireSac.Count + 35)); Console.WriteLine("+--------------------------------------------------+"); #endregion touchePressee = Console.ReadKey(); #region reaction touche pressée switch (touchePressee.Key) { case ConsoleKey.DownArrow: choix++; if (choix == inventaireSac.Count) choix = 0; break; case ConsoleKey.UpArrow: if (choix == 0) choix = inventaireSac.Count; choix--; break; case ConsoleKey.Enter: choixFait = true; break; default: break; } #endregion #region réaction en fonction de l'élément selectionné #endregion } } #region si le joueur a un inventaire vide else { Console.SetCursorPosition(22, 32); Console.WriteLine("+--------------------------------------------------+"); Console.SetCursorPosition(22, 33); Console.WriteLine("| |"); Console.SetCursorPosition(22, 34); Console.WriteLine("| Vous n'avez rien dans votre inventaire |"); Console.SetCursorPosition(22, 35); Console.WriteLine("| |"); Console.SetCursorPosition(22, 36); Console.WriteLine("+--------------------------------------------------+"); Console.ReadKey(); continue; } #endregion #endregion break; // inventaire case 3: #region fuite #endregion break; // fuite } #endregion } else // ca veut dire que c'est l'autre qui a l'initiative { #region attaque // si notre attaque + notre force est plus importante que celle du monstre if (((hasard.Next(1, 6) + hasard.Next(1, 6)) + attaquant.Force + 2) <= ((hasard.Next(1, 6) + hasard.Next(1, 6)) + m_Force)) // bénéficie d'un bonus de +2 du a l'initiative { // On a infligé 'force' degat a monstre attaques[nombreAttaque] = m_Nom + " ► " + attaquant.Espece + " : -" + m_Force + "pdv"; attaquant.Vie -= m_Force; if (attaquant.Vie < 0) attaquant.Vie = 0; } else // c'est que le monstre a été plus fort { // le monstre nous a infligé 'force' degats attaques[nombreAttaque] = m_Nom + " ◄ " + attaquant.Espece + " : -" + attaquant.Force + "pdv"; m_Vie -= attaquant.Force; if (m_Vie <= 0) mort(); } nombreAttaque++; if (nombreAttaque >= nombreAttaqueMax) nombreAttaque = 0; #endregion } #region si le joueur meurt au court du combat if (m_Mort) { mort(); throw new Exception("Vous etes dead"); } #endregion // on change l'initiative de coté tourDeLAventurier = !tourDeLAventurier; } // fin while //on gagne le nombre d'xp fois le rapport entre notre niveau et le niveau de l'attaquant m_XP += (int)(((float)attaquant.Niveau / (float)m_Niveau) * attaquant.DonneXP); #region affichage fin du combat Console.ForegroundColor = ConsoleColor.White; Console.SetCursorPosition(25, 18); Console.Write(" "); Console.SetCursorPosition(25, 19); Console.Write(" Fin du Combat "); Console.SetCursorPosition(25, 20); Console.Write(" Vous gagnez {0} xp ", ((int)(((float)attaquant.Niveau / (float)m_Niveau) * attaquant.DonneXP))); Console.SetCursorPosition(25, 21); Console.Write(" "); Console.ReadKey(); #endregion while(gagneNiveau(false)); // on vérifie si on gagne un ou des niveau(x) } // fin fonction