Batalla Naval en Java
Objetivo
Desarrollar una aplicación de consola en Java que permita jugar una versión simplificada de Batalla Naval, aplicando los conceptos fundamentales de programación:
- Variables y tipos de datos
- Condicionales (if, switch)
- Ciclos (for, while)
- Métodos
- Arreglos bidimensionales
- Programación Orientada a Objetos
- Manejo de errores
- Colecciones básicas
Descripción del problema
El juego consiste en un tablero de 10x10 donde se colocan varios barcos. El jugador debe ingresar coordenadas para intentar hundir todos los barcos antes de agotar sus intentos.
Reglas
- El tablero tendrá tamaño 10x10.
- Se colocarán 5 barcos aleatoriamente.
- El jugador ingresará coordenadas (fila y columna).
- Si encuentra un barco, se mostrará "Impacto".
- Si falla, se mostrará "Agua".
- El juego termina cuando:
- Todos los barcos sean destruidos.
- Se agoten los intentos disponibles.
Requisitos Funcionales
RF-01: Creación del tablero
El sistema deberá crear una matriz de 10 filas por 10 columnas.
char[][] tablero = new char[10][10];
RF-02: Generación automática de barcos
El sistema colocará barcos en posiciones aleatorias.
Random random = new Random();
RF-03: Captura de coordenadas
El usuario ingresará:
Fila: 4
Columna: 7
Validando que estén dentro del rango permitido.
RF-04: Detección de impactos
Si la coordenada contiene un barco:
¡Impacto!
Si no
Agua
RF-05: Conteo de barcos hundidos
El sistema deberá mantener un contador.
barcosRestantes--;
RF-06: Finalización del juego
Mostrar alguno de los siguientes mensajes:
¡Ganaste!
Todos los barcos fueron destruidos.
O
Game Over
No quedan intentos.
Diseño Orientado a Objetos
Clase Principal
JuegoBatallaNaval
Responsabilidades:
- Iniciar partida.
- Mostrar menú.
- Controlar turnos.
Clase Tablero
Atributos:
private char[][] tablero;
Métodos:
crearTablero()
mostrarTablero()
colocarBarcos()
Clase Barco
Atributos:
private int fila;
private int columna;
private boolean destruido;
Métodos:
recibirImpacto()
estaDestruido()
Clase Jugador
Atributos:
private String nombre;
private int intentos;
Métodos:
realizarDisparo()
Diagrama de Flujo
Inicio
|
Crear tablero
|
Colocar barcos
|
Mostrar tablero
|
Ingresar coordenadas
|
¿Hay barco?
/ \
Sí No
| |
Impacto Agua
| |
Actualizar tablero
|
¿Quedan barcos?
|
Sí ------> Nuevo turno
|
No
|
Ganaste
|
Fin
Ejemplo de ejecución
======== BATALLA NAVAL ========
Intentos restantes: 20
Ingrese fila:
4
Ingrese columna:
7
¡Impacto!
Barcos restantes: 4
Mejoras Opcionales
Si deseas obtener una calificación más alta, puedes añadir:
Nivel Intermedio
- Diferentes tamaños de barcos.
- Selección de dificultad.
- Guardado de puntuaciones.
Nivel Avanzado
- Juego para dos jugadores.
- Interfaz gráfica con Java Swing o JavaFX.
- Persistencia de datos en archivos.
- Ranking de mejores jugadores.
Aprendizajes Demostrados
Este proyecto demuestra dominio de:
- Sintaxis básica de Java.
- Estructuras de control.
- Arreglos bidimensionales.
- Métodos y funciones.
- Clases y objetos.
- Encapsulación.
- Manejo de entradas del usuario.
- Generación aleatoria.
- Resolución de problemas mediante algoritmos.
Resultado esperado: un juego funcional de Batalla Naval en consola que integre los principales temas enseñados en el curso de introducción a Java.