Artículo creado en 2005.
Resolver Sokoban
El Sokoban es un juego de mecánica muy simple, entretenido si te gustan los rompecabezas, pero (al menos para mi) exasperante cuando te quedas atascado con alguno. Hubo uno especialmente c.br.n (seamos francos), de estos que a primera vista no parecen muy complicados (estos son los peores) y del que lo único que saque fué un brutal calentón de cabeza, vamos, que no lo resolví (no es que los resuelva todos, ya me gustaría, pero es que este...) en fin, que sólo por encontrar la solución de ese Sokoban realicé este simple (simple por bruto) Solver (en castellano sería algo como Resolvedor) que dado un Sokoban te dice si hay solución y los pasos (mínimos) a seguir. Siento si el interface no es muy amigable, de sobras hizo su función.
Debes tener:
- Sokoban.Exe es el programa que resuelve los tableros, la secuencia de botones que tienes que pulsar son:
- Cargar carga el tablero especificado en el archivo Tablero.txt que debe estar en el directorio actual.
- BIni que inicializa el Solver.
- BTodo que inicia el proceso de búsqueda exhaustiva, cuando encuentra una solución se detiene y te lo dice; si no encuentra ninguna también.
- Como va si se toma su tiempo, puedes pulsar este botón para ver en la barra de título como va la búsqueda.
- Paso pulsando sucesivamente este botón se muestra los pasos que se deben darse para resolver el Sokoban.
- Tablero.txt en este archivo debes dar los datos del tablero, su estructura son (en líneas) la siguiente:
- Primera línea cualquier comentario, no se usará para nada esta línea, que será ignorada.
- Segunda línea dos números enteros (separados por un espacio o tabulador) que representan el número de casillas de anchura y de altura del tablero.
- Siguientes líneas por filas y sin separaciones, los dígitos en hexadecimal que indican el contenido de cada casilla (deberá haber tantas líneas como altura tenga el tablero y cada línea tendrá exactamente tantos dígitos como celdas de ancho tenga el tablero). Cada dígito en hexadecimal es la suma de los siguientes valores según se desee "meter" en esa casilla los siguientes elementos (el valor 0 indica que la casilla está vacía):
- 1 indica que la casilla es un muro, se debería rodear todo el tablero con muros.
- 2 indica que es la casilla en la que inicialmente está el cursor, sólo debería indicarse una vez.
- 4 indica que en esa casilla hay una caja que debe ajustarse.
- 8 indica que esa casilla es una de las casillas objetivo de caja. Deberá haber (en caso contrario no habrá solución) al menos tantas casillas objetivo como cajas a ajustar.
La aplicación está programada en Visual C++ usando las MFC.
descargar ejecutable de Resolver Sokoban.
descargar código fuente de Resolver Sokoban.
Opinado el 14/02/10 18:42, valoración 









excelente
¿Te ha gustado? ¡aporta tu opinión!