/*Fichero jugador.h*/ /** @file jugador.h @author Alvaro Diaz Sanchez @brief Fichero cabecera de la clase Jugador asociado a la biblioteca libconectan.a */ /* ******************************* */ #ifndef __jugador__h__ #define __jugador__h__ /* ******************************* */ #include "tablero.h" /* ******************************* */ using namespace std; /** @brief Clase Jugador La clase @c Jugador contiene las definiciones de los tres tipos de jugadores que pueden jugar en el juego. El primero es de tipo manual y se ha concebido para que el usuario pueda interactuar con el tablero pinchando sobre el. La clase se encarga de ver si se ha pinchado sobre el tablero o si no (en tal caso no se puede hacer nada)y de codificar las coordenadas del raton en la columna deseada para poder reflejarla en el tablero. Su nivel es el 0. El segundo es de tipo automatico y se ha concebido para que eche fichas de manera aleatoria en el tablero, calculando columnas con la probalidad del reloj interno del ordenador. Su nivel es el 1. El tercero es tambien de tipo automatico pero se diferencia del aleatorio porque este jugador es capaz de responder con una minima inteligencia y de cerrar posibles jugadas. Su nivel es el 2. */ class Jugador { /** @page repJugador Rep de la clase Jugador @section invJugador Invariante de la representacion - El nombre de cada jugador no podra ser mayor de 256 caracteres. - 0 < @c turno_fichas <= (@c filas - 2 o @c columnas - 2) - 2 < @c fichas_linea <= (@c filas o @c columnas) - -1 < @c nivel_jugador1 <= 2 0:@c manual (1,2):@c automatico - -1 < @c nivel_jugador2 <= 2 - jugador_comienza == 0 : Empieza color 1 ; @c jugador_comienza == 1: Empieza color 2 */ private: /** @brief Comprueba que el jugador manual al seleccionar la columna deseada sea en la parte de las casillas dibujadas no en la cabecera, en el pie de ventana o en los margenes. @param const Tablero &juego: Objeto de la clase Tablero. @param int x_pixel: El pixel del ancho que extrae @c ObtenerClick(int&,int&) de la biblioteca @c graficos de la imagen del tablero visual. @param int y_pixel: El pixel del alto que extrae @c ObtenerClick(int&,int&) de la biblioteca @c graficos de la imagen del tablero visual. @pre - 0 <= @c x_pixel < @c ColumnasVentana() (funcion de la biblioteca @c graficos) - 0 <= @c y_pixel < @c FilasVentana() (funcion de la biblioteca @c graficos) @return @c bool @post - Devuelve un @c bool indicando si se ha pinchado en la parte de las casillas (tablero) o no (margenes, cabecera, pie de ventana). - No MODIFICA nada */ bool EsTablero (const Tablero &juego, int x_pixel, int y_pixel); /** @brief Transforma la coordenada del ancho proporcionado por @c ObtenerClinck() en la columna del tablero para poder saber donde echar la ficha con mas exactitud. @param const Tablero &juego: Objeto de la clase Tablero. @param int casillas_x: Numero de casillas que hay por las columnas. @param int x_pixel: El pixel del ancho que extrae @c ObtenerClick(int&,int&) de la biblioteca @c graficos de la imagen del tablero visual. @param unsigned int &columna_x: Devuelve por referencia la @c columna_x del tablero a la que corresponderia el @c pixel_x. @pre - 0 <= @c n_columnas < @c ColumnasConectan() - 0 <= @c x_pixel < @c ColumnasVentana() - 0 <= @c columna_x < @c ColumnasConectan() @return @c void @post - Se devuelve la @c columna_x a la que corresponderia el @c pixel_x - No MODIFICA nada */ void LocalizarPosicion (const Tablero &juego, int casillas_x, int pixel_x, unsigned int &columna_x); public: /** @brief Jugador Aleatorio. Jugador de tipo automatico que devuelve una posicion de la columna para insertar su ficha en el tablero de forma aleatoria (reloj interno del ordenador). @param const Tablero &juego: Objeto de la clase Tablero. @return @c unsigned int columna @post - Devuelve la columna de la @c matriz donde insertar su ficha de manera aleatoria. - No MODIFICA nada. */ unsigned int JugadorAleatorio(const Tablero &juego) const; /** @brief Jugador inteligente capaz de responder con un minimo de "inteligencia" a una jugada de su contricante devolviendo la columna mas importante para parar la jugada donde insertar su ficha. @param linea: Numero de fichas maximo que JugadorInteligente comprobara para parar la jugada. @param valor: Valor del color de la ficha que JugadorInteligente debe comprobar. @pre - 2 < @c linea <= (@c filasTablero(i) o @c ColumnasTablero(i)) - 1 0 @c 2 == @c valor de la ficha (los dos jugadores) @return @c unsigned int columna @post - Devuelve la @c columna mas importante segun su criterio (para jugadas horizontales por la izquierda) - No MODIFICA nada */ unsigned int JugadorInteligente (const Tablero &juego, int linea, int valor) const; /** @brief Obtiene la columna donde se quiere echar una ficha de su color manualmente pinchando sobre el tablero con el boton izquierdo del raton en la columna elegida. @param const Tablero &juego: Objeto de la clase Tablero @param unsigned int &columna_tablero: Devuelve por referencia la columna del tablero donde se va a insertar la ficha de su color (@c LocalizarPosicion(int,int,unsigned @c int&) ) @pre - Si se pincha con el boton derecho o central no tendra ninguna respuesta - Si se pincha fuera, en la cabecera, el pie de ventana o en los margenes no se obtendra respuesta alguna (@c EsTablero(int,int,int )) @return @c void @post - Se obtiene la @c columna a la que corresponde las coordenadas que se han obtenido mediante @c ObtenerClick(int&,int&) - MODIFICA @c columna_tablero */ void JugadorManual (const Tablero &juego, unsigned int &columna_tablero); }; /* ******************************* */ #endif /* ****************************** *-_-* "Just do it 26/08/05 "*/