// Procédure qui // En entrée : le joueur pj souhaitant interagir avec l'objet internal bool Melanger(Joueur pj) { if (pj.NbSubstances >= 3) { Console.WriteLine("Quelles substances souhaitez-vous ajouter pour réaliser une potion avec ce bécher ?\n"); pj.AfficheInventaire(); int subN = 0; while (subN < 4) { subN++; Console.WriteLine("Choisissez la substance numéro {0} à ajouter.", subN); int indexSub = Program.VerifSaisie(pj.NbSubstances); } Console.WriteLine("Préparation en cours"); return(true); } else if (pj.NbSubstances > 0) { Console.WriteLine("Il vous manque {0} substance pour faire une potion.\n", 3 - pj.NbSubstances); return(true); } else { return(false); } }
}//fin du Main /* Méthode qui gère les éventuelles fautes de frappe lors de la saisie d'une commande par un joueur * En Entrée : l'intervalle de valeurs entières proposé au joueur * En Sortie : le choix du joueur sous la forme d'un entier */ public static int VerifSaisie(int range) { //initialisation des variables //écriture du message d'erreur string erreurMsg = "\nVeuillez saisir un chiffre entre 1 et " + range + " ou appuyer sur a pour obtenir de l'aide"; //création d'une nouvelle instance d'exception pour gérer les entrées considérées comme non conformes Exception erreurSaisie = new Exception(erreurMsg); int numChoix = '0'; // valeur par défaut en cas d'échec bool repValide = false; //booléen renseignant sur l'état de validité de la réponse du joueur //boucle à répéter jusqu'à ce que la réponse soit du type attendu et dans les valeurs attendues do { //récupération de la touche pressée sous forme d'un char char choix = Console.ReadKey().KeyChar; //comparaison de la réponse obtenue aux réponses attendues try { //si la touche pressée ne correspond ni à un chiffre ni à une lettre : message d'erreur if (char.IsSymbol(choix)) { throw erreurSaisie; } //si le caractère saisi n'est pas un chiffre, on vérifie //s'il s'agit d'une commande spéciale else if (!char.IsDigit(choix)) { //Changement de couleur pour rendre plus lisible Console.ForegroundColor = ConsoleColor.Green; //interactions déclenchées par pression sur une touche spéciale (a, i, o ou q) switch (choix) { case 'q': //action de quitter je jeu repValide = true; Quitter(); break; case 'a': //commande d'aide Console.WriteLine("\n AIDE COMMANDES \nAppuyer sur :" + "\na pour afficher l'aide \n" + "b : pour changer de pièce \nq : pour quitter\n" + "i : pour afficher l'inventaire... \n\nPour sortir du menu d'aide et revenir au jeu, appuyez sur o"); break; case 'i': //contenu de l'inventaire titan.AfficheInventaire(); break; case 'b': //commande pour choisir une nouvelle pièce à explorer saisie au mauvais moment Console.WriteLine("Vous devez d'abord choisir un objet à examiner !"); throw erreurSaisie; case 'o': //Retour à la dernière consigne affichée dans le jeu => //retour à la couleur par défaut pour plus de clarté Console.ResetColor(); repValide = false; Console.WriteLine("\n\nVeuillez saisir un chiffre entre 1 et {0}", range); break; } } else {//dernier cas : le caractère entré correspond à un chiffre //on entre ce chiffre (et non la valeur du caractèreen Unicode) //dans une variable entiere temporaire int tempInt = choix - '0'; //si ce chiffre est compris dans l'intervalle des valeurs attendues, on sort de la boucle avec cette valeur if (tempInt <= range) { repValide = true; numChoix = tempInt; } //Sinon, on lance une exception et on reprend la boucle au début else { throw erreurSaisie; } } } //si une exception est interceptée, on affiche l'erreur et on retourne au début de la boucle catch (Exception e) { //Changement de couleur pour plus de lisibilité Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("\nErreur : {0} \n", e.Message); repValide = false; } //Retour à la couleur par défaut quand retour au jeu Console.ResetColor(); } while (repValide == false); //on renvoit le choix du joueur sous forme d'entier dès qu'il est valide, ou 0 si on échoue return(numChoix); }
// Procédure qui permet de fabriquer une potion // En entrée : le joueur pj souhaitant interagir avec l'objet internal static bool Melanger(Joueur pj) { bool trouvePotion = false; Potion potionTrouve = null; List <Substances> melange = new List <Substances>(); if (pj.NbSubstances >= 3) { Console.WriteLine("Quelles substances souhaitez-vous ajouter pour réaliser une potion avec ce bécher ?\n"); pj.AfficheInventaire(); int subN = 0; while (subN < 3) { subN++; Console.WriteLine("\nChoisissez la substance numéro {0} à ajouter.", subN); int indexSub = VerifSaisie(pj.NbSubstances); Substances subChoisie = pj._inventaireSubstances.ElementAt(indexSub - 1); melange.Add(subChoisie); pj._inventaireSubstances.Remove(subChoisie); } Console.WriteLine("\nPréparation en cours"); int k = 0; while ((potions[k] != potionTrouve) && (k < potions.Count)) { //Nouveau nom pour plus de clarté Potion test = potions[k]; int i = 0; while (i < 4) { if (test._composition.Contains(melange[i])) { i++; } else { break; } } if (i == 3) { potionTrouve = test; trouvePotion = true; } else { k++; } } if (k > potions.Count) { trouvePotion = false; } else { Console.WriteLine("\n\n\nFelicitation ! Vous avez fabriqué du " + Program.potions[k].Nom); } } pj._inventaireSubstances.Sort(); return(trouvePotion); }