Subido por Acinom L.D.

Dominó

Anuncio
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
Descargar