示例#1
0
        static bool HandleInput(string com, Player p, Map m, out bool quit)
        {
            // Creamos un bool que sera devuelto mas tarde
            bool leido = true;

            // Ponemos a false quit para que devuelva siempre false excepto si lo pide
            quit = false;
            // Pongo este metodo para que el jugador no se trabe con los comandos al poner mayusculas o minusculas
            com = com.ToLower();
            switch (com)
            {
            // Para cada direccion hacemos mover el personaje con el metodo
            // en el caso de que se pueda mover te da la informacion de la sala a la que vas
            // en el caso contrario te da un mensaje donde pone que no se puede mover en esa direccion
            case "go north":
            case "go n":
                if (p.Move(m, Direction.North))
                {
                    InfoPlace(m, p.GetPosition());
                }
                else
                {
                    Console.ForegroundColor = ConsoleColor.Yellow;
                    Console.WriteLine("You can't choose this direction.");
                    Console.ResetColor();
                }
                break;

            case "go south":
            case "go s":
                if (p.Move(m, Direction.South))
                {
                    InfoPlace(m, p.GetPosition());
                }
                else
                {
                    Console.ForegroundColor = ConsoleColor.Yellow;
                    Console.WriteLine("You can't choose this direction.");
                    Console.ResetColor();
                }
                break;

            case "go east":
            case "go e":
                if (p.Move(m, Direction.East))
                {
                    InfoPlace(m, p.GetPosition());
                }
                else
                {
                    Console.ForegroundColor = ConsoleColor.Yellow;
                    Console.WriteLine("You can't choose this direction.");
                    Console.ResetColor();
                }
                break;

            case "go West":
            case "go w":
                if (p.Move(m, Direction.West))
                {
                    InfoPlace(m, p.GetPosition());
                }
                else
                {
                    Console.ForegroundColor = ConsoleColor.Yellow;
                    Console.WriteLine("You can't choose this direction.");
                    Console.ResetColor();
                }
                break;

            // Escribe la información del inventario
            case "inventory":
                Console.WriteLine(p.GetInventoryInfo(m));
                break;

            // Escribe la información del jugador
            case "me":
                Console.WriteLine(p.GetPlayerInfo());
                break;

            // Escribe los items que hay en la sala
            case "look":
                Console.WriteLine(m.GetInfoItemsInRoom(p.GetPosition()));
                break;

            // Escribe los comandos que puede utilizar el jugador
            case "help":
                EscribirComandos();     // He implementado un metodo para escribir los comandos
                break;

            // Escribe la descripcion de laala
            case "info":
                InfoPlace(m, p.GetPosition());
                break;

            // Sale del juego devolviendo true el valor de quit
            case "quit":
                quit = true;
                break;

            // Esto es opcional pero he puesto esto por si el jugador quiere limpiar la consola
            case "clear":
                Console.Clear();
                break;

            // En el caso de que no se haya escrito ningun comando bien devuelve false
            default:
                leido = false;
                break;
            }
            // Como aun quedan dos comandos pero estos son con los items los leo por separado
            if (!leido)
            {
                // Queremos saber si el jugador ha escrito pick or eat
                string[] pickEat = com.Split(' ');
                // En el caso de pick
                if (pickEat[0] == "pick")
                {
                    // Intenta ejecutar el metodo
                    try
                    {
                        // Envio com, en vez de pickEat[1], para que salte el error dentro del
                        // metodo en el caso de que solo haya escrito "pick" sin nada detras
                        p.PickItem(m, com);
                        // Escribe la informacion del item
                        Console.WriteLine(m.PrintItemInfo(m.FindItemByName(pickEat[1])));
                    }
                    // En el caso de que salte un error lo escribe en pantalla
                    catch (Exception e)
                    {
                        Console.ForegroundColor = ConsoleColor.Yellow;
                        Console.WriteLine(e.Message);
                        Console.ResetColor();
                    }
                    // Ponemos que se ha leido ya que se ha entrado en el comando
                    leido = true;
                }
                // En el caso de eat
                else if (pickEat[0] == "eat")
                {
                    // Intenta ejecutar el metodo
                    try
                    {
                        // Envio com, en vez de pickEat[1], para que salte el error dentro del
                        // metodo en el caso de que solo haya escrito "eat" sin nada detras
                        p.EatItem(m, com);
                    }
                    // En el caso de que salte un error lo escribe en pantalla
                    catch (Exception e)
                    {
                        Console.ForegroundColor = ConsoleColor.Yellow;
                        Console.WriteLine(e.Message);
                        Console.ResetColor();
                    }
                    // Ponemos que se ha leido ya que se ha entrado en el comando
                    leido = true;
                }
            }
            // Devuelverue si se ha leido un comando false en el caso de que no se haya leido nada
            return(leido);
        }