Código Java

Una forma sencilla y rápida de aprender JAVA, observando y deduciendo cómo se comporta el lenguaje a través de ejemplos prácticos.

Archivo del blog

martes, 27 de agosto de 2024

Juegos VII. La Mansión Misteriosa: Un juego de texto interactivo.

Este código en Java implementa un juego de texto interactivo llamado "La Mansión Misteriosa".

Características:

    . El juego utiliza un sistema de escenas conectadas.
    . Cada escena tiene una descripción, opciones para el jugador y enlaces a las siguientes escenas.
    . El jugador navega por la mansión tomando decisiones en cada escena.
    . Las escenas están precargadas en un mapa (java.util.Map).
    . El juego comienza con un prólogo y termina cuando el jugador llega a una escena final o de "horror".


Código Java (LaMansionMisteriosa.java):

package lamansionmisteriosa;

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class LaMansionMisteriosa {

    private static final Scanner scanner = new Scanner(System.in);
    private static final Map<String, Escena> escenas = new HashMap<>();

    public static void main(String[] args) {
        mostrarPrologo();
        EscenaLoader.cargarEscenas(escenas);
        jugar("start");
    }

    private static void jugar(String escenaActual) {
        while (true) {
            Escena escena = escenas.get(escenaActual);
            if (escena == null) {
                System.out.println("Error: Escena no encontrada. Fin del juego.");
                break;
            }
            System.out.println(escena.getDescripcion());

            if (escena.getOpciones().length == 0) {
                escenaActual = "horror_final"; // Redirigir a la escena final
                escena = escenas.get(escenaActual);
                System.out.println(escena.getDescripcion());
                System.out.println("FIN DEL JUEGO");
                break;
            }

            for (int i = 0; i < escena.getOpciones().length; i++) {
                System.out.println((i + 1) + ". " + escena.getOpciones()[i]);
            }

            int eleccion;
            while (true) {
                try {
                    eleccion = Integer.parseInt(scanner.nextLine()) - 1;
                    if (eleccion >= 0 && eleccion < escena.getSiguienteEscena().length) {
                        break;
                    } else {
                        System.out.println("Opción no válida. Por favor, elige un número entre 1 y " + escena.getOpciones().length);
                    }
                } catch (NumberFormatException e) {
                    System.out.println("Por favor, ingresa un número válido.");
                }
            }

            escenaActual = escena.getSiguienteEscena()[eleccion];
        }
    }

    private static void mostrarPrologo() {
        System.out.println("La Mansión Misteriosa\n");
        System.out.println("Hace muchos años, en una región olvidada por el tiempo, se erige una mansión rodeada de misterio. "
                + "Nadie sabe realmente qué ocurrió allí, pero los rumores hablan de desapariciones, fantasmas y un mal "
                + "inimaginable que acecha en sus pasillos. Ahora, te encuentras frente a esta mansión, dispuesto a descubrir "
                + "la verdad. Pero ten cuidado, ya que esta aventura puede ser tu última...");
        System.out.println("\nPresiona Enter para continuar...");
        scanner.nextLine();  // Espera a que el jugador presione Enter para continuar
    }
}


Código Java (Escena.java):

package lamansionmisteriosa;

class Escena {
    private final String descripcion;
    private final String[] opciones;
    private final String[] siguienteEscena;

    public Escena(String descripcion, String[] opciones, String[] siguienteEscena) {
        this.descripcion = descripcion;
        this.opciones = opciones;
        this.siguienteEscena = siguienteEscena;
    }

    public String getDescripcion() {
        return descripcion;
    }

    public String[] getOpciones() {
        return opciones;
    }

    public String[] getSiguienteEscena() {
        return siguienteEscena;
    }
}


Código Java (EscenaLoader.java):

package lamansionmisteriosa;

import java.util.Map;

class EscenaLoader {

    public static void cargarEscenas(Map<String, Escena> escenas) {
        escenas.put("start", new Escena(
                "La lluvia golpea con fuerza los ventanales de la vieja mansión. Has oído rumores sobre este lugar, historias de personas que entraron y nunca salieron. Pero tú no crees en fantasmas... ¿verdad?",
                new String[]{"Avanzar hacia la puerta principal", "Explorar los alrededores de la mansión"},
                new String[]{"puerta_principal", "explorar_alrededores"}
        ));

        escenas.put("puerta_principal", new Escena(
                "La puerta de madera cruje mientras la empujas. El vestíbulo está oscuro, con solo la luz de tu linterna iluminando el polvo en el aire. Frente a ti, una escalera se eleva hacia la oscuridad del segundo piso, y un pasillo a la derecha parece perderse en las sombras.",
                new String[]{"Subir por las escaleras", "Tomar el pasillo a la derecha"},
                new String[]{"escaleras", "pasillo_derecho"}
        ));

        escenas.put("explorar_alrededores", new Escena(
                "Decides dar una vuelta alrededor de la mansión antes de entrar. La vegetación está densa y descuidada, y el aire se siente pesado. Llegas a una ventana rota que da a lo que parece ser una cocina.",
                new String[]{"Entrar por la ventana rota", "Regresar a la puerta principal"},
                new String[]{"cocina", "puerta_principal"}
        ));
        
        escenas.put("cocina", new Escena(
                "La cocina está en ruinas, con platos rotos y utensilios oxidados esparcidos por todos lados. El olor a humedad es casi insoportable. Un ruido sordo proviene de la despensa.",
                new String[]{"Abrir la despensa", "Salir de la cocina rápidamente"},
                new String[]{"despensa", "volver_vestibulo"}
        ));

        escenas.put("despensa", new Escena(
                "Abres la puerta de la despensa, pero está vacía. El ruido cesa de inmediato. Cuando miras hacia atrás, la puerta de la cocina está cerrada y una figura oscura aparece en el umbral...",
                new String[]{},
                new String[]{"horror_final"}
        ));

        escenas.put("escaleras", new Escena(
                "Los escalones crujen bajo tu peso, y cada paso que das resuena como un susurro en la oscuridad. Al llegar al segundo piso, ves tres puertas: una a la izquierda, una a la derecha y una al final del pasillo.",
                new String[]{"Abrir la puerta de la izquierda", "Abrir la puerta de la derecha", "Ir hacia la puerta al final del pasillo"},
                new String[]{"puerta_izquierda", "puerta_derecha", "puerta_final"}
        ));

        escenas.put("puerta_izquierda", new Escena(
                "La puerta se abre con un chirrido. El cuarto está lleno de polvo, con un gran espejo cubierto por una sábana vieja. Mientras te acercas al espejo, algo en él parece moverse...",
                new String[]{"Quitar la sábana del espejo", "Salir de la habitación rápidamente"},
                new String[]{"espejo", "salir_habitacion"}
        ));

        escenas.put("espejo", new Escena(
                "Retiras la sábana, revelando el espejo. Al principio, solo ves tu propio reflejo, pero de repente... una figura oscura aparece detrás de ti en el reflejo. Te das la vuelta, pero no hay nadie ahí. Cuando miras de nuevo al espejo, está roto.",
                new String[]{},
                new String[]{"horror_final"}
        ));

        escenas.put("puerta_derecha", new Escena(
                "Esta puerta conduce a una pequeña biblioteca. Los libros parecen intactos, pero el polvo indica que no han sido tocados en años. De repente, sientes una presencia detrás de ti...",
                new String[]{"Ignorar la sensación y examinar los libros", "Voltear rápidamente"},
                new String[]{"examinar_libros", "voltear"}
        ));

        escenas.put("examinar_libros", new Escena(
                "Pasas tus dedos por los lomos de los libros, pero cuando intentas sacar uno, se atora. Con un poco de esfuerzo, logras sacarlo, y al hacerlo, una sección de la estantería se abre, revelando un pasaje secreto.",
                new String[]{"Entrar al pasaje secreto", "No entrar, regresar al vestíbulo"},
                new String[]{"pasaje_secreto", "volver_vestibulo"}
        ));

        escenas.put("pasaje_secreto", new Escena(
                "Entras en el pasaje secreto, y la puerta de la biblioteca se cierra detrás de ti. El pasaje está oscuro y estrecho, con paredes de piedra fría. Sientes que algo te está observando desde la oscuridad.",
                new String[]{"Seguir adelante", "Regresar a la biblioteca"},
                new String[]{"seguir_pasaje", "volver_vestibulo"}
        ));

        escenas.put("seguir_pasaje", new Escena(
                "El pasaje te lleva a una habitación oculta. En el centro de la habitación hay un libro antiguo sobre un pedestal, cubierto de polvo y telarañas. Cuando te acercas, el libro se abre solo...",
                new String[]{},
                new String[]{"horror_final"}
        ));

        escenas.put("pasillo_derecho", new Escena(
                "El pasillo a la derecha es largo y oscuro, y cada paso que das parece más pesado que el anterior. A medida que avanzas, sientes como si las paredes se cerraran sobre ti. Finalmente, llegas a una puerta pequeña al final del pasillo.",
                new String[]{"Abrir la puerta", "Regresar al vestíbulo"},
                new String[]{"puerta_final", "volver_vestibulo"}
        ));

        escenas.put("puerta_final", new Escena(
                "La puerta al final del pasillo se abre con un rechinido metálico. Dentro, una vieja cuna se mece sola en medio de la habitación.",
                new String[]{},
                new String[]{"horror_final"}
        ));

        escenas.put("salir_habitacion", new Escena(
                "Decides que es mejor no enfrentar lo que sea que esté en esa habitación y te apresuras a salir. El aire en el pasillo es más frío de lo que recuerdas...",
                new String[]{},
                new String[]{"volver_vestibulo"}
        ));

        escenas.put("volver_vestibulo", new Escena(
                "Regresas al vestíbulo, pero algo ha cambiado. La puerta principal, por donde entraste, ahora está cerrada. No hay manera de abrirla...",
                new String[]{},
                new String[]{"horror_final"}
        ));

        escenas.put("voltear", new Escena(
                "Te das la vuelta rápidamente, pero no hay nadie detrás de ti. Sin embargo, sientes como si algo estuviera observándote desde las sombras. Decides que es mejor no arriesgarte y salir de la biblioteca.",
                new String[]{},
                new String[]{"volver_vestibulo"}
        ));

        escenas.put("horror_final", new Escena(
                "La mansión comienza a vibrar suavemente, y los susurros que escuchas se hacen más fuertes. Sabes que debes salir, pero cada salida parece estar bloqueada. Te das cuenta de que la mansión nunca tuvo intención de dejarte ir...\n"
                + "La oscuridad te envuelve por completo y sientes como algo frío y pegajoso te atrapa. Antes de que puedas gritar, todo se vuelve negro...",
                new String[]{},
                new String[]{}
        ));
    }
}


Resultado:

run:
La Mansión Misteriosa

Hace muchos años, en una región olvidada por el tiempo, se erige una mansión rodeada de misterio. Nadie sabe realmente qué ocurrió allí, pero los rumores hablan de desapariciones, fantasmas y un mal inimaginable que acecha en sus pasillos. Ahora, te encuentras frente a esta mansión, dispuesto a descubrir la verdad. Pero ten cuidado, ya que esta aventura puede ser tu última...

Presiona Enter para continuar...

La lluvia golpea con fuerza los ventanales de la vieja mansión. Has oído rumores sobre este lugar, historias de personas que entraron y nunca salieron. Pero tú no crees en fantasmas... ¿verdad?
1. Avanzar hacia la puerta principal
2. Explorar los alrededores de la mansión
2
Decides dar una vuelta alrededor de la mansión antes de entrar. La vegetación está densa y descuidada, y el aire se siente pesado. Llegas a una ventana rota que da a lo que parece ser una cocina.
1. Entrar por la ventana rota
2. Regresar a la puerta principal
1
La cocina está en ruinas, con platos rotos y utensilios oxidados esparcidos por todos lados. El olor a humedad es casi insoportable. Un ruido sordo proviene de la despensa.
1. Abrir la despensa
2. Salir de la cocina rápidamente
1
Abres la puerta de la despensa, pero está vacía. El ruido cesa de inmediato. Cuando miras hacia atrás, la puerta de la cocina está cerrada y una figura oscura aparece en el umbral...
La mansión comienza a vibrar suavemente, y los susurros que escuchas se hacen más fuertes. Sabes que debes salir, pero cada salida parece estar bloqueada. Te das cuenta de que la mansión nunca tuvo intención de dejarte ir...
La oscuridad te envuelve por completo y sientes como algo frío y pegajoso te atrapa. Antes de que puedas gritar, todo se vuelve negro...
FIN DEL JUEGO
BUILD SUCCESSFUL (total time: 2 minutes 4 seconds)

Con la tecnología de Blogger.