Menu

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

  1. El tablero tendrá tamaño 10x10.
  2. Se colocarán 5 barcos aleatoriamente.
  3. El jugador ingresará coordenadas (fila y columna).
  4. Si encuentra un barco, se mostrará "Impacto".
  5. Si falla, se mostrará "Agua".
  6. 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.