Java
Ejercicios
Ejercicios
  • 02-Estructuras de control y bucles
    • Ejercicios de estructuras de control
    • Ejercicios de estructuras de control II
  • 06-Patrones de diseño
    • Ejercicio MVC en JAVA
  • 08-Flujos y Ficheros
    • Ejercicio de Redirección y Comunicación entre Procesos en Java
    • Ejercicio de Comunicación y Sincronización entre Tres Procesos en Java
  • 08-Flujos y Ficheros
  • 10-Swing
    • Ejercicio Aplicación de Notas Simples
    • Ejercicio Cálculadora básica
    • Ejercicio: Aplicación de Lista de Tareas con layouts
    • Ejercicio: Dibujo de figuras con Graphics
    • Ejercicio: Aplicación de Control de Color de un Rectángulo
    • Ejercicio: Dibujo de una clase vista
  • 03-Arrays y colecciones
    • 03.01-Arrays
      • Sistema de Gestión de Cine
      • Ejercicios básicos de arrays
    • 03.02-Colecciones
      • Sistema de Gestión de Canales de YouTube
  • 05-POO
    • 05.1-POO Iniciación
      • Ejercicio: Sistema de Gestión para una Biblioteca
      • Ejercicio de arrays. Aventura de los Patapons
      • Ejercicios básicos sobre POO
    • 05.2-POO Clases Abstractas
      • Sistema de Gestión de Vehículos
    • 05.6-Generales de POO
      • Ejercicio: Sistema de Gestión de Empleados
      • Aventuras en el Laberinto Encantado
      • Ejercicio de Pasapalabra
  • Soluciones
    • 02-Estructuras de control y bucles
      • [Solución] Ejercicios de estructuras de control II
    • 06-Patrones de diseño
      • [Solucion] Ejercicio MVC en JAVA
    • 08-Flujos y Ficheros
      • Solución de Ejercicio de Redirección y Comunicación entre Procesos en Java
      • Solución de Ejercicio de Comunicación y Sincronización entre Tres Procesos en Java
    • 10-Swing
      • [Solución] Ejercicio Aplicación de Notas Simples
      • [Solución] Ejercicio Cálculadora Simple
      • [Solución] Ejercicio: Aplicación de Lista de Tareas con layouts
      • [Solución] Ejercicio: Dibujo de figuras con Graphics
      • [Solución] Ejercicio: Dibujo de figuras con Graphics
      • [Solución] Ejercicio: Aplicación de Control de Color de un Rectángulo
    • 03-Arrays y colecciones
      • 03.01-Arrays
        • [Solución] Ejercicios de estructuras de control 2
        • [Solución] Sistema de Gestión de Cine
        • [Solución] Ejercicios básicos de arrays
      • 03.02-Colecciones
        • [Solución] Sistema de Gestión de Canales de YouTube
    • 05-POO
      • 05.1-POO Iniciación
        • [Solución] Ejercicio de arrays. Aventura de los Patapons
        • [Solución] Ejercicios básicos sobre POO
      • 05.2-POO Clases Abstractas
        • [Solución] Sistema de Gestión de Vehículos
      • 05.6-Generales de POO
        • Solución de Sistema de Gestión de Empleados
        • [Solución] Aventuras en el Laberinto Encantado
        • [Solución] Ejercicio de Pasapalabra
Powered by GitBook
On this page
  • Objetivo
  • Clases y métodos
  • PalabrasComando
  • Comando
  • Transformar
  • Habitación
  • Subclases de Habitación
  • Juego
  • Run
  1. Soluciones
  2. 05-POO
  3. 05.6-Generales de POO

[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.
    }
}
PreviousSolución de Sistema de Gestión de EmpleadosNext[Solución] Ejercicio de Pasapalabra

Last updated 1 year ago