Acorazados

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.