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); }
// Metodo para saber si el jugador se encuentra en la salida static bool ArrivedAtExit(Map m, Player thePlayer) { // Devuelve true en el caso de que se encuentre en la salida return(m.IsExit(thePlayer.GetPosition())); }
// 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(); }