示例#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);
        }
示例#2
0
        // Metodo principal del programa
        static void Main()
        {
            // Creamos el bool de error para saltar todo
            bool error = false;
            // Iniciamos la clase map
            Map miMapa = new Map(18, 8);

            // Intentamos leer el archivo
            try
            {
                miMapa.ReadMap("/users/joanm/desktop/adri/practica2fp/mapaEsp.dat");
            }
            // En el caso de que de algun error
            catch (Exception e)
            {
                // Escribe el mensaje de la excepción
                Console.ForegroundColor = ConsoleColor.Yellow;
                Console.WriteLine(e.Message);
                Console.ResetColor();
                // Ponemos error a true para que no ejecute el programa y salga directamente
                error = true;
            }
            if (!error)
            {
                // Creamos el bool finish para saber cuando acaba el game y el de ganar para saber si ha ganado o perdido
                bool finish = false;
                bool ganar  = false;
                // Preguntamos sobre el nombre del jugador
                Console.WriteLine("What's your name in this adventure?");
                string playerName = Console.ReadLine();
                // Iniciamos la clase Player
                Player miJugador = new Player(playerName, miMapa.GetEntryRoom());
                // Limpiamos pantalla y ponemos la información del jugador y del lugar donde esta
                Console.Clear();
                Console.WriteLine(miJugador.GetPlayerInfo());
                InfoPlace(miMapa, miJugador.GetPosition());
                // Bucle principal
                while (!finish)
                {
                    // Leemos el comando que pone el jugador
                    Console.Write("-> ");
                    bool leido = HandleInput(Console.ReadLine(), miJugador, miMapa, out finish); // Devuelve si ha escrito bien el comando, tambien en el caso
                                                                                                 // del comando quit pone finish a true saliendo del bucle
                    // En el caso de que lo haya escrito mal se le da un mensaje de ayuda
                    if (!leido)
                    {
                        Console.ForegroundColor = ConsoleColor.Yellow;
                        Console.WriteLine("I didn't understund your answere, try with something else or type \"Help\" to know the controls");
                        Console.ResetColor();
                    }
                    // Vemos si el jugador ya ha llegado a la meta
                    if (ArrivedAtExit(miMapa, miJugador))
                    {
                        // Salimos del bucle y decimos que hemos ganado
                        finish = true;
                        ganar  = true;
                    }
                    else if (!miJugador.IsAlive())
                    {
                        finish = true;                            // Salimos del bucle y ganar esta en false(con lo que saldra que hemos perdido),
                    }
                    // en el caso de tener 0 hp he decidido que ganas ya que has acabado el juego
                }
                // Si ganas sale el mensaje de victoria y en el caso contrario el mensaje de derrota
                if (ganar)
                {
                    Console.WriteLine("Congratulations!! You reach the goal");
                }
                else
                {
                    Console.WriteLine("You lose :(");
                }
            }
            Console.ReadLine();
        }