/*Fichero tablero.h*/ /* ******************************* */ /** @file tablero.h @author Alvaro Diaz Sanchez @brief Fichero cabecera de la clase Tablero asociado a la biblioteca libconectan.a */ #ifndef __tablero__h__ #define __tablero__h__ using namespace std; /** @brief Clase Tablero La clase @c Tablero representa un tablero, por un lado la parte fisica (visual) donde se van a poner las fichas y para reflejarlo visualmente se usan imagenes que representan las fichas, las casillas y la cabecera y por otro lado interiormente (virtual) como una matriz dinamica llamada @c tablero que se crea a partir de los datos de la dimension y un contador de filas que sirve para que no se solapen fichas una encima de otras y asi se pueda ver el efecto de gravedad (una ficha encima de otra), aqui es donde el tablero realiza sus gestiones para despues reflejarlo al usuario en forma de imagenes. Tambien se va a encargar de pintar el tablero, de ver si esta completo y avisar de ello, de decir cual son las dimensiones exacta de las fichas, cabeceras y pie de ventana que se usan para que el tablero quede bien esteticamente, devolver las dimensiones del tablero, el color de la casilla e insertar un color en una posicion tablero[fila, columna] del tablero y reflejar los colores de las fichas pintando imagenes en el tablero visual. En definitiva, es un unico tablero pero dividido en dos partes, la del usuario se refleja como imagenes y para el ordenador como una matriz dinamica, lo que hace la clase es coger los datos de la matriz y reflejarlos en el tablero con imagenes. */ class Tablero { private: /** @page repTablero Rep de la clase Base @section invTablero Invariante de la representacion - @c 0 <= @c filas < @c FilasTablero(). - @c 0 <= @c columnas < @c ColumnasTablero(). - @c 0 <= @c tablero < @c filas * @c columnas. - @c rep.matriz apunta a una zona de memoria para albergar los @c valores para cada ficha. - @c 0 : Casilla vacia. - @c 1 : Ficha de color 1 (@c Jugador1) - @c 2 : Ficha de color 2 (@c Jugador2) - @c rep.filas_restantes apunta a una zona de memoria para albergar la cantidad de filas utiles en cada jugada - @c Tiene las mismas @c columnas que @c tablero */ int filas; //Numero de filas. int columnas; //Numero de columnas int **tablero; //Tablero como una matriz dinamica int *filas_restantes; //Filas restantes al introducir cada ficha char fichero[512]; //Ruta del directorio de imagenes mas la apariencia int x_ficha; //Ancho de la imagen bmp que representa la ficha int y_ficha; //Alto de la imagen bmp que representa la ficha int x_cabecera; //Ancho de la imagen bmp que representa la cabecera del tablero int y_cabecera; //Alto de la imagen bmp que representa la cabecera del tablero /** @brief Coloca la extension de la distintas imagenes (.n.bmp, .v.bmp, .cab.bmp, ect) que forman el tablero ademas de la ruta del directorio de la imagen y su apariencia (@c dir_imagen + @c tema + @c extension) guardandolo en @c fichero. @param const char *extension: La extension que diferencia a cada parte del tablero. .cab.bmp = Cabecera, .v.bmp = Casilla vacia, .b.bmp = Color 1, .n.bmp = Color 2 @param char recursos[]: Directorio donde se encuentran las fichas. @param char apariencia[]: Nombre de la apariencia de las fichas y el tablero. @pre -Si la ruta o la extension de cada fichero no se encuentra se mostrara un mensaje de error por la salida estandar -No se podrĂ¡ introducir nombres que superen + de 256 caracteres (cantidad maxima de los sistemas operativos, actuales) @return @c void @post - La composicion de la ruta se guarda en @c fichero. - MODIFICA @c fichero */ void ColocarExtension (const char *extension, char recursos[], char apariencia[]); /** @brief Disminuye una fila del vector dinamico filas_restantes cada vez que se inserta una ficha, como concepto de gravedad y para que no se solapen las fichas una encima de otra. @param unsigned int columna: Columna del tablero donde se ha introducido la ficha, para decir que hay una casilla que ocupa esa posicion @pre - 0 <= columna < ColumnasTablro(i); @return @c void @post - Se disminuye en una fila el vector dinamico de filas_restantes porque se ha insertado una ficha. - MODIFICA @c filas_restantes; */ void TableroQuitaFila (unsigned int columna); public: /** @brief Constructor de la clase @c Tablero. Crea el @c tablero y @c filas_restantes mediante memoria dinamica. @param int f: Numero de filas del @c tablero @param int c: Numero de columnas del @c tablero y @c filas_restantes (que coinciden). @pre - 0 <= @c "f" < @c FilasTablero(i). - 0 <= @c "c" < @c ColumnasConectan(i). @return @c matriz y @c filas_restantes. @post - Operador de tipo constructor. - El @c tablero mediante memoria dinamica que representa el tablero virtual que contiene [@c filas, @c columnas] donde se van a realizar las operaciones internas. - El vector @c filas_restantes que controla que no se inserte fichas en la misma casilla y contiene @c columnas. */ Tablero (int f, int c); /** @brief Destructor de la clase @c Tablero. Libera los recursos utilizados por @c tablero y @c filas_restantes @return @c void @post - Operador de tipo constructor. - Libera los recursos utilizados por @c matriz y @c filas_restantes creados previamente con el constructor. - No puede volverse a usarse @c matriz y @c filas_restantes. , salvo que se cree de nuevo. */ ~Tablero (void); /** @brief Asignar el @c color de la ficha en la @c fila y la @c columna del @c tablero. @param int fila: La fila del @c tablero. @param unsigned int columna: La columna del @c tablero. @param int valor: El color de la ficha a escribir. @pre - 0 <= @c "fila" < @c FilasTablero(i) - 0 <= @c "columna" < @c ColumnasTablero(i) - 0 , @c 1 ,@c 2 == @c valor de la ficha. @return @c void @post - [@c "fila", @c "columna"] == @c valor. - Asigna el @c valor de la ficha en la posicion [@c "fila", @c "columna"]. - MODIFICA al @c tablero. */ void SetTablero (int fila, unsigned int columna, int valor); /** @brief Consultar el color de la ficha en la posicion @c fila y @c columna del tablero. @param int fila: La fila del @c tablero. @param unsigned int columna: La columna del @c tablero. @pre - 0 <= @c "fila" < @c FilasTablero(i). - 0 <= @c "columna" < @c ColumnasTablero(i) @return @c int @post - valor == [@c fila, @c columna] - Consulta el @c valor de la ficha - No MODIFICA nada. */ int GetTablero (int fila, int columna) const; /** @brief Consultar el alto de la imagen que representa la ficha. @return @c int. @post - Devuelve el alto de la imagen de la ficha. - No MODIFICA nada. */ int GetAlturaFicha (void) const; /** @brief Consultar el ancho de la imagen que representa la ficha. @return @c int. @post - Devuelve el ancho de la imagen de la ficha. - No MODIFICA nada. */ int GetAnchoFicha (void) const; /** @brief Consultar el alto de la imagen que representa la cabecera del tablero. @return @c int. @post - Devuelve el alto de la imagen de la cabecera. - No MODIFICA nada. */ int GetAlturaCabecera (void) const; /** @brief Consultar el ancho de la imagen que representa la cabecera del tablero. @return @c int. @post - Devuelve el ancho de la imagen de la cabecera. - No MODIFICA nada. */ int GetAnchoCabecera (void) const; /** @brief Consultar el numero de filas del tablero. @return @c int. @post - Devuelve el numero de @c filas del @c tablero. - No MODIFICA nada. */ int FilasTablero (void) const; /** @brief Consultar el numero de columnas del tablero. @return @c int. @post - Devuelve el numero de @c columnas del @c tablero. - No MODIFICA nada. */ int ColumnasTablero (void) const; /** @brief Asignar el numero de filas que tiene cada columna del tablero. @param unsigned int columna: Posicion de la columna del vector filas_restantes, donde especificaremos la cantidad de casillas libres (fila). @param int valor: Numero de casillas libres (filas). @pre - 0 <= @c columna < @c ColumnasTablero(i). - -1 (completo) < valor < FilasTablero(i) (vacio). @return @c void @post - Asigna el numero de casillas libres que representan a las filas que en esa posicion no tienen ficha. - MODIFICA @c filas_restantes */ void SetFilasRestantes (unsigned int columna, int valor); /** @brief Consultar el numero de filas restantes de la columna del tablero que quedan antes de completarse con fichas. @param unsigned int columna: Columna donde se ha introducido la ficha. @pre - 0 <= columna < ColumnasConectan(i). @return @c int. @post - Devuelve el numero de filas que quedan antes de que se agote la capacidad del tablero - No MODIFICA nada. */ int GetFilasRestantes (unsigned int columna) const; /** @brief Representar el hecho de insertar una ficha como introducir en el tablero (matriz dinamica) un valor que represente el color de la ficha e inmediatamente eliminar una fila para que se entienda que ahora esta ocupada por la ficha. @param int fila: La fila donde se introduce el @c valor (color) de la ficha. @param unsigned int columna: La columna donde se introduce el @c valor (color) de la ficha. @param int valor: Valor (color) de la ficha. @pre - 0 < fila < FilasConectan(i). - 0 < columna < ColumnasConectan(i). - 1 o 2 == valor de la ficha (los dos jugadores). @return @c void @post - Reduce una @c fila segun la @c columna donde se inserta la ficha mediante @c QuitarFila - Inserta en la posicion [@c fila, @c columna] el @c valor (color) de la ficha. - MODIFICA la @c matriz y @c filas_restantes. */ void TableroInsertaFicha (int fila, unsigned int columna, int valor); /** @brief Comprobar si el tablero se ha llenado de fichas. @return @c bool @post - Devuelve un bool que indica si el tablero esta lleno o no. - No MODIFICA nada */ bool TableroCompleto (void) const; /** @brief Dibuja el tablero para el usuario con una cabecera, un pie de ventana y tantas @c n_filas como @c n_columnas con casillas vacias todos ellos de la apariencia elegida @param int n_filas: Numero de filas del tablero @param int n_columnas: Numero de columnas del tablero @param int linea: Escribe como titulo "Conectan + @n linea" el numero de fichas a alinear para ganar @pre - 0 <= @c filas < @c FilasConectan() - 0 <= @c columnas < @c ColumnasConectan() - 2 < @c linea <= (@c filas o @c columnas) @return @c void @post - Dibuja el tablero con la cabecera, el pie de ventana y tantas casillas vacias como @c n_filas y @c n_columnas de la apariencia elegida. - @c Modifica @c x_ficha, @c y_ficha, @c x_cabera, @c y_cabecera y @c fichero ya que tiene que obtener la ruta de acceso a las imagenes que la guarda en @c fichero. */ void PintaTablero (char recursos[], char apariencia[], int linea); /** @brief Dibuja el pie de la ventana donde aparecen los mensajes de turnos y confirmacion de seguir de color negro. @return @c void @post - Dibuja el pie de la ventana donde aparecen los mensajes, de color negro - No MODIFICA nada */ void PintarPieTablero (void); /** @brief Dibuja las fichas de los jugadores en el tablero. Dependiendo sobre que jugador se aplica la jugada se pintaran de un color o otro. @param char recursos[]: Directorio donde se encuentran las imagenes de las fichas de color. @param char apariencia[]: Nombre de la apariencia de las fichas. @param int valor: Determina mediante un numero entero de que color hay que pintar la ficha si es para: (1):Jugador 1 (2): Jugador 2 @param int fila: Posicion de la @c fila donde dibujar la ficha de color dependiendo del jugador. @param unsigned int columna: Posicion de la @c columna donde dibujar la ficha de color dependiendo del jugador. @pre - 0 <= @c columna < @c ColumnasTablero(i) - 0 <= @c fila < @c FilasTablero(i) @return @c void @post - Dibuja las fichas de color en la posicion [@c fila, @c columna] del tablero para que se refleje al usuario. - MODIFICA @c x_ficha y @c y_ficha ya que tiene que guardar las dimensiones de las imagenes de las fichas de color */ void TableroPintaFichaJugador (char recursos[], char apariencia[], int valor, int fila, unsigned int columna); }; /* ******************************* */ #endif /* ******************************* */