---
title: Acorazados
description: Refuerza tus habilidades de codificación y mejora tu capacidad para resolver problemas con las katas que comparten los craftspeople de Codurance.
---

[Katas ](https://www.codurance.com/es/katas)

# [Acorazados](https://www.codurance.com/es/katas/acorazados)

 Escrito por [Mark Gray](https://www.codurance.com/es/katas/author/mark-gray) | 12-abr-2023 9:46:32

## Introducción

Esta versión del clásico juego Acorazados, o *Battleships* en inglés, cuenta con tres naves:

- Portaaviones: 4 casillas - representado en un tablero con una "c".
- Destructor: 3 casillas - representado en un tablero con "d".
- Cañonero: 1 casilla - representado en un tablero con "g".

Construye un programa que permita a los usuarios especificar comandos para jugar al acorazado. Los comandos disponibles son:

- addPlayer: Crea un jugador para el juego.
- start: Inicia una nueva partida con una flota de naves situadas en las coordenadas (x,y) definidas por el usuario.
- endTurn: Termina el turno del jugador.
- print: Este comando imprimirá el tablero de juego (Anexo A):

`| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0| | | | | | | | | | | 1| | | | | | | | | | | 2| | | | | | | | g | | | 3| | | d | d | d | | | | | | 4| | | | | | | g | | c | | 5| | | | | | | | | c | | 6| | | | | | | | | c | | 7| | g | | | | d | | | c | | 8| | | | | | d | | | | | 9| | | | | | d | | | | g |`

- fire: Lanza un torpedo en las coordenadas (x,y) dadas.  
  - Si las coordenadas (x,y) son mar, la posición se marcará con "o".  
  - Si la coordenada (x,y) es un barco entonces la posición será marcada con 'x'.  
  - Si un barco tiene todas las casillas impactadas, se imprimirá un mensaje notificando al jugador que el barco se ha hundido.

## Reglas

- Cuando todos los barcos se hayan hundido el juego termina.
- Al finalizar la partida, el juego debería mostrar un informe de batalla con el número de disparos realizados por cada jugador, incluyendo los barcos hundidos o fallados.
- Los barcos hundidos deben mostrar la coordenada más baja posible para el barco dado, por ejemplo:  
  - Un destructor horizontal en la cuadrícula de referencia (2,3), (3,3) y (4,3), pero cuando se informa del hundimiento del barco, sólo es necesario hacer referencia a la primera coordenada.  
  - Un destructor vertical en ref (5,5), (5,6) y (5,7), pero al informar sólo necesitará referenciar (5,5).

Utilizando el Anexo A anterior, presentamos un informe de batalla basado en las posiciones de los barcos:

`[ Player1 Total shots: 23 Misses: 15 Hits: 8 Ships Sunk: [ Gunship: (1,7), Gunship: (9,9), Gunship: (7, 2), Destroyer (2,3) ]`

`| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0| | | o | | | | | | | | 1| | o | | o | | | | | | | 2| | o | | | | | | X | | | 3| | | X | X | X | | | | | | 4| | o | | | | | g | | c | | 5| | o | o | | | o | | | c | | 6| | | | o | | | o | | c | | 7| | X | | | | d | | | x | | 8| | | o | o | | d | | | o | | 9| | | | | o | x | o | | | X |`

Los barcos hundidos tienen todas sus coordenadas marcadas con una X mayúscula y las casillas impactadas tienen una x minúscula donde no fueron hundidos.

## Restricciones 

- Completar utilizando outside-in.
- Cada jugador tiene como máximo:  
  - 1 Portaaviones  
  - 2 Destructores  
  - 4 Cañoneras
- La cuadrícula es de 10 x 10 para mantenerlo simple (pero el diseño debe estar abierto a mejoras).
- Optimización del Hardcore (opcional).
- Implementar un jugador de IA.

<https://codurance.com/policies/cookie>

[Ver post completo](https://www.codurance.com/es/katas/acorazados)

```json
{
  "@context" : "http://schema.org",
  "@type" : "BlogPosting",
  "author" : {
    "@type" : "Person",
    "name" : "Mark Gray"
  },
  "dateModified" : "2023-04-14T11:41:38.311Z",
  "datePublished" : "2023-04-12T09:46:32Z",
  "headline" : "Acorazados",
  "image" : {
    "@type" : "ImageObject",
    "height" : 630,
    "url" : "https://3042464.fs1.hubspotusercontent-na1.net/hubfs/3042464/Katalyst/Thumbnails/Katalyst_Thumbnail_Battleship.jpg",
    "width" : 1200
  },
  "mainEntityOfPage" : "https://www.codurance.com/es/katas/acorazados",
  "publisher" : {
    "@type" : "Organization",
    "logo" : {
      "@type" : "ImageObject",
      "height" : 60,
      "url" : "/hs/hsstatic/content_shared_assets/static-1.4092/img/default-amp-logo.png",
      "width" : 60
    },
    "name" : "Katas"
  }
}
```