Class Main
El juego completo son TRES habitaciones. Despiertas encerrado y debes escapar de cada una resolviendo su puzzle. La habitacion 1 ya funciona de punta a punta; las habitaciones 2 y 3 las construye el equipo programando: el motor ya llama a los metodos PLACEHOLDER que ustedes deben completar para poder llegar al final del juego.
Fuentes de verdad de cada habitacion N:
habitacionN.txt- la matriz VISUAL (el dibujo).zonasN.txt- la matriz de MOVIMIENTO (que ES cada casilla).objetosN.csv- nombre, arte y detalle de cada objeto.arte/*.txtymusica/*.mid- compartidos.
PLACEHOLDERS vs TODOs: un PLACEHOLDER es un metodo que el juego ya
llama pero cuyo cuerpo esta incompleto a proposito: es el espacio donde el
equipo programa (busquen el banner PLACEHOLDER). Un
// TODO equipo: es una tarea puntual dentro de un metodo que ya
funciona. En VS Code se encuentran todos con Ctrl+Shift+F buscando
TODO equipo o PLACEHOLDER.
Importante: cada equipo construye SU propia version: claves, habitaciones, arte, textos y melodias distintas. El trabajo se rige por el Codigo de Etica del curso (en el sitio): entreguen solo lo que puedan explicar.
Compilar y ejecutar: javac *.java y java Main.
Documentacion: javadoc -d docs -charset UTF-8 *.java.
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final intEl ancho de las escenas y pantallas grandes, en caracteres.static final intEl ancho interior del panel derecho, en caracteres.static intEl ancho del mapa en caracteres; se calcula de la matriz visual.static StringLa clave de la puerta: la operacion aplicada al numero del cofre.static intLa columna de la matriz donde esta parado el jugador.static intLa dificultad elegida: 1 = facil, 2 = normal, 3 = dificil (PLACEHOLDER 2).static intLa fila de la matriz donde esta parado el jugador.static intEn que habitacion esta el jugador: el progreso del juego.static String[]El inventario del jugador: un arreglo de tamano fijo.static ScannerEl lector de teclado unico de todo el juego.static StringEl mensaje que se muestra bajo el mapa en cada turno.static StringLos simbolos de los objetos ya mirados de cerca (sin repetir).static StringEl nombre del jugador; lo pide configurarJugador() (PLACEHOLDER 2).static intEl numero grabado en el cofre.static String[][]La tabla de objetosN.csv: [0] simbolo | [1] nombre | [2] archivo | [3] detalle.static intEl indice (0 a 4) de la operacion sorteada para esta habitacion.static String[]Las 5 operaciones posibles del puzzle; la nota revela la sorteada.static intEl modo elegido en seleccionarTipoJuego() (PLACEHOLDER 1); 1 = historia.static final intCuantas habitaciones tiene el juego: la victoria esta tras la ultima.static intCuantas casillas del inventario estan ocupadas.static char[][]La matriz VISUAL de la habitacion actual: lo que se VE (habitacionN.txt).static char[][]La matriz de MOVIMIENTO (zonasN.txt), del mismo tamano que la visual: que ES cada casilla ('.' piso, '#' solido, letra = objeto). -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic voidabrirEscena(String[] objeto) Abre la escena de un objeto del CSV y espera el ENTER.static booleanabrirPuerta(String[] objeto) LA PUERTA pide la clave del puzzle.static StringEl borde superior e inferior de las escenas.static voidEncuentra la @ en la matriz visual: ahi arranca el jugador.static String[]buscarObjeto(char simbolo) Busca la fila del CSV cuyo simbolo coincide, o null si no existe.static voidEl ancho del mapa es el de la fila mas larga de la matriz visual.static StringcalcularClave(int operacion, int numero) Aplica la operacion sorteada al numero del cofre.static char[][]cargarMatriz(String ruta) Convierte un archivo de texto en una matriz de caracteres.static booleancargarMundo(int numero) Carga todos los datos de una habitacion y sortea su puzzle.static String[][]cargarObjetos(String ruta) Lee un CSV de objetos (saltando el encabezado) a una matriz de String.static charcasillaZona(int f, int c) La zona de una casilla; fuera de la matriz todo es solido.static StringAgrega espacios a la izquierda para centrar un texto en 'ancho'.static booleanconectarHabitacionExterna(int numero) PLACEHOLDER BONUS - HABITACIONES DE OTROS EQUIPOS (+10%).static voidPLACEHOLDER 3 - EL ASCII ART DEL JUEGO.static voidPLACEHOLDER 2 - LA TERMINAL INICIAL DEL JUGADOR.static StringdarPista()La pista que toca segun el estado del juego (tecla H).static voiddibujarPantalla(String[] panel) La pantalla principal: la habitacion (matriz visual con el @ del jugador superpuesto) a la izquierda y el panel a la derecha.static voidEL EASTER EGG (tecla secreta X): el gancho ya esta conectado.static String[]Mete lineas de texto en una caja de ancho fijo.static voidPausa la escena hasta que el jugador presione ENTER.static StringfilaVisual(int i) Una fila de la matriz visual como texto, con el jugador (@) encima.static voidguardarObjeto(String nombre) Guarda algo en el inventario si hay espacio y no esta repetido.static voidimprimirArte(String ruta) Imprime un archivo de arte centrado como bloque (sin deformarlo).static String[]leerLineas(String ruta) Lee un archivo de texto completo y retorna sus lineas, o null.static intLee 1 o 2 validando la entrada.static voidEl ciclo de vida del juego: configuracion inicial (los placeholders), carga de la habitacion 1 y el ciclo principal de comandos.static voidmostrarEscena(String titulo, String archivo, String texto) Imprime una escena generica: titulo, arte grande y texto.static voidLa pantalla final del juego, con fanfarria y pausa para disfrutarla.static booleanIntenta mover al jugador.static StringnombreDireccion(String comando) El nombre en palabras de una tecla de movimiento.static String[]El panel cuando no hay objeto cerca: progreso, inventario y comandos.static String[]panelObjeto(String[] objeto) El panel con el preview (mini arte) del objeto y la pregunta.static String[]partirTexto(String texto, int ancho) Parte un texto largo en lineas de maximo 'ancho' caracteres, cortando por espacios para no romper las palabras.static booleanpreguntarObjeto(char simbolo) El jugador choco con un objeto: se redibuja la pantalla con el preview en el panel y se pregunta que hacer.static voidrecordarMirado(char simbolo) Recuerda los objetos ya mirados (sin repetir) en una cadena.static Stringrepetir(char c, int veces) Construye una cadena repitiendo un caracter 'veces' veces.static intPLACEHOLDER 1 - EL TIPO DE JUEGO.static booleanPLACEHOLDER 4 - LA NAVEGACION COMPLETA DEL JUEGO.static booleantieneObjeto(String nombre) Recorre el inventario buscando un objeto por su nombre.
-
Field Details
-
lector
El lector de teclado unico de todo el juego. -
visual
public static char[][] visualLa matriz VISUAL de la habitacion actual: lo que se VE (habitacionN.txt). -
zonas
public static char[][] zonasLa matriz de MOVIMIENTO (zonasN.txt), del mismo tamano que la visual: que ES cada casilla ('.' piso, '#' solido, letra = objeto). -
objetos
La tabla de objetosN.csv: [0] simbolo | [1] nombre | [2] archivo | [3] detalle. -
habitacionActual
public static int habitacionActualEn que habitacion esta el jugador: el progreso del juego. -
TOTAL_HABITACIONES
public static final int TOTAL_HABITACIONESCuantas habitaciones tiene el juego: la victoria esta tras la ultima.- See Also:
-
nombreJugador
El nombre del jugador; lo pide configurarJugador() (PLACEHOLDER 2). -
dificultad
public static int dificultadLa dificultad elegida: 1 = facil, 2 = normal, 3 = dificil (PLACEHOLDER 2). -
tipoJuego
public static int tipoJuegoEl modo elegido en seleccionarTipoJuego() (PLACEHOLDER 1); 1 = historia. -
fila
public static int filaLa fila de la matriz donde esta parado el jugador. -
columna
public static int columnaLa columna de la matriz donde esta parado el jugador. -
mensaje
El mensaje que se muestra bajo el mapa en cada turno. -
mirados
Los simbolos de los objetos ya mirados de cerca (sin repetir). -
inventario
El inventario del jugador: un arreglo de tamano fijo. -
totalInventario
public static int totalInventarioCuantas casillas del inventario estan ocupadas. -
anchoMapa
public static int anchoMapaEl ancho del mapa en caracteres; se calcula de la matriz visual. -
ANCHO_PANEL
public static final int ANCHO_PANELEl ancho interior del panel derecho, en caracteres.- See Also:
-
ANCHO_ESCENA
public static final int ANCHO_ESCENAEl ancho de las escenas y pantallas grandes, en caracteres.- See Also:
-
numeroCofre
public static int numeroCofreEl numero grabado en el cofre. Se sortea al cargar cada habitacion (dos digitos, par y sin terminar en cero) para que la clave cambie en cada partida. -
operaciones
Las 5 operaciones posibles del puzzle; la nota revela la sorteada. -
operacionElegida
public static int operacionElegidaEl indice (0 a 4) de la operacion sorteada para esta habitacion. -
clave
La clave de la puerta: la operacion aplicada al numero del cofre.
-
-
Constructor Details
-
Main
public Main()
-
-
Method Details
-
main
El ciclo de vida del juego: configuracion inicial (los placeholders), carga de la habitacion 1 y el ciclo principal de comandos. -
seleccionarTipoJuego
public static int seleccionarTipoJuego()PLACEHOLDER 1 - EL TIPO DE JUEGO.Debe mostrar un menu inicial y leer la opcion del jugador (validada, como leerOpcion()). Modos sugeridos: 1 = HISTORIA (las 3 habitaciones), 2 = HABITACION UNICA (elegir cual y escapar solo de esa), 3 = CONTRARRELOJ (historia con movimientos limitados). El modo elegido se guarda en tipoJuego y el resto del motor debe respetarlo.
- Returns:
- el modo elegido por el jugador (por ahora siempre 1).
-
configurarJugador
public static void configurarJugador()PLACEHOLDER 2 - LA TERMINAL INICIAL DEL JUGADOR.Debe configurar la partida conversando con el jugador: preguntar su nombre (guardarlo en nombreJugador y usarlo en los mensajes del juego), elegir la dificultad 1-3 (guardarla en dificultad) y aplicarla: por ejemplo en FACIL hay pistas ilimitadas, en NORMAL cuestan y en DIFICIL la puerta admite maximo 3 intentos de clave. Tambien pueden ofrecer aqui el estado inicial del sonido (M/E).
-
configurarArte
public static void configurarArte()PLACEHOLDER 3 - EL ASCII ART DEL JUEGO.Debe configurar la identidad visual: un titulo propio del equipo (reemplacen arte/titulo.txt o elijan el archivo segun el tipo de juego o la dificultad), y la decoracion de cada habitacion (por ejemplo un arte distinto al entrar a la 2 y a la 3). Hoy solo imprime el titulo generico del profesor.
-
siguienteHabitacion
public static boolean siguienteHabitacion()PLACEHOLDER 4 - LA NAVEGACION COMPLETA DEL JUEGO.Se llama cuando el jugador abre la puerta de una habitacion que NO es la ultima. Debe llevarlo a la siguiente: sumar 1 a habitacionActual, llamar cargarMundo(habitacionActual) con los archivos que ustedes crean (habitacion2.txt, zonas2.txt, objetos2.csv... y los de la 3), mostrar una transicion (arte + mensaje) y retornar false para que el ciclo siga jugando. El inventario se conserva entre habitaciones: usenlo para que un objeto de la habitacion 1 sirva en la 3.
Hoy el pasillo esta "en obra": el juego termina aqui. Por eso, sin programar este metodo, ES IMPOSIBLE llegar al final del juego.
- Returns:
- true si el juego debe terminar; false para seguir jugando en la nueva habitacion.
-
conectarHabitacionExterna
public static boolean conectarHabitacionExterna(int numero) PLACEHOLDER BONUS - HABITACIONES DE OTROS EQUIPOS (+10%).Como todas las habitaciones del salon usan el mismo formato (habitacionN.txt + zonasN.txt + objetosN.csv + su arte), es posible armar un juego GIGANTE conectando habitaciones de varios equipos. Solo queda indicado: si lo intentan, el plan es:
- Acordar con otro equipo el intercambio de la carpeta de una habitacion (sus 3 archivos + los arte/ que use).
- Copiar los archivos con un numero nuevo (ej. habitacion4.txt) y sus artes a arte/ sin pisar los propios.
- Llamar este metodo desde siguienteHabitacion() cuando el jugador cruce la ultima puerta propia, y subir TOTAL_HABITACIONES.
- Verificar que los simbolos y claves del otro equipo no choquen con los suyos (cada CSV trae los suyos, asi que basta cargarlo).
- Parameters:
numero- el numero con el que se copiaron los archivos del otro equipo.- Returns:
- true si la habitacion externa quedo cargada y lista para jugar.
-
cargarMundo
public static boolean cargarMundo(int numero) Carga todos los datos de una habitacion y sortea su puzzle. Se usa para la habitacion 1 y debe reutilizarse para la 2 y la 3.- Parameters:
numero- el numero de la habitacion (sus archivos llevan el sufijo).- Returns:
- true si todos los archivos cargaron bien.
-
calcularAnchoMapa
public static void calcularAnchoMapa()El ancho del mapa es el de la fila mas larga de la matriz visual. -
buscarInicio
public static void buscarInicio()Encuentra la @ en la matriz visual: ahi arranca el jugador. Se borra del dibujo porque el @ se superpone al dibujar. -
dibujarPantalla
La pantalla principal: la habitacion (matriz visual con el @ del jugador superpuesto) a la izquierda y el panel a la derecha.- Parameters:
panel- las lineas del panel derecho (estado o preview).
-
filaVisual
Una fila de la matriz visual como texto, con el jugador (@) encima. -
panelEstado
El panel cuando no hay objeto cerca: progreso, inventario y comandos. -
mover
Intenta mover al jugador. La matriz de ZONAS decide que pasa: '.' piso (avanza), letra A-Z objeto (pregunta), otro solido (bloquea).- Parameters:
comando- W, A, S o D en mayuscula.- Returns:
- true solo si el jugador escapo y el juego termina.
-
casillaZona
public static char casillaZona(int f, int c) La zona de una casilla; fuera de la matriz todo es solido. -
nombreDireccion
El nombre en palabras de una tecla de movimiento. -
preguntarObjeto
public static boolean preguntarObjeto(char simbolo) El jugador choco con un objeto: se redibuja la pantalla con el preview en el panel y se pregunta que hacer. Aqui viven los comportamientos especiales (la alfombra, el cofre y la nota son los moldes a imitar).- Parameters:
simbolo- la letra del objeto en la matriz de zonas.- Returns:
- true si el objeto era la puerta final y el jugador escapo.
-
panelObjeto
El panel con el preview (mini arte) del objeto y la pregunta. -
buscarObjeto
Busca la fila del CSV cuyo simbolo coincide, o null si no existe. -
abrirEscena
Abre la escena de un objeto del CSV y espera el ENTER. -
esperarEnter
public static void esperarEnter()Pausa la escena hasta que el jugador presione ENTER. -
mostrarEscena
Imprime una escena generica: titulo, arte grande y texto. Los comportamientos especiales la reutilizan con sus propios textos.- Parameters:
titulo- el nombre que encabeza la escena.archivo- el nombre base del arte (arte/archivo.txt).texto- el detalle, partido automaticamente en lineas.
-
abrirPuerta
LA PUERTA pide la clave del puzzle. Si es la ultima habitacion el jugador gana; si no, el viaje continua en siguienteHabitacion().- Parameters:
objeto- la fila del CSV de la puerta.- Returns:
- true si el juego termina.
-
mostrarVictoria
public static void mostrarVictoria()La pantalla final del juego, con fanfarria y pausa para disfrutarla. -
calcularClave
Aplica la operacion sorteada al numero del cofre.- Parameters:
operacion- indice en el arreglo operaciones (0 a 4).numero- el numero grabado en el cofre.- Returns:
- la clave resultante, como texto.
-
darPista
La pista que toca segun el estado del juego (tecla H). TODO equipo: pistas propias para las habitaciones 2 y 3, y limite de pistas segun la dificultad. -
easterEgg
public static void easterEgg()EL EASTER EGG (tecla secreta X): el gancho ya esta conectado. TODO equipo: programen aqui su secreto. Ideas: el modo desarrollador que imprime la matriz de zonas, un objeto oculto, un mensaje del creador del cuarto. -
guardarObjeto
Guarda algo en el inventario si hay espacio y no esta repetido. -
tieneObjeto
Recorre el inventario buscando un objeto por su nombre.- Parameters:
nombre- el nombre exacto guardado.- Returns:
- true si el jugador lo tiene.
-
recordarMirado
public static void recordarMirado(char simbolo) Recuerda los objetos ya mirados (sin repetir) en una cadena. -
bordeEscena
El borde superior e inferior de las escenas. -
imprimirArte
Imprime un archivo de arte centrado como bloque (sin deformarlo). -
enmarcar
Mete lineas de texto en una caja de ancho fijo. -
centrar
Agrega espacios a la izquierda para centrar un texto en 'ancho'. -
repetir
Construye una cadena repitiendo un caracter 'veces' veces. -
partirTexto
Parte un texto largo en lineas de maximo 'ancho' caracteres, cortando por espacios para no romper las palabras. -
leerOpcion
public static int leerOpcion()Lee 1 o 2 validando la entrada. Nunca rompe el programa. -
leerLineas
Lee un archivo de texto completo y retorna sus lineas, o null. -
cargarMatriz
Convierte un archivo de texto en una matriz de caracteres. -
cargarObjetos
Lee un CSV de objetos (saltando el encabezado) a una matriz de String.
-