Este repositorio contiene la implementación del clásico juego Buscaminas desarrollado en Java, diseñado para ejecutarse en consola. El proyecto fue creado como trabajo final de la asignatura de Programación Orientada a Objetos, aplicando patrones de diseño, recursividad y persistencia de datos.
- Interfaz de Consola: Visualización clara del tablero utilizando caracteres ASCII (
[■],[ ],*). - Algoritmo de Expansión (Flood Fill): Implementación de recursividad para descubrir automáticamente áreas seguras (ceros) adyacentes.
- Persistencia de Datos: Sistema de Guardado (Save) y Carga (Load) de partidas utilizando Serialización de objetos en Java.
- Validación Robusta: Manejo de excepciones personalizadas para evitar movimientos inválidos o redundantes.
- Arquitectura MVC: Separación estricta entre Modelo (Lógica), Vista (Consola) y Controlador (Flujo).
- Lenguaje: Java (JDK 17+)
- Control de Versiones: Git / GitHub
- Herramientas: IDE (NetBeans/IntelliJ/Eclipse)
El sistema sigue el patrón Modelo-Vista-Controlador (MVC):
- Modelo (
ups.edu.poo.buscaminas.modelo):Tablero: Contiene la matriz deCasillay la lógica de recursividad. ImplementaSerializable.Casilla: Representa el estado individual (mina, revelada, número).
- Vista (
ups.edu.poo.buscaminas.vista):IVista: Interfaz que desacopla la implementación visual.- Consola: Muestra el estado del juego mediante prints formateados.
- Controlador (
ups.edu.poo.buscaminas.controlador):- Gestiona el bucle del juego, captura inputs y coordina la persistencia.
- Util (
ups.edu.poo.buscaminas.util):ManejoArchivos: Encargado de escribir/leer el estado del objetoTableroen disco (.dat).
Compila y ejecuta la clase principal desde tu IDE o terminal:
-> java ups.edu.poo.buscaminas.Main
El juego solicitará coordenadas o comandos en cada turno:
Ingresar Coordenada: Escribe la letra de la fila seguida del número de columna.
Ejemplo: A1, B5, J10.
Guardar Partida: Escribe la letra G en cualquier momento para guardar tu progreso y salir o continuar.
[■]: Casilla cubierta (Desconocido).
[ ]: Casilla vacía (Sin minas alrededor).
[1-8]: Número de minas adyacentes.
*: ¡Mina! (Fin del juego).
El juego utiliza java.io.ObjectOutputStream para serializar el objeto Tablero completo. Esto permite que, al reiniciar la aplicación, el sistema detecte si existe un archivo partida_guardada.dat y pregunte al usuario si desea retomarla.
Jonathan Aguirre - QA Tester - Test unitarios y manejo de refactorización/Principios Solid
Bianchi Navarro - Vista e Interfaz de usuario
Michael Nivelo - Manejo de archivos, persistencia y excepciones personalizadas
Daniel Carrillo - Lógica de funcionamiento del juego
Universidad Politécnica Salesiana - 2025