Exemplo n.º 1
0
 // 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);
     }
 }
Exemplo n.º 2
0
        }//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);
        }
Exemplo n.º 3
0
        // 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);
        }