void addShip(const Coordinate &pos,ShipType type,Orientation orientation). Método que añade un barco al tablero del jugador. Para ello debe hacer lo siguiente: 1. Comprobar que el jugador no tenga ya en el tablero el máximo número de barcos de ese tipo. En caso de que se intente añadir un tipo de barco cuyo máximo ya se ha alcanzado (p.ej. si se intenta añadir un destructor y el jugador ya tiene 2 destructores), se lanzará la excepción EXCEPTION_MAX_SHIP_TYPE 2. Comprobar que la partida no se ha iniciado ya, es decir, que no hay posiciones del tablero cuyo estado sea WATER ni HIT; si la partida ya ha empezado no se pueden añadir más barcos y se lanzará la excepción EXCEPTION_GAME_STARTED 3. A partir de los parámetros, construir el vector de punteros a coordenadas necesario para crear el barco, con ayuda del método addOffset de la clase Coordinate y teniendo en cuenta que todas las coordenadas deben cumplir las siguientes restricciones: • Deben estar dentro del tablero (obviamente, esta comprobación debe hacerse antes de obtener el puntero a la coordenada del tablero); si no se cumple esta condición se debe lanzar la excepción EXCEPTION_OUTSIDE • La coordenada del tablero debe estar vacía (con estado NONE), en caso contrario se debe lanzar la excepción EXCEPTION_NONFREE_POSITION. Por simplificar la práctica, en esta versión del juego se permite que los barcos se coloquen en posiciones adyacentes a otros barcos, no es necesario comprobar nada al respecto El número de coordenadas que debe almacenarse en el vector se determinará en función del tipo de barco, según la tabla de la Sección 3.3 (usando el método Ship::shipSize). Por ejemplo, para un DESTROYER se almacenarán 3 posiciones. 4. Una vez se ha construido el vector de punteros a las coordenadas que va a ocupar el barco, se puede construir el barco y almacenarlo en el vector de barcos del jugador. • Para obtener un puntero a una coordenada del tablero habría que hacer algo así: Coordinate *pcoord = &(board[2][3]); De esa forma se declara un puntero pcoord y se le asigna la coordenada (2,3) del tablero
#include <iostream> int main() { int board[10][10]; int i, j; for (i = 0; i < 10; i++) { for (j = 0; j < 10; j++) { board[i][j] = i + j; } } std::cout << board[2][3] << std::endl; Coordinate *pcoord = &(board[2][3]); return 0; }