Juego 8 Puzzle

Enunciado

El juego 8-puzzle es una versión reducida del 15-puzzle, un juego conocido en muchas partes del mundo, aunque no siempre se conoce por ese nombre. El juego está formado por una caja cuadrada con 8 piezas móviles, también cuadradas, numeradas entre 1 y 8. El objetivo del juego es ordenar las piezas de 1 a 8 realizando el desplazamiento de una pieza a la vez, utilizando el único espacio libre disponible. Las piezas no pueden sacarse de la caja así que no es posible ordenarlas de cualquier forma.

Se quiere hacer una aplicación del juego 8-puzzle en la cual el usuario pueda jugar y además consultar al computador para que le sugiera una jugada.

La aplicación debe permitir al usuario jugar en dos modos: manual e inteligente. En el modo manual el usuario debe poder:

1. Mover las piezas del 8-puzzle según las reglas del juego.
2. Crear un nuevo juego (dejando los números de forma que sea posible llegar a la solución).
3. Sugerir una jugada al computador. En modo inteligente el usuario debe poder:

a. Regenerar el árbol de solución del juego.
b. Visualizar la ejecución paso a paso de la solución del juego, en caso de que con el árbol actual se tenga una.

Para realizar un movimiento el usuario debe hacer clic sobre una de las piezas y, si ésta se encuentra al lado del espacio disponible se mueve a dicha posición. Para sugerir una jugada se utilizará un algoritmo muy sencillo: a partir del estado actual del juego se genera un árbol con los estados alcanzables. La complejidad del juego hace que el número de nodos en el árbol sea exponencial y cada nivel adicional en el árbol multiplica el número total de nodos por casi 2 (en un árbol de altura 20 puede haber cerca de 900.000 nodos). Es por esto que la altura del árbol que se quiere generar debe ser controlada por el usuario. Luego de tener construido el árbol se busca el nodo alcanzable que está más cerca de la solución y la jugada sugerida por el computador es la raíz del árbol que lleva a ese nodo. Todo esto se basa en un valor que se le da a cada estado y que indica qué tan cerca está ese estado al final del juego.

Sin embargo el algoritmo presentado tiene algunos problemas que deben ser tenidos en cuenta. Por una parte no es muy sencillo estimar qué tan cerca se está de la solución en un momento dado: con la métrica utilizada es posible recorrer caminos que parecen estar llevando a la solución pero que realmente llegan a estados con valores cercanos pero que necesitan muchísimas jugadas para convertirse en solución. La solución a esto sería buscar mejores métricas o utilizar algoritmos más inteligentes que no se limiten solamente a buscar en el árbol usando fuerza bruta. Otro problema es que la generación de jugadas no tiene en cuenta que se puede llegar al mismo estado siguiendo diferentes caminos, así que el árbol puede tener muchísimos más nodos que el número de estados posibles del juego. Para solucionar esto el árbol debería ser podado para asegurar que siempre se tome el camino más corto hasta un nodo determinado, pero esto requeriría algoritmos más complicados.

Interfaz

n11 juego8puzzle

Ventana principal de la aplicación