INTELIGECIA EN REDES DE COMUNICACIONES 5º ING TELECOMUNICACIÓN 2006-2007 TRABAJO FINAL DE LA ASIGNATURA “EL SOLITARIO” ________________________________________________ AUTORES DANIEL F. TAVEIRA MONTEIRO RODRIGO GÓMEZ RODRIGUEZ DAVID TOLEDO NAVARRO IRC – Juego del Solitario 1. Índice 2. Introducción ……………………………… 3 3. Modelado del juego ……………………….. 3 4. Realización del modelo …………………. 6 ……………………………… 9 5. Referencias 2 IRC – Juego del Solitario 2. Introducción Nuestra práctica complementaria consiste en la realización de un juego, el solitario. El solitario es un juego determinista (no interviene el azar), en el que para su resolución se ha utilizado un algoritmo de búsqueda con retroceso (bracktracking). Para el desarrollo del mismo se ha utilizado el lenguaje de programación java. 3. Modelado del juego La estructura de dicho juego se compone de cinco cuadrados colocados en cruz, de los cuales, los cuadrados del exterior cuentan con 9 bolas cada uno, es decir, existe un total de 36 bolas, quedando en el cuadrado interior un hueco. Figura 1. Estructura del juego del solitario. El procedimiento consiste en ir pasando las bolas, en horizontal o vertical, por encima de otra hasta un hueco libre, la bola por la que se pasa encima es eliminada del tablero. Así de forma repetida hasta intentar conseguir el objetivo del juego que es dejar una única bola en el centro del cuadrado interior. En las figuras siguientes se muestra una serie de posibles secuencias del juego: 3 IRC – Juego del Solitario Figura 2. Situación inicial del juego. Figura 3. Primer movimiento. 4 IRC – Juego del Solitario Figura 4. Segundo movimiento. Figura 5. Posible situación final. 5 IRC – Juego del Solitario 4. Realización del modelo La implementación del juego se ha realizado mediante el lenguaje de programación java. El modelado del tablero se ha hecho mediante un array de dos dimensiones cuadrado como se muestra a continuación: int [][]tabla = {{8,8,1,1,1,8,8}, {8,8,1,1,1,8,8}, {1,1,1,1,1,1,1}, {1,1,1,0,1,1,1}, {1,1,1,1,1,1,1}, {8,8,1,1,1,8,8}, {8,8,1,1,1,8,8}}; Los números utilizados tienen la siguiente representación: - El número 8 representa un espacio vacío. El número 1 representa una bola. El número 0 representa un hueco. Para su resolución se ha utilizado un algoritmo de búsqueda con retroceso (bracktracking). Se recorren todos los posibles movimientos realizando llamadas recursivas. Los pasos seguidos en el método (public void resolver()) que implementa el bracktracking son los siguientes: 1- Se recorre la matriz con las fichas. 2- Se busca una posición que valga 1, ya que esto quiere decir que en esa posición hay una ficha. 3- Se comprueba en todos los sentidos, horizontal-derecha, horizontalizquierda, vertical-arriba, vertical-abajo, si podemos hacer un movimiento. Es decir, si en la siguiente posición hay una ficha y en la siguiente de la siguiente no hay ficha. 4- Si se puede realizar el movimiento, se realiza. 5- Se actualiza la matriz de fichas. 6- Se actualiza el área de texto. 7- Se actualiza la matriz con la solución encontrada. 8- Se llama de forma recursiva a este método buscando alguna solución. 9- De vuelta de la llamada recursiva hay que dejar la matriz tal y como estaba antes de la llamada, es decir, como si no se hubiera realizado ningún movimiento. 10- Se borra el movimiento del área de texto. 11- Se realiza lo mismo al paso anterior, pero en todos los sentidos. 6 IRC – Juego del Solitario Para la visualización del juego se ha implementado una interfaz gráfica, también desarrollada en el lenguaje de programación java. La figura siguiente muestra la interfaz gráfica: Figura 6. Interfaz gráfica del juego. En la interfaz se encuentran los siguientes elementos: - Panel de visualización del juego. Panel de visualización de los movimientos realizados. Botón SOLUCIONAR. Al hacer clic sobre el comienza a ejecutarse el juego. Botón <<<<. Disminuye la velocidad en la que se realizan los movimientos. Botón >>>>. Aumenta la velocidad en la que se realizan los movimientos. 7 IRC – Juego del Solitario - Etiqueta donde nos muestra el número de soluciones que se han encontrado. El control de la velocidad en la que se realizan los movimientos se ha llevado a cabo mediante una espera a la hora de mostrar el tablero. Una vez que ha finalizado la búsqueda de una solución se muestra en la ventana un botón con el fin de recorrer los pasos anteriormente realizados. Además se pueden realizar otras posibles búsquedas. Figura 7. Botones para recorrer los pasos anteriores una vez se ha encontrado la solución y encontrar otra posible solución. 8 IRC – Juego del Solitario 5. Referencias - Apuntes de la asignatura de Inteligencia en Redes de Comunicaciones. 9