INTELIGECIA EN REDES DE COMUNICACIONES 5º ING TELECOMUNICACIÓN 2006-2007 TRABAJO FINAL DE LA ASIGNATURA “EL DOMINÓ” ________________________________________________ AUTORES DANIEL F. TAVEIRA MONTEIRO RODRIGO GÓMEZ RODRIGUEZ DAVID TOLEDO NAVARRO IRC – Juego del Dominó 1. Índice 2. Introducción ……………………………… 3 3. Modelado del juego ……………………….. 3 4. Realización del modelo …………………. 3 ……………………………… 9 5. Referencias 2 IRC – Juego del Dominó 2. Introducción Nuestra práctica consiste en la realización de un juego, el dominó. El dominó es un juego no determinista (interviene el azar), en el que para su resolución se ha utilizado la estrategia del minimax. Para el desarrollo del mismo se ha utilizado el lenguaje de programación java. 3. Modelado del juego El juego consiste en la intervención de cuatro jugadores. Para cada jugador existen tres posibilidades de juego, que el jugador sea una persona, una máquina principiante, o una máquina experta. Además existe la posibilidad de jugar una partida simple o una partida a 100 puntos. La única diferencia está en que en una partida a 100 puntos al terminar se suma el valor de las piezas que te quedan sin colocar, una vez que alguien sume más o igual a 100 gana aquel jugador que menos puntos tenga en ese momento. Por ejemplo, si al terminar una partida un jugador se queda con las piezas (sin colocar en el tablero) uno dos (1-2) y cuatro cinco (4-5) ese jugador tendrá en ese momento 12 puntos. Se reparten todas las piezas de forma aleatoria para cada jugador (cada jugador contará con 7 fichas inicialmente). Tiene el turno inicial el jugador que posee la ficha seis doble (6-6) que la coloca y cede el turno al jugador de su derecha. Este pondrá ficha si tiene en su poder alguna que encaje, si no es así cederá el turno al jugador de su derecha sin colocar ninguna ficha. Este proceso se repetirá hasta que algún jugador se quede sin fichas o bien uno de los jugadores llegue a 100 puntos, en caso de que se juegue a dicho juego. 4. Realización del modelo Cada jugador cuenta con un vector de fichas. Las fichas se generan utilizando el método public Vector generarFichas() de la clase MesaJuego y se reparten de forma aleatoria a los distintos jugadores utilizando el método public void reparto() de la clase MesaJuego. El tablero se ha implementado como una array bidimensional de nueve filas y un número variable de columnas con el fin de colocar las fichas en el orden correcto en el tablero. Por ejemplo en la posición [4][5] del array va colocada la ficha (6-6) siendo ésta el punto de partida, a partir de la cuál, se recorre dicho array hacia la derecha o hacia la izquierda según la posición donde se coloca la ficha. 3 IRC – Juego del Dominó Existe la posibilidad de jugar contra una máquina principiante o una máquina experta. La máquina principiante coloca fichas al azar, en cambio la máquina experta utiliza la estrategia del minimax. La estrategia del minimax se ha implementado de la siguiente forma: 1- Se recorre su vector de fichas y se comprueba si alguna de las fichas se puede poner. 2- Si sólo se puede poner una se coloca. 3- Si hay más de una que se puede poner, se coge una y simula todas las piezas que pueden poner los contrarios hasta que se obtiene el turno de nuevo. Así sucesivamente con todas las posibles fichas candidatas. 4- Para obtener qué pieza es mejor se le dan valores a las jugadas. Las piezas dobles tienen mayor valor, multiplicando su valor por cuatro. Es decir, si se tiene la pieza doble (2-2) su valor sería 2 + 2 (valor de la ficha) multiplicado por cuatro sumando un total de 16 puntos. A ese valor obtenido se le suma la cantidad de 1000 con el fin de que al restar no de negativo. Si se pone una pieza se suma un cierto valor, si el contrario pone una ficha se resta un cierto valor, si se pasa el turno se resta un cierto valor y si el contrario pasa turno se suma un cierto valor. Sumando y restando todos esos valores se obtiene la pieza que genere mayor puntuación. 5- Existe un problema con la profundidad del algoritmo. Al inicio de la partida existen muchas jugadas posibles de los jugadores, por tanto para que se tarde poco en calcular el minimax sólo se puede llegar hasta el siguiente movimiento suyo, es decir, una profundidad en el árbol de cuatro. Según va avanzando la partida y los jugadores se van quedando sin piezas la profundidad va aumentando hasta que llega a calcular los posibles finales. 6- Además para no examinar todos los posibles estados se utiliza la poda alpha-beta. Se tienen cuatro vectores cada uno con las posibles fichas del contrario y las propias de la máquina al principio los tres vectores de los contrarios tienen todas las piezas que la máquina no tiene y se van actualizando según se vayan poniendo fichas en el tablero. Y si alguno pasa turno a algún número se quitan todas las piezas del vector del jugador q paso turno que tengan ese número al que pasó. Lo que se hace también, para eliminar posibles estados es que si los extremos libres en el tablero son iguales sólo se busca por un lado. Para la visualización del juego se ha implementado una interfaz gráfica, también desarrollada en el lenguaje de programación java. La versión utilizada ha sido j2sdk1.4.0_03. Si se utiliza otra versión es posible que algunos elementos de la interfaz no se aprecien correctamente. A continuación se muestran una serie de figuras explicando las distintas funcionalidades del juego mediante la interacción con la interfaz gráfica. 4 IRC – Juego del Dominó Una vez se ejecuta la aplicación se presenta el inicio del juego. Al inicio se nos presenta el tablero. Figura 1. Tablero del juego. En la interfaz del tablero se encuentran los siguientes elementos: - Etiqueta MATCH. Indica el número de juegos que se han realizado. Para una partida simple indicará en valor 1, en caso de que se juegue a una partida de 100 puntos indicará el número de juegos que se han realizado. Etiqueta ROUND. Indica el número de rondas que se han realizado en ese mismo juego. La distribución de las piezas de cada jugador. Botón NEXT PLAYER. En caso de que uno o mas jugadores sean personas se puede pasar el turno al jugador de su derecha pulsando este botón. Botón PLAY. Para comenzar la partida. Al pulsar este botón aparecerá una ventana para elegir los jugadores (persona, máquina principiante o máquina experta) y el tipo de juego (partida simple o partida a 100 puntos). A continuación se muestra la ventana que aparece al pulsar el botón PLAY. 5 IRC – Juego del Dominó Figura 2. Ventana para elegir los jugadores y el tipo de juego. Una vez se han elegido los jugadores y el tipo de juego comienza la partida. En la figura siguiente mostramos un ejemplo de una partida en desarrollo. Figura 3. Ejemplo de una partida en desarrollo. 6 IRC – Juego del Dominó En caso de que alguno de los jugadores sea una persona se le indica que tiene el turno mediante la aparición de una ventana como se muestra a continuación. Figura 4. Muestra al jugador persona que tiene el turno. En caso de que se juegue a una partida de 100 puntos, al finalizar un juego se muestra una tabla con los puntos que tiene cada jugador. Figura 5. Tabla con los resultados de cada jugador en una partida de 100 puntos. 7 IRC – Juego del Dominó Una vez se acaba la partida se indica el jugador ganador y se da la opción de seguir jugando o abandonar el juego. Figura 6. Ventana de finalización del juego. 8 IRC – Juego del Dominó 5. Referencias - Apuntes de la asignatura de Inteligencia en Redes de Comunicaciones. 9