← Menú

NavalStrike

Batalla Naval · Estrategia de Búsqueda
0Victorias
0Partidas
0Derrotas
⚓ Fase de colocación — coloca tus barcos
Selecciona un barco y haz clic en tu tablero para colocarlo
Tu flota
Aguas enemigas
🎯 Asistente estratégico
📊 Análisis
🚢 Flota enemiga
Precisión
⚓ Tu flota
📊 Estadísticas
Disparos totales0
Impactos0
Fallados0
Barcos hundidos0

Cómo Jugar

Guía completa · Reglas · Mecánicas · Ejemplo práctico
🎯 Objetivo del juego

Batalla Naval es un juego de información imperfecta entre dos jugadores. Cada jugador esconde su flota en un tablero oculto y por turnos dispara coordenadas intentando hundir los barcos del rival. Gana quien hunde toda la flota enemiga primero.

En esta versión juegas contra una IA con tres niveles de dificultad. Tú disparas al tablero enemigo haciendo clic; la IA dispara automáticamente después de cada turno tuyo.

🚢 La flota (tablero 10×10)
BarcoTamañoCantidad
✈️ Portaaviones5 celdas×1
⚔️ Acorazado4 celdas×1
🛡️ Crucero3 celdas×1
🔱 Submarino3 celdas×1
⚡ Destructor2 celdas×1

En el tablero 8×8 se usa la misma flota excepto el Portaaviones.

⚓ Fase 1: Colocación
  • Selecciona un barco del menú superior y haz clic en tu tablero (izquierda) para colocarlo.
  • Pulsa R o el botón "Rotar" para cambiar entre orientación horizontal y vertical.
  • Los barcos no pueden solaparse ni salirse del tablero.
  • Usa "Auto-colocar" si quieres que el juego coloque la flota aleatoriamente.
  • Cuando todos los barcos estén colocados, el botón "¡Iniciar batalla!" se activa.
💡 Tip: La IA no ve tu tablero durante la colocación. Puedes tomarte el tiempo que quieras para pensar tu disposición.
⚔️ Fase 2: Batalla
  • Haz clic en cualquier celda del tablero enemigo (derecha) para disparar.
  • 🔥 Fuego = impacto en un barco. 💥 = barco hundido. ● azul = agua (fallo).
  • Cuando un barco recibe impacto en todas sus celdas, queda hundido. El panel lateral lo muestra.
  • Después de cada disparo tuyo, la IA dispara automáticamente a tu flota.
  • Usa el botón "Sugerir mejor disparo" para que el asistente calcule la celda más probable.
⚠️ Regla importante: No puedes disparar a una celda ya descubierta. Los disparos previos permanecen visibles toda la partida.
🏆 Condición de victoria

La partida termina cuando uno de los dos jugadores hunde todos los barcos del rival. El juego muestra la precisión final (% de impactos sobre disparos totales) y actualiza el marcador de victorias/derrotas.

🎮 Ejemplo práctico visual

Situación en mitad de partida: acabas de impactar en C4. El tablero muestra varios disparos previos. ¿A dónde disparar ahora?

AB CD EF
1
2
3
4
🔥
5
6
Impacto (🔥) — hay un barco aquí
Agua (●) — disparo fallido
Celda sin explorar
➤ Acción óptima:
Acabas de impactar en C4. El barco tiene al menos 1 celda más. Dispara a las celdas adyacentes: B4, D4, C3 o C5. Empieza por D4 (expande horizontal primero).
🔧 Controles rápidos
AcciónCómo
Rotar barcoTecla R / botón "Rotar"
Seleccionar barcoClic en el botón del barco
Auto-colocar flotaBotón "⚡ Auto-colocar"
Ver sugerencia IABotón "🔍 Sugerir mejor disparo"
Nueva partidaBotón "↺ Nueva partida"
Cambiar dificultadSelector "Dificultad IA"

Estrategias

Aperturas · Ataques · Patrones · Jugadas dominantes
🎯 Los tres modos de búsqueda

Todo buen jugador alterna entre tres estados mentales según la situación del tablero:

🔍 Modo Hunt (Caza)

No hay barcos tocados activos. Disparas explorando el tablero. El objetivo es maximizar la información por disparo. Usa patrones que cubran el máximo espacio posible con el mínimo número de disparos.

🎯 Modo Target (Objetivo)

Has impactado un barco. Cambia la prioridad: ahora debes hundir ese barco antes de seguir explorando. Dispara en las 4 direcciones del impacto hasta determinar la orientación y luego barrido lineal.

📊 Modo Probabilístico

Nivel avanzado: calculas mentalmente (o con el asistente) cuántas posiciones válidas quedan para cada barco restante. Disparas siempre a la celda de mayor densidad de cobertura.

♟️ Patrón de ajedrez (Checkerboard)

El barco más pequeño tiene 2 celdas. Esto implica que nunca podrá estar en celdas de "mismo color" en un tablero de ajedrez sin que al menos una de ellas sea de "otro color". Disparando solo en celdas de un color:

  • Reduces el número de celdas a explorar a la mitad (50 celdas en un 10×10)
  • Garantizas que ningún barco puede escapar sin ser detectado
  • Mejoras el número esperado de disparos hasta primer impacto
PATRÓN AJEDREZ (6×6)
Celdas azules = disparas aquí
Celdas oscuras = las saltas

Con este patrón en un 10×10 solo necesitas 50 disparos para garantizar al menos un impacto en cada barco de tamaño ≥ 2.
🔑 Si el barco más pequeño que queda es de tamaño 3, puedes usar un patrón más agresivo disparando cada 3 celdas, reduciendo la exploración a solo ~34 disparos.
🗺️ Estrategia de apertura: colocación defensiva

Tu colocación también importa porque la IA adversaria puede ser más o menos inteligente. Algunas guías:

  • Evita los bordes para barcos grandes: la IA en modo probabilístico asigna más densidad al centro.
  • Separa los barcos: si están juntos, un impacto da mucha información sobre los vecinos.
  • Coloca algún barco en borde: los jugadores humanos tienden a evitar los bordes, así que ahí sorprende.
  • No pongas el Portaaviones horizontal: es predecible. Una diagonal o posición asimétrica dificulta la búsqueda.
  • Usa orientaciones mixtas: si todos tus barcos son horizontales, la IA puede inferir rápidamente la extensión al impactar.
🔱 Algoritmo Hunt & Target explicado

Este es el algoritmo que usa la IA en nivel medio. Entenderlo te ayuda a anticipar sus movimientos y a usarlo tú mismo:

EstadoCondiciónAcción
HuntCola de objetivos vacíaDisparo aleatorio en patrón de ajedrez
TargetHay impactos sin hundirDispara a las 4 celdas adyacentes al hit
Target+Dos hits en líneaDetermina eje; barrido lineal hacia ambos lados
ResetBarco hundidoLimpia la cola; vuelve a Hunt
💡 Cómo explotarlo: Si juegas contra un humano que usa Hunt&Target y colocas dos barcos de tamaño 2 muy cerca, puede "gastarse" disparos extra confundiendo la extensión del primero con el segundo.
🧠 Estrategia avanzada: disparo por densidad

La IA en nivel difícil usa un mapa de calor probabilístico. Tú puedes aplicarlo mentalmente así:

  • Para cada barco restante, cuenta cuántas posiciones válidas (horizontal + vertical) pasan por cada celda.
  • Suma las coberturas de todos los barcos restantes en cada celda.
  • Dispara siempre a la celda con mayor puntuación acumulada.
  • Después de cada disparo, recalcula el mapa.

En la práctica, el centro del tablero suele tener mayor densidad al inicio. A medida que avanza la partida, las zonas con muchas celdas libres contiguas se vuelven más valiosas.

⚠️ Error común: Seguir disparando en el centro cuando ya has revelado que el portaaviones no está ahí. Actualiza tu modelo mental con cada nuevo dato.
📈 Resumen de efectividad por estrategia
EstrategiaDisparos promedio (10×10)Complejidad
Aleatoria pura~96 disparosNinguna
Patrón de ajedrez~65–70 disparosBaja
Hunt & Target~52–58 disparosMedia
Densidad probabilística~42–48 disparosAlta
Óptimo teórico~35–40 disparosMuy alta

Teoría Matemática

Probabilidad · Información · Combinatoria · Optimización
🎲 1. Espacio de estados y combinatoria

El primer paso es cuantificar la complejidad del juego. ¿Cuántas formas hay de colocar una flota completa?

Posiciones de un barco de tamaño k en un tablero N×N

Un barco de tamaño $k$ colocado horizontalmente en un tablero $N \times N$ ocupa $N$ filas y $N - k + 1$ columnas posibles, dando:

$$P_H(k, N) = N \cdot (N - k + 1)$$

Lo mismo para orientación vertical:

$$P_V(k, N) = (N - k + 1) \cdot N$$

Total de posiciones para un barco de tamaño $k$:

$$P(k, N) = 2N(N-k+1)$$

Para el portaaviones ($k=5$) en un tablero 10×10:

$$P(5, 10) = 2 \cdot 10 \cdot (10 - 5 + 1) = 2 \cdot 10 \cdot 6 = 120 \text{ posiciones}$$

El número total de configuraciones de flota completa (sin solapamientos) es enorme — del orden de $10^{12}$ configuraciones válidas para la flota estándar. Esto hace imposible la búsqueda exhaustiva y justifica usar heurísticas probabilísticas.

📊 2. Probabilidad marginal por celda

Dado el estado actual del tablero (hits y misses conocidos), queremos calcular la probabilidad de que cada celda desconocida contenga un barco.

Probabilidad marginal

Sea $\mathcal{C}$ el conjunto de configuraciones de flota consistentes con las observaciones actuales. La probabilidad de que la celda $(r,c)$ contenga un barco es:

$$P(r,c) = \frac{|\{\text{configs en } \mathcal{C} \text{ donde } (r,c) \text{ tiene barco}\}|}{|\mathcal{C}|}$$

Calcular esto exactamente es intractable. La aproximación usada es el conteo de cobertura:

$$\hat{P}(r,c) = \sum_{s \in \text{barcos\_restantes}} \sum_{\text{pos válidas de } s \text{ que cubren } (r,c)} 1$$

Este estimador es proporcional a la probabilidad real si asumimos distribución uniforme sobre posiciones válidas. En la práctica es una excelente aproximación que permite calcular el mapa de calor de forma eficiente.

🔑 La celda con mayor $\hat{P}(r,c)$ es la jugada óptima bajo el supuesto de distribución uniforme. Es la que usa el asistente estratégico del juego.
ℹ️ 3. Teoría de la información y entropía

Cada disparo nos proporciona información. ¿Cuánta? La teoría de la información de Shannon da una respuesta precisa.

Entropía de Shannon

Si disparamos a una celda con probabilidad de impacto $p$, el resultado es una variable aleatoria binaria con entropía:

$$H(p) = -p \log_2 p - (1-p) \log_2(1-p) \quad \text{(bits)}$$

Esta función se maximiza en $p = 0.5$, donde $H(0.5) = 1$ bit.

Implicación práctica: el disparo más informativo no es necesariamente el de mayor probabilidad de impacto, sino el más cercano a $p = 0.5$.

Sin embargo, en Batalla Naval el objetivo no es solo obtener información sino hundir barcos rápido. Hay un trade-off entre:

  • Disparos de alta probabilidad de hit (impactan más, pero dan menos info nueva)
  • Disparos de máxima entropía (más informativos, pero pueden ser misses costosos)

La estrategia óptima resuelve este equilibrio usando programación dinámica sobre el espacio de creencias.

🔢 4. El principio de paridad y teoría combinatoria

El patrón de ajedrez tiene una justificación matemática elegante basada en coloraciones de grafos.

Teorema de paridad

Sea $k_{min}$ el tamaño del barco más pequeño restante. En una 2-coloración del tablero (tipo ajedrez), todo barco de tamaño $k_{min}$ ocupa al menos $\lceil k_{min}/2 \rceil$ celdas de cada color.

Para $k_{min} = 2$: cualquier barco de tamaño 2 ocupa exactamente 1 celda de cada color. Por tanto, disparar solo en las celdas de un color garantiza detectarlo.

$$\text{Celdas necesarias} = \left\lceil \frac{N^2}{k_{min}} \right\rceil$$

En un 10×10 con $k_{min} = 2$: necesitamos como máximo $\lceil 100/2 \rceil = 50$ disparos para garantizar al menos un impacto en cualquier barco restante. Cuando el barco mínimo pasa a ser de tamaño 3 (hundiste el destructor), el patrón óptimo cambia:

Si $k_{min} = 3$ entonces solo necesitas disparar cada $3$ celdas: $\lceil 100/3 \rceil = 34$ disparos garantizados.
🧮 5. Número esperado de disparos

Una pregunta natural: ¿cuántos disparos necesita en promedio una estrategia dada? Podemos modelar el juego con procesos estocásticos.

Modelo simplificado (barco único de tamaño k en tablero N²)

Con una estrategia de muestreo uniforme sin reposición, el número esperado de disparos $E[T]$ para encontrar la primera celda del barco sigue una distribución hipergeométrica negativa:

$$E[T] = \frac{N^2 + 1}{k + 1}$$

Para un portaaviones ($k=5$) en 10×10: $E[T] = 101/6 \approx 16.8$ disparos esperados hasta primer impacto.

Para la flota completa, el cálculo se complica porque los barcos interactúan. La fórmula exacta requiere integrar sobre todas las configuraciones posibles, pero simulaciones Monte Carlo dan valores empíricos precisos.

$$E[T_{\text{victoria}}] \approx \sum_{i} E[T_i | T_1, \ldots, T_{i-1}]$$

donde $T_i$ es el número de disparos para hundir el $i$-ésimo barco dado que los anteriores ya están hundidos. Esta dependencia condicional hace el problema no trivial.

🏆 6. Estrategia óptima y teoría de decisión

La estrategia exactamente óptima se formula como un Proceso de Decisión de Markov (MDP):

Formulación MDP

Estado: $s = (\text{observaciones actuales})$ — hits, misses, y por tanto creencias sobre posiciones.

Acción: $a = (r, c)$ — celda a la que disparar.

Transición: $s' = s \cup \{(r,c, \text{resultado})\}$ — actualización bayesiana.

Recompensa: $-1$ por disparo (queremos minimizar disparos totales).

La política óptima $\pi^*$ satisface la ecuación de Bellman:

$$V^*(s) = \max_{a} \left[ r(s,a) + \sum_{s'} P(s'|s,a) V^*(s') \right]$$

El espacio de estados es exponencialmente grande (~$2^{100}$ en un 10×10), por lo que resolver el MDP exactamente es computacionalmente inviable. Las mejores soluciones prácticas usan:

  • Aproximación por densidad de cobertura (el mapa de calor del asistente)
  • Árboles de Monte Carlo (MCTS) con rollouts aleatorios
  • Redes neuronales entrenadas por aprendizaje por refuerzo
💡 Dato curioso: Estudios computacionales (Battleship solver, 2013) estiman que el número mínimo posible de disparos para garantizar la victoria en un 10×10 —en el peor caso— es de 96 disparos, y el promedio del algoritmo óptimo ronda los 40–42 disparos.
📐 7. Ventaja competitiva: aplicación práctica de las matemáticas

Resumiendo cómo cada concepto matemático se traduce en ventaja real en el juego:

Concepto matemáticoAplicación en el juegoGanancia (disparos)
Paridad / coloración de grafosPatrón de ajedrez en Hunt−30 vs aleatoria
Distribución hipergeométricaAjustar patrón según $k_{min}$−5 a −10 adicionales
Estimación de densidadMapa de calor probabilístico−10 a −15 adicionales
Actualización bayesianaExcluir posiciones inválidas tras cada hit−3 a −5 adicionales
Teoría de la informaciónEn Hunt, priorizar celdas con $p \approx 0.5$Marginal pero real
🔑 La conclusión clave: pasar de disparos aleatorios al algoritmo de densidad probabilística reduce el número esperado de disparos a menos de la mitad. Las matemáticas son la diferencia entre ganar en ~42 disparos vs ~96.
🏆
¡Victoria!