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.