Class hundirFlota
- Author:
- Ivan Ribes Moliner
-
Field Summary
Fields -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic voidcantBarcos(int dificultad, int[] cantBarcos, String[] nombreBarco, char[][] tablero, int[] longBarcos) Establece la cantidad de barcos por tipo según la dificultad elegida.static intcantBarcosPosible(char[][] tablero, int i, int[] longBarcos) Calcula el número máximo aproximado de barcos que podrían colocarse para un tipo de barco concreto en un tablero dado, teniendo en cuenta su longitud y las casillas actualmente libres ('_').static intcantIntentos(int dificultad, char[][] tablero, int minIntentos) Devuelve el número de intentos según la dificultad.static intcolocarBarco(char[][] tableroCPU, int[] cantBarcos, int i, char[] letraBarco, int[] longBarco, int[][] numeroBarco, String[] barcos, int numBarco) Coloca en el tablero todos los barcos de un tipo concreto (según el índicei), intentando posiciones aleatorias hasta encontrar una ubicación válida.static intcolocarBarcosPersonalizado(char[][] tableroCPU, int[] longBarcos, char[] letraBarco, int[][] numeroBarco, String[] barcos, int[] cantBarcos) Permite al usuario definir cuántos barcos de cada tipo quiere colocar (modo PERSONALIZADO).static voidcomprobarJugada(char[][] tableroCPU, char[][] tableroUser, int fila, int columna, int[][] tableroAux, int[] estadoBarco) Procesa la jugada del usuario en una coordenada (fila, columna)static booleancomprobarVictoria(int[] estados) Comprueba si el jugador ha ganado.static intcontarMinIntentos(char[][] tableroCPU) Cuenta cuántas casillas del tablero de la CPU están ocupadas por barcos.static voidcrearTablero(char[][] tablero) Rellena un tablero de caracteres con '_' para inicializarlo como tablero vacío.static voidcrearTablero(int[][] tablero) Rellena un tablero auxiliar numérico con -1.static intdireccionBarco(int longBarco, int fila, int columna, char[][] tableroCPU) Calcula una dirección válida para colocar un barco desde una posición inicial.static voidestadoBarcos(int[][] tablero, int[] estado, int fila, int columna, int numBarco, int longBarco) Actualiza y muestra el estado de un barco (TOCADO/HUNDIDO) tras un impacto.static voidPunto de entrada del programa.static voidmostrarRondas(int ronda, int intentos) Muestra por consola el número de rondas restantes con un color que varía según el porcentaje de intentos restantes (verde, amarillo, naranja o rojo).static voidmostrarTablero(char[][] tableroUser) Muestra por consola el tablero del usuario con formato de filas (letras) y columnas (números), aplicando colores ANSI según el contenido: '_' y 'A' en cian, 'X' en rojo.static voidmostrarTablero(int[][] tablero) Muestra por consola un tablero auxiliar de enteros.static voidmostrarTableroDerrota(char[][] tableroUser, char[][] tableroCPU) Muestra el tablero final en caso de derrota.static intposRandom(char[][] tableroCPU) Genera un índice aleatorio válido dentro de los límites del tablero.static intrecorrerBarcos(char[][] tableroCPU, int[] cantBarcos, char[] letraBarco, int[] longBarco, int[][] numeroBarco, String[] barcos) Coloca los barcos de la CPU en el tablero, según la cantidad y longitud de cada tipo de barco.static intMuestra un menú de dificultad y solicita una opción válida al usuario.static intseleccionarColumna(char[][] tablero) Solicita al usuario una columna en formato numérico y la valida según el tamaño del tablero.static intseleccionarFila(char[][] tablero) Solicita al usuario una fila en formato letra (A, B, C...) y la convierte a índice numérico.
-
Field Details
-
RESET
- See Also:
-
NEGRITA
- See Also:
-
CIAN
- See Also:
-
AMARILLO
- See Also:
-
ROJO
- See Also:
-
VERDE
- See Also:
-
NARANJA
- See Also:
-
BLANCO
- See Also:
-
-
Constructor Details
-
hundirFlota
public hundirFlota()
-
-
Method Details
-
main
Punto de entrada del programa. Prepara la partida (dificultad, tamaño de tablero, barcos e intentos), inicializa los tableros y ejecuta el bucle principal de juego hasta victoria o derrota.- Parameters:
args-
-
crearTablero
public static void crearTablero(char[][] tablero) Rellena un tablero de caracteres con '_' para inicializarlo como tablero vacío.- Parameters:
tablero- matriz que representa el tablero a inicializar
-
crearTablero
public static void crearTablero(int[][] tablero) Rellena un tablero auxiliar numérico con -1. Se usa para almacenar información auxiliar (identificación de barcos por casilla).- Parameters:
tablero- matriz auxiliar a inicializar
-
posRandom
public static int posRandom(char[][] tableroCPU) Genera un índice aleatorio válido dentro de los límites del tablero. Se utiliza para obtener valores de fila o columna al colocar barcos.- Parameters:
tableroCPU- tablero de referencia para obtener el tamaño- Returns:
- índice aleatorio entre 0 y (tableroCPU.length - 1)
-
recorrerBarcos
public static int recorrerBarcos(char[][] tableroCPU, int[] cantBarcos, char[] letraBarco, int[] longBarco, int[][] numeroBarco, String[] barcos) Coloca los barcos de la CPU en el tablero, según la cantidad y longitud de cada tipo de barco. Para cada barco se selecciona una posición inicial aleatoria y una dirección válida (horizontal o vertical según el tipo), asegurando que las posiciones estén libres. Además, se rellena la matriz auxiliarnumeroBarcocon el identificador numérico del barco en cada casilla ocupada.- Parameters:
tableroCPU- tablero de la CPU donde se colocan los barcoscantBarcos- cantidad de barcos por tipoletraBarco- letra que representa cada tipo de barco en el tablerolongBarco- longitud (tamaño) de cada tipo de barconumeroBarco- matriz auxiliar que guarda el número/ID de barco por casilla ocupada- Returns:
- identificador del último barco colocado
-
direccionBarco
public static int direccionBarco(int longBarco, int fila, int columna, char[][] tableroCPU) Calcula una dirección válida para colocar un barco desde una posición inicial. Devuelve 1 si es posible colocar el barco en dirección positiva (derecha o abajo), -1 si es posible colocarlo en dirección negativa (izquierda o arriba), o 0 si no es posible en ninguna dirección desde esa posición.- Parameters:
longBarco- longitud del barco a colocarfila- posición inicial (fila)columna- posición inicial (columna)tableroCPU- tablero donde se comprueba la disponibilidad de casillas- Returns:
- 1 si dirección positiva es válida, -1 si dirección negativa es válida, 0 si ninguna es válida
-
cantBarcosPosible
public static int cantBarcosPosible(char[][] tablero, int i, int[] longBarcos) Calcula el número máximo aproximado de barcos que podrían colocarse para un tipo de barco concreto en un tablero dado, teniendo en cuenta su longitud y las casillas actualmente libres ('_').Se utiliza como apoyo en el modo PERSONALIZADO para limitar el valor máximo que puede introducir el usuario.
- Parameters:
tablero- tablero en el que se quiere estimar cuántos barcos cabeni- índice del tipo de barco (relacionado con los arrays longBarcos, barcos, etc.)longBarcos- array con las longitudes de cada tipo de barco- Returns:
- número máximo estimado de barcos posibles para ese tipo
-
colocarBarcosPersonalizado
public static int colocarBarcosPersonalizado(char[][] tableroCPU, int[] longBarcos, char[] letraBarco, int[][] numeroBarco, String[] barcos, int[] cantBarcos) Permite al usuario definir cuántos barcos de cada tipo quiere colocar (modo PERSONALIZADO).Para cada tipo de barco calcula el máximo posible en función del tablero y la longitud del barco, solicita al usuario un valor válido, y finalmente coloca los barcos de forma aleatoria en el tablero.
- Parameters:
tableroCPU- tablero real de la CPU donde se colocan los barcoslongBarcos- array con la longitud de cada tipo de barcoletraBarco- array con la letra que representa cada tipo de barco en el tableronumeroBarco- matriz auxiliar donde se guarda el ID numérico de barco en cada casilla ocupadabarcos- array con los nombres de los barcos (para mostrar mensajes al usuario)cantBarcos- array donde se guardará la cantidad elegida por el usuario para cada tipo de barco- Returns:
- ID del último barco colocado (sirve para dimensionar estructuras como estadoBarcos)
-
colocarBarco
public static int colocarBarco(char[][] tableroCPU, int[] cantBarcos, int i, char[] letraBarco, int[] longBarco, int[][] numeroBarco, String[] barcos, int numBarco) Coloca en el tablero todos los barcos de un tipo concreto (según el índicei), intentando posiciones aleatorias hasta encontrar una ubicación válida.Cuando consigue colocar un barco, marca sus casillas con la letra correspondiente y rellena
numeroBarcocon el identificador del barco para poder controlar tocado/hundido.Si tras muchos intentos no se puede colocar un barco, se contabiliza como "imposible" y se informa al final.
- Parameters:
tableroCPU- tablero real de la CPU donde se colocan los barcoscantBarcos- array con la cantidad de barcos por tipoi- índice del tipo de barco que se está colocandoletraBarco- array con la letra que representa cada tipo de barcolongBarco- array con las longitudes de cada tipo de barconumeroBarco- matriz auxiliar donde se guarda el ID numérico de barco en cada casilla ocupadabarcos- array con los nombres de barcos (para mensajes)numBarco- contador/ID actual del siguiente barco a colocar- Returns:
- nuevo valor de
numBarcotras colocar todos los barcos de ese tipo
-
seleccionarFila
public static int seleccionarFila(char[][] tablero) Solicita al usuario una fila en formato letra (A, B, C...) y la convierte a índice numérico. Repite la petición hasta que la fila sea válida para el tamaño del tablero.- Parameters:
tablero- tablero de referencia para validar el rango- Returns:
- índice de fila (0 a tablero.length - 1)
-
seleccionarColumna
public static int seleccionarColumna(char[][] tablero) Solicita al usuario una columna en formato numérico y la valida según el tamaño del tablero. Repite la petición hasta que la columna sea válida.- Parameters:
tablero- tablero de referencia para validar el rango- Returns:
- índice de columna (0 a tablero.length - 1)
-
comprobarJugada
public static void comprobarJugada(char[][] tableroCPU, char[][] tableroUser, int fila, int columna, int[][] tableroAux, int[] estadoBarco) Procesa la jugada del usuario en una coordenada (fila, columna). - Si ya se ha disparado en esa casilla del tablero del usuario, vuelve a pedir coordenadas. - Si en el tablero de la CPU hay agua ('_'), marca 'A' en el tablero del usuario. - Si hay barco, marca 'X', actualiza la matriz auxiliar y calcula el estado del barco (tocado/hundido).- Parameters:
tableroCPU- tablero real de la CPU (con barcos)tableroUser- tablero visible para el usuario (con disparos)fila- fila seleccionada por el usuariocolumna- columna seleccionada por el usuariotableroAux- matriz auxiliar con el ID de barco por casillaestadoBarco- array que guarda el estado de cada barco (por ID)
-
estadoBarcos
public static void estadoBarcos(int[][] tablero, int[] estado, int fila, int columna, int numBarco, int longBarco) Actualiza y muestra el estado de un barco (TOCADO/HUNDIDO) tras un impacto. Calcula cuántas partes del barco siguen presentes entablero. Si no quedan partes, marca el barco como hundido (2); si quedan, lo marca como tocado (1).- Parameters:
tablero- matriz auxiliar donde se identifican las partes restantes del barcoestado- array de estados de barcos por ID (0: nada, 1: tocado, 2: hundido)fila- fila del último disparo (para comprobar horizontal)columna- columna del último disparo (para comprobar vertical)numBarco- identificador del barco impactadolongBarco- longitud del barco impactado
-
comprobarVictoria
public static boolean comprobarVictoria(int[] estados) Comprueba si el jugador ha ganado. Se considera victoria cuando todos los barcos están en estado hundido (2).- Parameters:
estados- array con el estado de cada barco- Returns:
truesi todos los barcos están hundidos,falseen caso contrario
-
contarMinIntentos
public static int contarMinIntentos(char[][] tableroCPU) Cuenta cuántas casillas del tablero de la CPU están ocupadas por barcos.Este valor se utiliza como mínimo teórico de intentos: si el usuario elige menos intentos que casillas ocupadas, sería imposible hundirlo todo aunque no fallase nunca.
- Parameters:
tableroCPU- tablero real de la CPU (contiene '_' en agua y letras en barcos)- Returns:
- número de casillas ocupadas por barcos
-
mostrarTablero
public static void mostrarTablero(char[][] tableroUser) Muestra por consola el tablero del usuario con formato de filas (letras) y columnas (números), aplicando colores ANSI según el contenido: '_' y 'A' en cian, 'X' en rojo.- Parameters:
tableroUser- tablero del usuario a mostrar
-
mostrarTableroDerrota
public static void mostrarTableroDerrota(char[][] tableroUser, char[][] tableroCPU) Muestra el tablero final en caso de derrota. Sustituye en el tablero del usuario todas las casillas no acertadas por el contenido real del tablero de la CPU, para revelar la posición de los barcos. Luego imprime el tablero con formato y colores ANSI.- Parameters:
tableroUser- tablero del usuario (se completa con información del tableroCPU)tableroCPU- tablero real de la CPU con la ubicación de los barcos
-
mostrarTablero
public static void mostrarTablero(int[][] tablero) Muestra por consola un tablero auxiliar de enteros. Se utiliza principalmente para depuración o pruebas.- Parameters:
tablero- matriz numérica a mostrar
-
mostrarRondas
public static void mostrarRondas(int ronda, int intentos) Muestra por consola el número de rondas restantes con un color que varía según el porcentaje de intentos restantes (verde, amarillo, naranja o rojo).Si queda una única ronda, muestra el aviso de "ULTIMA RONDA".
- Parameters:
ronda- rondas restantes en ese momentointentos- número total de intentos iniciales
-
seleccionaDificultad
public static int seleccionaDificultad()Muestra un menú de dificultad y solicita una opción válida al usuario. Las opciones disponibles son: FACIL, MEDIO, DIFICIL y PERSONALIZADO.- Returns:
- dificultad elegida (1..4)
-
cantBarcos
public static void cantBarcos(int dificultad, int[] cantBarcos, String[] nombreBarco, char[][] tablero, int[] longBarcos) Establece la cantidad de barcos por tipo según la dificultad elegida.- Parameters:
dificultad- dificultad seleccionadacantBarcos- array donde se guarda la cantidad de barcos por tiponombreBarco- nombres de cada tipo de barco (no se usa aquí)
-
cantIntentos
public static int cantIntentos(int dificultad, char[][] tablero, int minIntentos) Devuelve el número de intentos según la dificultad.En modo PERSONALIZADO (dificultad 4), el usuario introduce los intentos y se valida que:
- No supere el máximo posible (
tablero.length * tablero.length). - No sea inferior al mínimo necesario (
minIntentos) para poder acertar todas las casillas ocupadas.
- Parameters:
dificultad- dificultad seleccionada (1: fácil, 2: medio, 3: difícil, 4: personalizado)tablero- tablero de referencia para calcular el máximo de intentos posibleminIntentos- mínimo de intentos recomendado/obligatorio para que sea posible tocar todas las casillas con barco- Returns:
- número de intentos para la partida
- No supere el máximo posible (
-