[Solución] Aventuras en el Laberinto Encantado
Objetivo
El objetivo de la aplicación "Aventuras en el Laberinto Encantado" es proporcionar una experiencia interactiva y divertida al usuario, donde este debe navegar a través de un laberinto lleno de misterios, puzzles y criaturas fantásticas. El jugador utilizará una serie de comandos para explorar habitaciones, interactuar con objetos y personajes, y resolver acertijos para avanzar en el juego.
Clases y métodos
PalabrasComando
public class PalabrasComando {
// Constantes para los comandos disponibles en el juego.
private static final String[] comandosValidos = {"ir", "fin", "ayuda", "mirar"};
// Verifica si una cadena es un comando válido.
public boolean esComando(String unaCadena) {
for (int i = 0; i < comandosValidos.length; i++) {
if (comandosValidos[i].equals(unaCadena)) {
return true;
}
}
// Si la cadena no coincide con ningún comando, retorna falso.
return false;
}
// Muestra todos los comandos disponibles.
public void mostrarTodos() {
for (String comando : comandosValidos) {
System.out.print(comando + " ");
}
System.out.println(); // Salto de línea después de listar comandos.
}
}
Comando
public class Comando {
private String comando = null;
private String segundaPalabra = null;
// Constructor que establece el comando y la segunda palabra.
public Comando(String primerPalabra, String segundaPalabra) {
this.comando = primerPalabra;
this.segundaPalabra = segundaPalabra;
}
// Retorna la palabra del comando.
public String getComando() {
return comando;
}
// Retorna la segunda palabra del comando.
public String getSegundaPalabra() {
return segundaPalabra;
}
// Verifica si hay un comando.
public boolean hayComando() {
return comando != null;
}
// Verifica si hay una segunda palabra.
public boolean haySegundaPalabra() {
return segundaPalabra != null;
}
}
Transformar
public class Transformar {
private PalabrasComando palabrasComando;
// Constructor por defecto.
public Transformar() {
palabrasComando = new PalabrasComando(); // Inicializa la lista de comandos.
}
// Toma un string de entrada y lo convierte en un objeto Comando.
public Comando getCommand(String entradaUsuario) {
String[] palabras = entradaUsuario.split(" "); // Divide la entrada en palabras.
String palabra = null;
String segundaPalabra = null;
if (palabras.length > 0) {
palabra = palabras[0]; // Primera palabra.
if (palabras.length > 1) {
segundaPalabra = palabras[1]; // Segunda palabra si existe.
}
}
// Verifica si la palabra es un comando válido y crea un Comando.
if (palabrasComando.esComando(palabra)) {
return new Comando(palabra, segundaPalabra);
} else {
return new Comando(null, segundaPalabra); // Comando no válido.
}
}
}
Habitación
public class Habitacion {
private String descripcion;
// Las salidas de esta habitación.
private Habitacion norte, sur, este, oeste;
// Constructor que establece la descripción de la habitación.
public Habitacion(String descripcion) {
this.descripcion = descripcion;
}
// Establece las salidas de esta habitación.
public void setSalida(String direccion, Habitacion vecina) {
switch (direccion) {
case "norte": this.norte = vecina; break;
case "sur": this.sur = vecina; break;
case "este": this.este = vecina; break;
case "oeste": this.oeste = vecina; break;
}
}
// Devuelve una descripción larga de esta habitación.
public String getDescripcionLarga() {
return "Estás en " + descripcion + ".\n" + getStringDeSalidas();
}
// Devuelve una cadena con las salidas disponibles.
private String getStringDeSalidas() {
String salidas = "Salidas:";
if(norte != null) salidas += " norte";
if(este != null) salidas += " este";
if(sur != null) salidas += " sur";
if(oeste != null) salidas += " oeste";
return salidas;
}
// Devuelve la habitación que se encuentra en la dirección dada.
public Habitacion getSalida(String direccion) {
switch (direccion) {
case "norte": return norte;
case "sur": return sur;
case "este": return este;
case "oeste": return oeste;
default: return null;
}
}
}
Subclases de Habitación
Subclase HabitacionOscura
public class HabitacionOscura extends Habitacion {
// Constructor que recibe la descripción.
public HabitacionOscura(String descripcion) {
super(descripcion);
}
// Sobreescribe el método getDescripcionLarga para reflejar la oscuridad.
@Override
public String getDescripcionLarga() {
return "Estás en una habitación oscura y no puedes ver nada.";
}
// Sobreescribe getStringDeSalidas para no mostrar salidas en la oscuridad.
@Override
public String getStringDeSalidas() {
return "No puedes ver las salidas desde la oscuridad.";
}
}
Subclase HabitacionIluminable
public class HabitacionIluminable extends Habitacion {
private boolean iluminada;
// Constructor que recibe la descripción y el estado inicial de la luz.
public HabitacionIluminable(String descripcion, boolean iluminada) {
super(descripcion);
this.iluminada = iluminada;
}
// Método para cambiar el estado de la iluminación.
public void cambiarLuz() {
iluminada = !iluminada;
}
// Sobreescribe getDescripcionLarga según el estado de la iluminación.
@Override
public String getDescripcionLarga() {
if (iluminada) {
return super.getDescripcionLarga(); // Devuelve la descripción estándar si está iluminada.
} else {
return "Estás en una habitación oscura. Usa el comando 'luz' para encender la luz.";
}
}
}
Juego
public class Juego {
private Transformar transformar;
private Habitacion habitacionActual;
public Juego() {
crearHabitaciones();
transformar = new Transformar();
}
// Crea todas las habitaciones y les asigna salidas.
private void crearHabitaciones() {
// Crear las habitaciones.
Habitacion exterior = new Habitacion("en el exterior del laberinto");
// Más habitaciones aquí.
// Definir las salidas de cada habitación.
exterior.setSalida("norte", /* otra habitación */);
// Habitación inicial del juego.
habitacionActual = exterior;
}
// Inicia y ejecuta el bucle principal del juego.
public void jugar() {
bienvenido();
// Entrar al bucle del juego.
boolean terminado = false;
while (!terminado) {
Comando comando = transformar.getCommand(/* leer entrada del usuario */);
terminado = procesarComando(comando);
}
System.out.println("Gracias por jugar. ¡Adiós!");
}
// Muestra un mensaje de bienvenida al jugador.
private void bienvenido() {
System.out.println("Bienvenido al Laberinto Encantado!");
System.out.println("Escribe 'ayuda' si necesitas ayuda.");
System.out.println();
System.out.println(habitacionActual.getDescripcionLarga());
}
// Procesa el comando introducido por el jugador.
private boolean procesarComando(Comando comando) {
// Lógica para procesar diferentes comandos.
return false; // Retorna true para terminar el juego.
}
}
Run
public class Run {
public static void main(String[] args) {
Juego juego = new Juego();
juego.jugar(); // Comienza el juego.
}
}
Last updated