Otras páginas de Rodolfo Valeiras
Heureka!

Manhla

Un programa de ordenador para jugar muchas variantes del Juego del 15.

Introducción

Manhla es un programa para jugar al Juego del 15 y muchas variantes de este conocido rompecabezas. La idea inicial era poder jugar a una variante en la cual el movimiento al hueco no se hace de una pieza adyacente a este, sino según los movimientos del caballo de ajedrez. Podemos decir que en el Juego del 15 normal el movimiento es tipo torre, mientras que en esta variante es tipo caballo. En la siguiente imagen las piezas rodeadas de azul son las que se pueden mover al hueco.

Fig. 1. Una imagen del programa Manhla.

Como cuenta Javier Serrano Mora, esta idea la propone, sin analizarla (Javier sí lo hace), Miguel de Guzmán en su libro Aventuras Matemáticas. Pero la verdad es que yo me sentí impulsado a hacer el programa a través de un pequeño juego eslovaco para viejos ordenadores Atari de 8 bits con el que me tropecé por casualidad. Este juego usa, además del movimiento salto de caballo un tablero de forma irregular. Desconozco si el autor, Milan Zelenay, tomó la idea de algún sitio o es una ocurrencia suya.

Fig. 2. Una imagen del programa Mandarinov Hlavolam.

Además del juego clásico y la del salto de caballo, Manhla incluye muchas otras variantes (y es fácil añadir más). Se muestra aquí un ejemplo.

Fig. 3. Otro tipo de juego

Descarga e instalación

Manhla se distribuye en un paquete zip y no requiere instalación, solamente descomprimirlo y hacer doble clic en el fichero ejecutable, que para Windows es manhlaw.exe (es posible que solo se vea manhlaw). Se puede distribuir libremente de acuerdo con la licencia CC BY. Para los interesados, también está disponible el código fuente en el lenguaje de programación Euphoria 3.1.1.

Es posible que al hacer doble clic sobre manhlaw.exe no aparezca una imagen parecida a la primera de esta página web, sino algo como similar a esto:

Fig. 4. Manhla en modo de texto

Esto podría indicar que no está instalado Java en su sistema. Puede asegurarse siguiendo estas instrucciones. Aunque, como se ve en la imagen anterior, Manhla funciona en modo de texto sin requerir Java, la experiencia es bastante peor, así que se recomienda su instalación.

Manhla también funciona en Linux y en MS-DOS (o emuladores como DOSBox). El ejecutable para Linux es manhla y para MS-DOS MANHLAD.EXE. En Linux hay que tener en cuenta que el procedimiento de hacer doble clic sobre el fichero ejecutable solo es válido para la interfaz japi, de modo que si no está disponible Java el programa fallará silenciosamente. En ese caso habría que ejecutarlo desde una línea de órdenes (véase el manual avanzado).

Manhla funciona con diferentes interfaces de las cuales hemos mostrado ya dos: japi y texto. El interfaz japi es en modo gráfico y está basado en la biblioteca japi, a su vez basada en el toolkit AWT de Java. Esta es la interfaz recomendada, que se usará por defecto, y en lo sucesivo, mientras no digamos otra cosa, será a la que nos referiremos.

El Juego del 15

Manhla es un programa para ordenador de tipo juego de ingenio o puzle, pero no está limitado a un solo juego. La primera vez que se ejecuta muestra el llamado Manda aleatorio, pero hay muchos más, entre ellos el clásico Juego del 15. Para seleccionarlo, elija en el menú Juego la opción Conjunto de juegos y el submenú Clasicos. Después elija Juego del 15 con Juego > Elección de juego (o pulsando la tecla S).

Fig. 5. El Juego del 15

El manejo del Juego del 15 es muy sencillo: haga clic sobre la pieza que quiera mover (una de las que estén pegadas al hueco). Cuando consiga ponerlas todas por orden, de arriba abajo y de izquierda a derecha (la pieza 1 arriba a la izquierda, el hueco abajo a la derecha) habrá ganado. El juego se pone entonces en el llamado modo de estudio (aparece una E en la esquina superior derecha de la ventana. Para volver a jugar, elija Juego > Reinicio o pulse I. Esto desordernará las piezas de forma aleatoria.

Si lo prefiere puede también mover las piezas del Juego del 15 usando el teclado, concretamente las teclas de movimiento del cursor rotuladas con flechas. Para cerrar el programa puede elegir Juego > Terminar, pulsar T o Q o incluso cerrar la ventana de la forma habitual (haciendo clic en la esquina o con Alt-F4).

Otros juegos

Los juegos de Manhla están agrupados en familias o conjuntos. La primera vez que se ejecuta, la familia seleccionada es Manda, que reúne los juegos con movimiento de salto de caballo. Si estamos con el Juego del 15, el conjunto seleccionado será Clasicos (por razones técnicas no se usan tildes en los nombres de conjuntos de juegos). Podemos seleccionar otro juego de este conjunto con Juego > Elección de juego o pulsando la tecla S. El conjunto Clasicos tiene las variantes 3×3 y 5×5 del Juego del 15. También se puede cambiar de juego dentro del conjunto actual pulsando N (juego siguiente) o P (juego anterior). Para elegir a un juego de otro conjunto hay que cambiar antes de conjunto. Automáticamente se cargará un juego de ese conjunto (el primero de la lista, si no se ha jugado antes ninguno). Si tiene un juego a medio resolver no perderá el trabajo realizado cambiando de juego o incluso cerrando el programa, ya que se guarda en el disco el estado de cada juego (salvo que se cambie la opción correspondiente (Opciones > Guardar y recuperar estado o G).

El conjunto de juegos más numeroso se llama Bloques_y_paredes. Un bloque es una casilla dentro del rectángulo formado por los bordes del tablero pero que no interviene en el juego, ya que no puede haber una pieza encima. Una pared es una barrera entre dos casillas que impide el movimiento entre esas dos casillas. En el siguiente juego de ejemplo hay un bloque (arriba a la izquierda) y una pared entre las casillas 4 y 5.

Fig. 6. 3x3 con bloque y pared

En este conjunto hay también juegos gráficos, es decir, en los que las piezas no están numeradas sino que el objetivo es formar un dibujo con ellas. Para ver este objetivo se puede usar Juego > Ver objetivo o tecla O.

Fig. 7. 4x3 con bloques y paredes (gráfico)

En este tipo de juegos es frecuente que haya piezas idénticas. Obviamente estas piezas son intercambiables.

Como se vio al final de la introducción(figura 3), los juegos no están restringidos a una retícula cuadrada, sino que sus piezas pueden disponerse de otra forma. En este caso lo habitual es que se muestre la relación entre las casillas mediante líneas. Por ejemplo, en este juego del conjunto Reloj, Reloj - 1, las piezas se mueven en círculo y además por las líneas que unen 11-2, 12-5 y 1-8.

Fig. 8. Reloj - 1

Opciones

Ya vimos antes la opción Guardar y recuperar el estado que nos permite continuar resolviendo un juego que habíamos dejado a la mitad. Otras opciones son Resaltar piezas bien colocadas y Resaltar piezas que se pueden mover. Las dos son bastante autodescriptivas. La primera destaca de alguna forma las piezas que están en su posición final. Por ejemplo, la siguiente figura muestra el juego Manda 15 con la fila superior ya colocada.

Fig. 9. Manda 15 con cuatro piezas bien colocadas.

La otra opción, Resaltar piezas que se pueden mover, destaca en cada momento las piezas que se moverán si hacemos clic sobre ellas. En este caso hay una diferencia entre usar el menú o la tecla correspondiente, M. Usando el menú solo se usa un color (normalmente azul); pulsando M se alterna entre el uso de un color o de dos (normalmente azul y rosa). El segundo color solo es una ayuda para los usuarios que prefieran usar el teclado, ya que indica que esa pieza puede moverse pulsando una tecla de movimiento después de pulsar Control (no a la vez, después). En la siguiente imagen, del juego Cuadriagonal 2, podemos mover la pieza 1 con izquierda (la tecla marcada con una flecha apuntando hacia la izquierda), la pieza 6 con arriba y la pieza 8 pulsando Control y después arriba. En cualquier caso, todas ellas se pueden mover haciendo clic encima con el ratón.

Fig. 10. Cuadriagonal 2.

Lista de movimientos y soluciones

En las figuras 4 y 5 puede verse, debajo del nombre del juego un 0. Se trata del un contador del número de movimientos realizados desde que se inició o reinició por última vez el juego. Algo no obvio mirando los menús y que además solo puede hacerse con el teclado es que pueden deshacerse los movimientos hechos. Para ello se puede pulsar la tecla B o la tecla retroceso (la tecla alargada con una flecha hacia la izquierda que suele usarse para borrar el carácter recién tecleado). Supongamos que hemos hecho cinco movimientos y nos damos cuenta de que el último era erróneo. Por supuesto, podemos volver a hacer clic sobre la última pieza movida, pero habremos hecho dos movimientos superfluos. Si nos interesa resolver el juego en el menor número posible de movimientos deberíamos en cambio deshacer el último movimiento pulsando B o retroceso. En el contador, que antes mostraba «5» ahora se verá «4 / 5». Si pulsamos otra vez B o retroceso se verá «3 / 5». Esto indica que esos dos movimientos no se han eliminado aún: podemos rehacerlos pulsando F o Intro. En cambio si hacemos un movimiento nuevo, esa cola pendiente se perderá y el contador mostrará «4». El contador con un solo número indica que estamos al final de la lista de movimientos.

Se puede ir directamente al principio o al final de la lista de movimientos. Para ir al principio, Juego > Deshacer todo o tecla < (menor que, tecla a la izquierda de la Z sin pulsar a la vez Mayúsculas)); para ir al final, Juego > Rehacer todo, tecla > (mayor que, la misma tecla de antes pero con Mayúsculas) o tecla Z. Si el juego es de posición inicial aleatoria, no es lo mismo pulsar < que I porque en el segundo caso se genera una posición distinta (y en cualquier caso, I o Reinicio destruye la lista de movimientos).

Como acabamos de decir de pasada, hay dos clases de juegos en Manhla: los de posición inicial aleatoria (como el Juego del 15) y los de posición inicial fija, como El rompecabezas del mandarín (Manda). La primera vez que cargamos un juego del segundo tipo aparecerá a la derecha del contador una interrogación entre paréntesis: «(?)». Esto nos indica que no se sabe (o que Manhla no sabe) cuántos movimientos son necesarios para resolver ese juego. Más propiamente, nos indica que no hay ninguna solución grabada para ese juego. La primera vez que se resuelva un juego de posición inicial fija se grabará la solución en el disco. Esto sucede incluso cuando la opción Guardar y recuperar estado no esté activada. La longitud de la solución grabada es la que se indica entre paréntesis. Si se vuelve a resolver el juego en menos movimientos, la nueva solución sustituirá a la antigua: no se guarda más que una solución para cada juego (la más corta).

Si pulsamos R empezarán a reproducirse los movimientos de la lista hasta el final (obviamente, si ya estamos al final de la lista de movimientos no pasa nada). Es lo mismo que pulsar sucesivamente Intro o F. Podemos parar la reproducción automática pulsando cualquier tecla.

Cuando el juego actual es de posición inicial fija y siempre que estemos al principio de la lista de movimientos (el contador marcará 0) podemos pulsar X para cargar la solución y reproducirla. Esto destruye los movimientos que se hayan hecho antes.

Plataformas e interfaces

Como se dijo en la sección Descarga e instalación Manhla se ejecuta en tres plataformas: Windows, Linux y MS-DOS. Además, dispone de cinco interfaces, es decir cinco presentaciones: simple, texto, japi, grafdos y vga. Tanto simple como texto funcionan en modo de texto y están disponibles en las tres plataformas; japi, grafdos y vga son gráficas y están disponibles en Windows y Linux la primera (con Java instalado) y en MS-DOS las otras dos. Profundizamos más en estos asuntos en el manual avanzado. Aquí ejecutamos Manhla para MS-DOS con la interfaz vga usando js-dos. Haciendo clic en el letrero se puede jugar a Manda 11. Es como un Juego del 15 con movimiento de salto de caballo. Las piezas con un círculo son las que se pueden mover. Las piezas bien colocadas se marcan con un cuadradito blanco.

Manual avanzado

Aún quedan muchas cosas que comentar acerca de Manhla, aunque posiblemente no sean de interés para la mayoría de usuarios, por lo que he preferido ponerlas aparte en un manual avanzado.

Agradecimientos

A Milan Zelenay, autor del juego que me inspiró Manhla.

A Javier Serrano Mora, que ya había estudiado rompecabezas parecidos y del que he tomado el juego Cuadrojo.

A Javier Santos, paciente betatester, creador de varios de los juegos incluidos y desarrollador de interesantes métodos de resolución.

A Robert Craig, creador inicial del lenguaje de programación Euphoria y responsable de la (antigua) versión 3.1.1 que yo he usado.

A Merten Joost, autor de japi.

A Shian Lee, autor de Lib2 para Euphoria (versión 1.41), que incluye japi 1.0.6 para Euphoria.

A Graeme Burke, Daniel Kluss y Pete Eberlein, autores de bibliotecas para Euphoria (HRMouse.e, CPUTIME.E y ASM.E) que he usado en Manhla.

A kues, creador de la textura que he usado como fondo en los juegos Cuadriagonal 1 y Cuadriagonal 2. De acuerdo con las condiciones de uso, añado aquí este enlace: Background photo created by kues - www.freepik.com.

Al creador del dibujo de la veleta que uso en el juego Veleta, cuya licencia de uso requiere que añada aquí:

Icons made by Freepik from www.flaticon.com

A los demás creadores de tipografías, texturas y dibujos distribuidos a través de Internet con licencia de uso libre que he usado en el programa.