Guía Javañol – Práctica 2

El objetivo es crear un sistema que permita jugar a hundir la flota contra la CPU en modo consola a través de órdenes introducidas por el usuario en el terminal de comandos.

Instrucciones para la implementación

El juego debe consistir en la elección de casillas del tablero del oponente mediante un sistema de turnos y organizado en dos fases. La primera fase es la de colocación de los barcos en una matriz y la segunda fase comienza el sistema de turnos para lanzar misiles contra el oponente.

El proyecto también deberá ser generado con Maven y con todos los casos de test unitarios que permitan validar el 90 % del código fuente escrito.

Los requisitos del sistema son:

  • La interacción del usuario con el sistema de juego se hará mediante comandos por consola. Así que se debe crear un intérprete de comandos que lea la entrada del usuario. Posibilidad de usar librerías como commons-cli para tal fin.
  • Las operaciones que debe ofrecer ese intérprete como mínimo son: comenzar par- tida, lanzar misil, imprimir partida (tablero e inventario) y salir.
  • La colocación de los barcos en el tablero, tanto para el jugador como para la CPU será aleatoriamente mediante tres variables aleatorias a través de Math.random(). Las variables indicarán posición X e Y y si es horizontal o vertical. Se permite que los barcos se toquen, dejando opcional la inclusión de algún mecanismo para evitarlo.
  • Se debe crear un log en un fichero de texto conteniendo las acciones que se realizan en todas las partidas, tanto las acciones del jugador como las de la CPU, marcando claramente el momento de inicio y fin de las partidas y su resultado.
  • Tanto el tamaño de la matriz como el inventario de barcos debe ser configura- ble. Se supondrá una matriz cuadrada N x N. La variable global N determina el tamaño. El inventario vendrá dado por una instancia de List<Flota>. Siendo la clase Flota = {nombre, numero, tamanyo}. Ambas determinarán cuantos barcos se deberán colocar en cada partida. Se deja opcional que el usuario pueda cambiar la configuración por comandos.
  • Una configuración posible es:
    • Tamaño de matriz por defecto: N = 10
    • 1 portaaviones que ocupe 5 casillas
    • 2 cruceros, que ocupen 4 casillas
    • 3 destructores, que ocupen 3 casillas
    • 2 fragatas, de 2 casillas
    • 4 submarinos, de 1 casilla
  • Si pasado un tiempo el usuario no indica su lanzamiento en medio de una partida en marcha, se le devuelve el turno automáticamente a la CPU para que ejecute su turno.