Manhla

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

Manual avanzado

Manhla en los distintos sistemas operativos

Manhla se puede ejecutar en tres sistemas operativos: Windows, Linux y MS-DOS. Con emuladores de MS-DOS como DOSBox, es posible usarlo también en otros entornos (incluso dentro de una página web, como se ve en la primera parte de este manual). De todas formas, la opción más recomendable es usar la interfaz japi, solo disponible en Windows y Linux.

Manhla en Windows

En Windows se puede ejecutar el programa haciendo doble clic sobre el icono del fichero manhlaw.exe (puede verse solo manhlaw). Manhla intenta primero ejecutarse usando la biblioteca japi, lo cual requiere tener Java instalado en el sistema. Si no puede (seguramente porque no está instalado Java) usará la interfaz texto.

Desde la consola (símbolo del sistema) también puede especificarse una interfaz con la opción /i (o /I), por ejemplo con la orden:

manhlaw /i texto

Manhla en Linux

En Linux el fichero ejecutable es manhla. Igual que en Windows, primero se intenta usar la biblioteca japi (que requiere Java) y si no es posible (siempre que se esté ejecutando desde una consola virtual o emulador de terminal) se usará la interfaz texto.

Las opciones para ejecutar Manhla desde un emulador de terminal son las mismas, pero en Linux se preceden de un guion (-) en vez de una barra (/):

manhla -i texto

Desde una consola virtual (en modo de texto real, normalmente después de haber pulsado Ctrl-Alt-Fn) no está disponible, obviamente, la interfaz japi.

Manhla en MS-DOS

En MS-DOS el fichero ejecutable es MANHLAD.EXE. La forma normal de ejecutarlo será escribiendo en la línea de órdenes:

MANHLAD

En MS-DOS, Manhla intenta primero ejecutarse en el modo gráfico de más resolución (interfaz grafdos). Si no puede, intenta un modo gráfico de menos resolución (interfaz vga). Si tampoco puede, usa la interfaz texto. Se puede especificar una interfaz así:

MANHLAD /I vga

En MS-DOS hay juegos que no están disponibles, en concreto aquellos que están concebidos para usar piezas no numéricas.

Opciones desde la línea de órdenes

Si ejecutamos el programa desde una línea de órdenes (por ejemplo, la consola de Windows) con un argumento incorrecto se nos muestra el modo de uso, que es igual en todas las plataformas salvo por el uso de '-' o '/':

manhlaw ?
MODO DE USO:
   manhlaw [/i interfaz] [/c conjunto] [/p puzzle] [/d dir] [/u usuario] [/v]

La opción v solo muestra el número de versión, ignorándose las demás. Es la única que no tiene argumento.

La opción i selecciona una interfaz entre las disponibles, saltándose el orden de preferencia explicado antes. Puede ser la única forma de usar las interfaces texto o simple. Si escribimos /i (o -i en Linux) sin argumento se muestra la lista completa de interfaces.

Las opciones c y p deben usarse de forma coordinada. Como se explicó en la primera parte del manual, Mahnla ejecuta juegos o puzzles organizados por conjuntos. Para indicar un juego concreto hay que incluir también el conjunto al que pertenece. Por ejemplo, si queremos ejecutar el juego quince del conjunto Clasicos, escribiremos:

manhlaw /p quince /c Clasicos

El orden de las opciones es irrelevante, así que se puede escribir antes el conjunto. El nombre del conjunto es el de un directorio y el del juego el de un fichero con extensión «.puz». La forma más sencilla de ver cuáles son los conjuntos y juegos disponibles es desde el propio programa con la interfaz japi. Desde la línea de órdenes se puede hacer así:

manhlaw /c
Los conjuntos de juegos disponibles son:
   Bloques_y_paredes,
   Clasicos, [...]

manhlaw /c Clasicos /p
Los juegos disponibles en el conjunto Clasicos son:
   24,
   ocho, [...]

Si usamos /p sin un nombre de conjunto normalmente se mostrarán los juegos del último conjunto elegido. (En realidad, los del último conjunto elegido con la opción Guardar y recuperar estado activada.) Si no cambiamos de conjunto, se puede omitir:

manhlaw /c Clasicos /p quince

Se ejecuta Manhla con el Juego del 15 (fichero quince.puz) del conjunto Clasicos.

manhlaw /p ocho

No hace falta incluir el conjunto, porque ocho también pertenece a Clasicos.

Hay otra forma de usar la opción p sin la c: poniendo como argumento la ruta completa hasta el fichero puz (absoluta o relativa; la terminación .puz puede omitirse). Por ejemplo, podemos ejecutar:

manhlaw /p puzzles\Cuadriagonal\cuadraspas.puz

En todos los ejemplos anteriores hemos supuesto que estamos en el directorio raíz del programa, donde se encuentran el ejecutable y los demás ficheros y subdirectorios. Para ejecutar Manhla desde otro directorio hay que usar la opción d seguida de la ruta (absoluta o relativa) al directorio del programa. Ejemplo (este de Linux):

Juegos/Manhla/manhla -d Juegos/Manhla

La opción u indica un nombre de usuario, o más exactamente, una ruta a un directorio de usuario. Manhla graba algunos ficheros y lo hace en dicho directorio, que si no se le dice lo contrario, es el subdirectorio usuario del directorio principal del programa. La opción u permite usar Manhla por más de una persona, cada una con sus opciones y soluciones independientes. El paquete ya incluye el directorio usuario vacío (hasta que se ejecuta Manhla por primera vez), que debe tener permiso de escritura. Si se va a usar otro se debe crear antes, el programa no lo hace.

Instalación a nivel de sistema

En la primera parte del manual dijimos que Manhla no necesita instalación (es una aplicación portátil), pero eso no quiere decir que no se pueda instalar para todos los usuarios del sistema si se desea. Eso sí, no se incluye ningún procedimiento automático de instalación, habría que hacerlo a mano.

La instalación a nivel de sistema tiene tres partes:

  1. Copiar los distintos ficheros y directorios del programa a un sitio al que puedan acceder en modo de lectura todos los usuarios. Esto solo se podrá hacer con una cuenta de administrador.
  2. Cada usuario que vaya a usar el programa, crear un directorio vacío en el que pueda escribir (el directorio de usuario).
  3. Ya se podría llamar al programa desde la línea de órdenes, pero es mejor crear un acceso directo o lanzador.

Pondré un ejemplo para Linux y otro para Windows 10. Obviamente, esto está pensado para usuarios relativamente avanzados.

Ejemplo de instalación en Linux

Con la cuenta root copiamos el fichero manhla a un sitio apropiado para ficheros ejecutables y accesible para todos los usuarios, como por ejemplo /usr/games/. Después creamos un directorio manhla en otro sitio como /usr/share. Copiamos a /usr/share/manhla/ el fichero japi.so y los directorios imag y puzzles. (De imag podríamos eliminar el subdirectorio grafdos.)

Ya con una cuenta de usuario normal, creamos el directorio de usuario, por ejemplo ~/.manhla. Empezando el nombre por punto pasará más desapercibido. Si queremos podemos crear varias carpetas de usuario en la misma cuenta.

Ya se podría ejecutar Manhla así:

manhla -d /usr/share/manhla -u ~/.manhla

Pero lo más cómodo sería crear un lanzador (fichero .desktop) u otro elemento similar.

Ejemplo de instalación en Windows 10

Con una cuenta de administrador, creamos el directorio Manhla en "C:\Program Files (x86)" y en él copiamos los ficheros manhlaw.exe y japi.dll y los directorios imag y puzzles. (De imag podríamos eliminar el subdirectorio grafdos.)

Con una cuenta de usuario normal creamos un directorio llamado Manhla en el espacio de usuario, por ejemplo en C:\User\rodov\Documents.

Ya se podría ejecutar Manhla desde la aplicación Símbolo del sistema con la orden:

"C:\Program Files(x86)\Manhla\manhlaw" /d "C:\Program Files(x86)\Manhla" /u C:\Users\rodov\Documents\Manhla

Pero sería mucho mejor crear un acceso directo en el escritorio u otro elemento similar.

Tipos de juegos

Principalmente hay tres tipos de juegos en Manhla: los basados en un tablero cuadriculado con movimiento clásico; los basados en un tablero cuadriculado pero con movimiento tipo caballo de ajedrez; y aquellos cuyas posiciones (casillas) tienen una estructura no cuadriculada, indicándose las relaciones entre ellas mediante líneas.

Para fijar la nomenclatura, diferenciaremos las piezas de las casillas o posiciones en las que se colocan las piezas. En cada momento estarán todas las casillas ocupadas por una pieza menos una.

Son del primer tipo todos los juegos de los conjuntos Clasicos y Bloques_y_paredes. Los del segundo contienen bloques, es decir posiciones en el interior del tablero que no son casillas (no pueden ir piezas a ellas) y paredes, barreras bidireccionales entre dos casillas adyacentes.

Son del segundo tipo los juegos del conjunto Manda y del tercero los de los demás conjuntos. Por ejemplo, los juegos del conjunto Reloj están basados en un dodecágono con algunas líneas adicionales de conexión. Se pueden ver imágenes de todos estos tipos de juegos en la primera parte del manual.

Todos los juegos tienen una posición final bien definida (el objetivo) que podemos ver pulsando la tecla O (es la letra, no el número). En cuanto a la posición inicial, existen dos clases de juegos: los que la tienen también fija y los que la tienen variable o aleatoria. La tecla I destruye los movimientos hechos y coloca el juego en la (o una) posición inicial.

Manejo de los juegos

La forma de mover las piezas depende de la interfaz, aunque muchas cosas son comunes. Lo más cómodo es usar el ratón, que está disponible en japi y en las interfaces grafdos, vga y texto de MS-DOS: simplemente hay que hacer clic encima de la pieza que se quiere mover. Qué piezas son las que se pueden mover depende de las reglas de cada juego o puzzle concreto. Normalmente no hará falta, pero se puede hacer que se resalten dichas piezas pulsando la tecla M. La forma en que se resaltan las piezas depende de la interfaz y del juego.

En las interfaces simple (en todas las plataformas) y texto en Windows y Linux, Manhla no aprovechará el ratón aunque esté instalado uno. En estos casos la única forma de mover las piezas y usar en general el programa será el teclado. También en los casos en que está disponible el ratón se puede usar el teclado, así que puede ser interesante saber cómo hacerlo. Seguramente lo más importante es saber cómo terminar el juego: con la tecla T o Q (¡Ojo! No se pide confirmación.)

La interfaz simple es distinta de las otras en el sentido de que la entrada se realiza a través de una línea de órdenes. Después de mostrar el tablero aparece una línea con el nombre del juego, el número de movimientos realizados entre corchetes y los caracteres -> (el prompt) tras los cuales el cursor indica dónde se escribirá nuestra orden. Todas las órdenes hay que terminarlas pulsando la tecla Intro; hasta entonces no se leen y antes de eso podemos usar la tecla retroceso para rectificar. En el caso de la interfaz simple no es del todo correcto decir que se termina el juego pulsando la tecla T, sino mediante la orden T, es decir, escribiendo T y pulsando Intro.

La mayoría de los juegos tienen piezas numéricas y se puede usar su número para moverlas. En simple podemos mover una pieza escribiendo su número (y pulsando Intro). En todas las demás interfaces (incluidas las gráficas, como japi) podemos hacer lo mismo, pero sin pulsar Intro. En cuanto no haya ambigüedad del número al que nos referimos y la pieza se pueda mover, se producirá el movimiento. Por ejemplo, en la siguiente posición del Juego del 15, si pulsamos 8 se moverá inmediatamente. Pero si pulsamos 1 podemos referirnos al 14 o al 11. Al pulsar 4 o 1 resolveremos la duda y se producirá el movimiento.

Fig. 1. El Juego del 15 con la interfaz texto

En algunos casos hay que deshacer la ambigüedad de otra forma. Veamos esta otra posición.

Fig. 2. Otra posición del Juego del 15

Si pulsamos 1 podemos referirnos a 1 o a 12. Pulsando después 2 desharemos la duda a favor del 12; pero, ¿y si queremos mover la pieza 1? En ese caso hay que indicar que el número ya está terminado pulsando . (punto).

Hay otra forma de mover las piezas con el teclado, aunque esta depende en parte de los juegos y de la interfaz. En la mayoría de casos (dejando aparte la interfaz simple), en los juegos con movimiento clásico se pueden mover las piezas con las teclas de dirección, marcadas con flechas. Y en los juegos con movimiento tipo caballo de ajedrez, con dichas teclas solas o acompañadas (o precedidas en el caso de japi) de Control.

En el primer tipo de juegos es bastante obvio qué pieza mueve cada tecla. En el segundo no. Lo explicaré con un ejemplo del juego Manda aleatorio, con la interfaz texto en un emulador de terminal de Linux.

Fig. 3. Manda aleatorio con el hueco en el centro

En este tipo de juegos hay momentos en que se pueden mover hasta ocho piezas, como es el caso de la figura anterior. Está activada la opción de resaltar las piezas que se pueden mover, que se ven de color azul o magenta. Las piezas azules se mueven con las teclas de dirección solas, las magentas acompañadas de Control. Ahora bien, si queremos mover, por ejemplo la pieza 16, ¿debemos pulsar Derecha o Abajo? En realidad eso se define en cada juego, pero el criterio que yo he seguido es que haya que usar la tecla correspondiente a la dirección con respecto a la cual la casilla está más alejada de su objetivo (el hueco). Así, horizontalmente 16 está dos casillas alejada del hueco, mientras verticalmente está alejada una casilla. Usaremos Derecha como si la pieza se moviera horizontalmente. Visto de otra forma, si trazáramos una línea recta desde el 16 hasta el punto, estaría más cerca de la horizontalidad que de la verticalidad. El siguiente esquema muestra qué tecla hay que usar para cada posición relativa. (El hueco está en el centro.)

Fig. 4. Esquema de uso de las teclas de dirección

Con respecto al uso de estas teclas y combinaciones de teclas hay que hacer algunas matizaciones. La primera es que en la interfaz japi la pulsación de Control no es simultánea a la tecla de dirección, sino anterior. Eso no quiere decir que sea obligatorio soltar Control antes de pulsar la tecla de dirección. Por ejemplo, para mover la pieza 18 en la figura 3 (interfaz texto) seguiremos la siguiente secuencia de acciones:

En el caso de japi podemos hacerlo de la misma forma. La diferencia la notaremos cuando intentemos dos movimientos seguidos con Control. Por ejemplo, en texto, si después de la tercera acción de la lista anterior pulsamos Izquierda, la pieza 18 vuelve a su sitio. Eso mismo en japi movería la pieza 23. La razón es que al pulsar Derecha es como si soltáramos Control. En japi, para mover la pieza 18 y luego devolverla a donde estaba habría que hacer:

La segunda matización es que en algunas situaciones no se pueden usar las combinaciones Control + Tecla de dirección en la interfaz texto (como en una consola virtual de Linux o en algunas versiones de Windows 10) por lo cual se ha dispuesto un conjunto alternativo de teclas. La idea es sustituir las teclas de dirección por las teclas alfabéticas wasd, como se hace en muchos juegos de acción, y Control por mayús, lo que genera las versiones mayúsculas. El siguiente esquema muestra cómo usar este conjunto alternativo para mover las piezas en un juego con movimiento tipo caballo de ajedrez:

Fig. 5. Teclas alfabéticas alternativas

Este conjunto alternativo solo está disponible para las interfaces texto y simple.

Los demás juegos pueden también usar los conjuntos de teclas descritos, pero eso depende de cada uno. En el caso de que algunas piezas se puedan mover sin pulsar Control y otras pulsándolo, pueden diferenciarse con dos colores distintos al pulsar M. Así, la tecla M conmuta entre tres estados: destacar las piezas que se pueden mover usando un color; destacar las piezas que se pueden mover usando dos colores; y no destacar las piezas que se pueden mover.

Además de para mover las piezas se puede (o debe) usar el teclado para otras acciones. He aquí una lista (algunas cosas están pendientes de explicar).

t o q
Terminar el programa
e
Pasar al modo de estudio
r
Reproducir la lista de movimientos desde la posición actual
i
Reiniciar el juego
o
Mostrar el objetivo
p
Cargar el juego anterior del conjunto actual
f o Intro
Avanzar un movimiento por la lista de movimientos
g
Activar o desactivar la opción de guardar el estado al cambiar de juego o terminar
h o ?
Describir el juego actual (no en japi)
k
Definir la siguiente macro
<
Ir al principio de la lista de movimientos
> o z
Ir al final de la lista de movimientos
x
Reproducir la solución grabada
c
Cambiar al siguiente conjunto de juegos
v
Activar o desactivar la opción de ver las piezas bien colocadas
b o retroceso
Retroceder un movimiento por la lista de movimientos
n
Cargar el juego siguiente del conjunto actual

Si se pulsa una tecla sin ninguna función asignada se muestra una pequeña ayuda general sobre el manejo del programa. Salvo en la interfaz simple, las teclas alfabéticas pueden estar en minúscula o en mayúscula. En el apartado de cada interfaz se explicarán las particularidades de cada una al respecto.

Uso de la interfaz japi

Si es posible se recomienda usar la interfaz japi, que es la de manejo más intuitivo. Además, algunas características del programa solo están disponibles para esta interfaz.

El manejo del juego se hace por medio del ratón, haciendo clic encima de la pieza que queremos mover. Qué piezas son las que se pueden mover depende de las reglas de cada juego o puzzle concreto. Normalmente no hará falta, pero se pueden resaltar dichas piezas con una opción del menú Opciones (la tecla M es un atajo). La forma en que se resaltan las piezas depende del juego. Si se hace clic encima de una pieza que no se puede mover aparece debajo del tablero el texto «Ese movimiento no es posible.»

Para cambiar de juego podemos usar P, N y C, como en el resto de interfaces (aunque no se corresponden con elementos de los menús). Pero en este caso se puede elegir tanto el conjunto como el juego dentro de este sin tener que ir pasando por todos. Dentro del menú Juego, la opción Conjunto de juegos sirve para elegir uno de ellos. La selección actual aparece marcada con un asterisco. Al cambiar de conjunto se carga el último juego de ese connunto que se usó, o (la primera vez) el primero de ellos. La opción Elección de juego (que tiene el atajo de teclado S) abre una ventana de selección.

Fig. 6. Ventana de selección de juego

A la izquierda vemos una lista de todos los juegos del conjunto actual. Si es larga (como sucede con Bloques_y_paredes) no se verá entera de una vez. Para movernos por la lista y cambiar el juego seleccionado podemos usar la barra de desplazamiento vertical, hacer clic con el ratón en un nombre o pulsar las teclas Arriba, Abajo, Inicio o Fin. El juego seleccionado aparece descrito abajo mediante un texto y a la derecha se puede ver una imagen. El nombre de la lista es en realidad el de un fichero (sin la terminación .puz). El título completo del juego seleccionado aparece arriba. Para elegir definitivamente un juego y cargarlo podemos pulsar el botón Aceptar o, alternativamente, pulsar la tecla Intro o hacer doble clic sobre uno de los nombres de la lista. El botón Cancelar es para cerrar la ventana sin cambiar de juego (alternativamente podemos pulsar Esc o cerrar la ventana de forma estándar).

Antes mencionamos una forma de mover las piezas mediante su número. Pero como vemos en la figura 6, en la interfaz japi no todos los juegos tienen piezas numéricas. También vemos en esa imagen que puede haber piezas idénticas (que normalmente serán equivalentes en cuanto a la solución). Independientemente de su aspecto, todas las piezas están identificadas por un número único, que normalmente no es visible, pero que podemos hacer que lo sea con la tecla J. Esto nos permitirá mover las piezas por su número aun en el caso de piezas no numéricas. Si pulsamos O para ver el objetivo se mostrará este, pero sin los números.

Fig. 7. Juego 4x3 con paredes - 6 (gráfico) con las piezas identificadas numéricamente

Un truco que solo existe en la interfaz japi es que podemos averiguar qué pieza va a una casilla haciendo clic sobre ella después de pulsar Control. En el caso de piezas equivalentes se dicen todas. Por ejemplo, si hacemos Control y clic sobre la casilla donde está la pieza 10 en la figura 7, aparecerá el texto: «Ahí va una de las piezas: 9 o 10».

El sistema de menús de la interfaz japi se maneja de la forma habitual con el ratón, pero es posible hacerlo también con el teclado. Para ello hay que empezar pulsando F10. Seguramente aparecerá el texto «La macro no está definida» porque esa tecla tiene otro uso en Manhla. Después nos moveremos por los menús con las teclas de dirección y elegiremos una opción con Intro.

La definición y uso de macros se explicará en una sección aparte donde se dirán las diferencias entre las interfaces.

Uso de la interfaz texto

Las interfaces simple y texto usan un modo de texto lo que implica que estamos limitados a un conjunto pequeño de caracteres. En los juegos basados en una cuadrícula no es un gran inconveniente, pero en los que hay líneas de conexión puede ser difícil dibujarlas.

Una limitación común a simple, texto y también a las interfaces gráficas de MS-DOS es que las piezas se representan siempre con un número. Esto es un problema en el caso de juegos como el representado en las figuras anteriores. Por ejemplo, este es el aspecto de dicho juego, 4x3 con paredes - 6 (gráfico), en su posición inicial usando la interfaz texto.

Fig. 8. Juego 4x3 con paredes - 6 (gráfico) en la interfaz texto

Se pierde en gran parte del sentido del reto al desaparecer la información de su aspecto gráfico. Además, puede haber situaciones en que no se pueda mover una pieza escribiendo su número. Si, desde la posición inicial movemos 11 y 9, quedarán dos piezas 9 que se pueden mover, pero solo la de la izquierda la podremos mover pulsando 9 (la otra se podrá mover en texto con la tecla Izquierda o a; más adelante veremos cómo hacerlo en simple). En las interfaces mencionadas no se pueden ver los números de identificación (no funciona la tecla J).

La función equivalente a la opción Ayuda > Información de japi se obtiene pulsando H o ?. No hay una tecla concreta que corresponda a Ayuda > Manejo, sino que esa información aparece cuando se pulsa una tecla sin una función asignada (por ejemplo, J).

En MS-DOS la interfaz texto tiene la ventaja de aprovechar el ratón para hacer clic en la pieza a mover, cosa que no sucede en Windows o Linux. En cualquier caso sigue estando disponible el control mediante teclado.

Uso de la interfaz simple

En el apartado anterior se han comentado limitaciones de la interfaz texto que comparte con simple. También, anteriormente hemos mencionado las particularidades de que las teclas alfabéticas deben escribirse obligatoriamente en minúscula y ser seguidas de la pulsación de Intro. En realidad toda la entrada en esta interfaz se hace a través de un modo tipo línea de órdenes, así que siempre hay que pulsar Intro al final, incluyendo para escribir un número de pieza o una de las letras W, S, A, D (con o sin Mayús).

El problema mencionado antes de dos piezas con el mismo número se puede resolver con una tecla de dirección (en este caso sería mejor decir una orden de dirección): w (equivalente a Arriba), s (Abajo), a (Izquierda), d (Derecha), W (Control-Arriba), S (Control-Abajo), A (Control-Izquierda), o D (Control-Derecha). Y todavía existe un tercer método para indicar el movimiento a realizar: las órdenes arr, aba, izq, der, c-arr, c-aba, c-izq, c-der, con sentidos obvios.

Uso de las interfaces grafdos y vga

Las interfaces grafdos y vga son las dos interfaces gráficas disponibles para MS-DOS. La segunda funciona en modo VGA, con una resolución de 640×480 y 16 colores. La primera funciona en un modo SVGA con una resolución de 1024×768 y 256 colores.

A pesar de ser interfaces gráficos, Manhla solo usa piezas numéricas en MS-DOS, razón por la cual no se han incluido juegos como 4x3 con paredes - 6 (gráfico). Aunque es posible hacerlo, no parece tampoco muy recomendable usar estos juegos en simple o texto en Windows o Linux.

El manejo del programa en las dos interfaces gráficas de MS-DOS es parecido al de texto, puesto que no hay menús y hay que usar las mismas teclas. Las piezas se mueven con el ratón o las teclas de dirección (y Control si es necesario).

Modo de estudio

El modo de estudio está pensado para que el usuario analice el juego partiendo de la posición final. Se accede a él pulsando E o, en japi, con una opción de menú. También se accede de forma automática al resolver el juego. En modo de estudio aparece una E en la esquina superior derecha y no es posible resolver el juego: no saldrá el mensaje de resolución ni, en los casos de posición inicial fija, se guardará la solución, ya que no se ha partido de dicha posición inicial.

Si, en modo de estudio, encontramos una secuencia útil, que realiza, por ejemplo un doble intercambio de piezas (véase más adelante), se puede grabar en forma de macro. Podemos considerar el modo de macro, al que se accede pulsando K, como un submodo del modo de estudio. Veremos esto con más detalle en el siguiente apartado.

Macros

Las macros son series de movimientos que se graban en el disco. Cada juego puede tener hasta doce macros, una por cada tecla de función.

Posiblemente el usuario no vea la necesidad de usar macros y resuelva muchos juegos sin ellas. El autor solo las ha usado en 4x3 con paredes - 1 y sin este juego concreto posiblemente no existirían.

Para grabar una macro hay que estar en modo de estudio y no haber hecho ningún movimiento. Vamos a poner un ejemplo. Cargamos el Juego del quince y pulsamos E y después K. La E que indicaba que estábamos en modo de estudio cambia por una K y aparece el texto: «Se va a definir la macro número 1». Hacemos varios movimientos, digamos 12, 11, 7, 6, 2 y 1. Pulsamos otra vez K y la macro 1 queda definida. Si volvemos a pulsar E y después F1 se ejecutarán los mismos movimientos. Es importante que los movimientos se refieren a las casillas (aunque en el ejemplo coincidían con las piezas); es decir, el primer movimiento de nuestra macro consiste en mover la pieza de la casilla 12 (no la pieza 12, aunque pueden coincidir). Tanto para crear una macro nueva como para ejecutarla el hueco debe estar en su posición final.

Siguiendo con el ejemplo anterior, si pulsamos I y hacemos los movimientos necesarios para llevar el hueco abajo a la derecha, podremos pulsar F1. Ahora el hueco estará en la casilla 1. Si en esta situación pulsamos Control-F1 se ejecutará la macro inversa de la 1, que (en este caso) solo se puede ejecutar si el hueco está en la primera casilla.

Ahora voy a poner un ejemplo real de una de las macros que uso para resolver 4x3 con paredes - 1. Cargamos este juego y pulsamos E y K. Movemos las siguientes piezas (¡ojo!: para que sea más fácil indico las piezas, no las casillas): 11, 10, 6, 2, 3, 7, 10, 11, 8, 4, 7, 3, 2, 6, 11, 10, 3, 7, 4 y 8. Pulsamos otra vez K y la macro 1 queda grabada. Si analizamos el efecto sobre las piezas veremos que solo se han visto afectadas cuatro piezas (tener activado el modo Resaltar piezas bien colocadas ayuda a ver esto): se han intercambiado las piezas 3 y 7 y las piezas 10 y 11. O, mejor dicho, se han intercambiado las piezas de las casillas 3 y 7 y las piezas de las casillas 10 y 11 (véase la figura 9). Quienes tengan experiencia con el Cubo de Rubik podrán apreciar la similitud entre las macros de Manhla y las secuencias de movimientos que se utilizan para resolver ese juego.

Fig. 9. Efecto de una macro

Se pueden definir hasta doce macros para cada juego. Estas macros se guardan en un fichero del espacio de usuario de forma que se podrán usar en el futuro. Al pulsar K se nos dice el número de macro que se va a definir (el primero no usado). Si antes de hacer ningún movimiento pulsamos K de nuevo, el número cambia al siguiente. En cuanto hayamos hecho algún movimiento, una nueva pulsación de K indicará que la macro se ha terminado de definir. Si nos arrepentimos y decidimos no definir ninguna macro, podemos pulsar E. Las macros no se pueden borrar (a no ser que editemos el fichero donde se guardan, o incluso lo borremos), pero sí redefinir. Al pulsar K sin hacer ningún movimiento y pasar al siguiente número, si este corresponde a una macro ya definida, el texto no será «Se va a definir...» sino «Se va a redefinir...».

Las macros se ejecutan (salvo en la interfaz simple) con las teclas de función. En el caso de japi, F10 también se usa para acceder a los menús; si pulsamos F10 con esa intención, veremos que, además, aparece el texto «La macro no está definida» o bien (si sí estaba definida) se ejecutará la macro número 10. En ese caso habrá que retroceder con la tecla Retroceso hasta el punto donde estábamos.

Salvo en simple (y texto en una consola virtual de Linux), las macros inversas se ejecutan con las teclas de función junto con o precedidas de (japi) la tecla Control. Si una función mueve las piezas de las casillas, 16, 15 y 14, la inversa moverá las piezas de las casillas 14, 15 y 16. En el caso de la interfaz texto en una consola virtual de Linux, las macros inversas se ejecutan con Alt-1 (macro 1 inversa)..., Alt-9 (macro 9 inversa), Alt-0 o Alt-a (macro 10 inversa), Alt-b (macro 11 inversa)y Alt-c (macro 12 inversa).

En la interfaz simple no se pueden definir macros, pero sí ejecutarlas. (Más adelante veremos un método alternativo para definir macros que puede usar incluso un usuario exclusivo de la interfaz simple). He aquí algunos ejemplos válidos para ilustrar cómo ejecutar macros con esta interfaz:

   -> macro 1
   -> macro2
   -> macro 3inversa
   -> macro 10 inversa
   -> macro12inversa

Cuando tratemos de los ficheros de definición de juegos o puzzles veremos un método alternativo para definir macros.

Subpuzzles

A veces es más fácil resolver un juego o puzzle si lo presentamos de otra forma. Por ejemplo, los juegos basados en el salto de caballo me resultan difíciles de analizar y prefiero una presentación en la que se vean más claramente las conexiones entre las casillas. Comparemos los juegos Manda 15 y Cuadrojo:

Fig. 10. Juego Manda 15 en su posición final.

Fig. 11. Juego Cuadrojo en su posición final.

¿A que a primera vista no se parecen en nada? Y, sin embargo, ambos son, en esencia, el mismo juego. Recordemos ante todo, que Manda 15 no es un Juego del 15, ya que el movimiento es el del salto del caballo de ajedrez. En la posición de la imagen las piezas que se pueden mover no son las 12 y 15, sino las 7 y 10. Si convertimos cada casilla en un punto y trazamos líneas entre las casillas conectadas obtendremos el grafo del puzzle Manda 15.

Fig. 12. Grafo de Manda 15.

La equivalencia entre ambos juegos se puede ver mediante esta animación (es un fichero GIF).

Fig. 13. Dos grafos equivalentes.

El grafo al que llegamos es el de Cuadrojo, pero los números no están colocados igual. La razón es que en Cuadrojo se han cambiado los números para que tengan un orden lógico de acuerdo con la posición de las casillas. Podemos decir que la casilla 1 de Manda 15 es equivalente a la 15 de Cuadrojo, la 2 es quivalente a la 12, etc. Pero está claro que resolver Cuadrojo es equivalente a resolver Manda 15. Si sabemos resolver Cuadrojo podemos resolver Manda 15 así:

  1. A partir de su posición inicial establecemos una equivalente para Cuadrojo.
  2. Resolvemos Cuadrojo partiendo de dicha posición (habría que editar el fichero que lo define) anotando los movimientos.
  3. Hacemos la correspondencia de las piezas movidas y ejecutamos la secuencia resultante en Manda 15.

Pero Manhla (solo con el interfaz japi) se encarga de este trabajo por nosotros. Según la terminología definida al efecto, Cuadrojo es un subpuzzle de Manda 15. (En el siguiente ejemplo se verá mejor el porqué del nombre.) Lo único que hay que hacer es, desde la posición que queremos resolver de Manda 15 (y asegurándonos de que está seleccionada la opción Guardar y recuperar estado) pulsar Ctrl-A y se abrirá Cuadrojo con la posición equivalente. Una S en la esquina superior derecha nos indica que estamos en «modo de subpuzzle». Una vez resuelto Cuadrojo, como es habitual, pasamos al modo e estudio. Ahora volvemos a Manda 15 y, en la misma posición de antes, pulsamos la tecla Ins. Debería haberse resuelto el juego, pudiéndose revisar la solución avanzando y retrocediendo con Retroceso e Intro.

Explicaré mejor lo que ha sucedido. Cada vez que se resuelve un juego se graba la lista de movimientos realizados en un fichero llamado MOVS.TXT. Esto es independiente de los ficheros de soluciones «.sol» y sucede aunque el juego sea de posición inicial aleatoria. En el modo de subpuzzle se graba también este fichero, pero con los movimientos cambiados para que sirvan al «juego original». Al pulsar Ins se leen y ejecutan los movimientos de MOVS.TXT si es posible hacerlo.

Hay que tener en cuenta que el modo de subpuzzle «se pierde» al cambiar de juego, reiniciarlo o salir del programa. Por ejemplo, si después de pulsar Ctrl-A cambiamos a otro juego y después volvemos a Cuadrojo, la desaparición de la S en la esquina superior derecha nos advierte que no volvemos a estar en modo de subpuzzle. Obviamiente, podemos resolver Cuadrojo, pero cuando lo hagamos, MOVS.TXT no valdrá para Manda 15.

Vamos a ver un segundo ejemplo de subpuzzle. Carguemos ahora Manda y desde la posición inicial pulsemos Ctrl-B. Automáticamente pasaremos a Reloj - 2 y una S en la esquina superior derecha nos indicará que estamos en modo de subpuzzle. Esto quiere decir que Reloj - 2 es un subpuzzle de Manda. Pero en este caso tenemos doce casillas, frente a las 25 de Manda. Y es que, en general, y como sugiere el término usado, un subpuzzle no tiene que equivaler a un juego completo, sino a una parte de él. Como en la posición inicial de Manda ya hay trece piezas bien colocadas, he considerado como subpuzzle el que resulta de suprimir dichas piezas (y casillas). (Por supuesto, se puede resolver Manda moviendo estas piezas, y de hecho, al parecer, la solución óptima lo requiere.)

Fig. 14. Grafo de Manda.

En la siguiente animación se puede ver cómo podemos deformar este grafo para transformarlo en otros dos: los correspondientes a Cuadriagonal - 1 y a Reloj - 2. Estos dos juegos pueden funcionar como subpuzzles de Manda. Con Ctrl-A accedemos al primero y con Ctrl-B al segundo.

Fig. 15. Tres grafos equivalentes.

Nótese que los números que se han puesto en el grafo son los de las casillas, no los de la piezas que las ocupan en la posición inicial. La casilla que al final debe quedar vacía debe pertenecer al subpuzzle y las que no forman parte de él deben tener las piezas que les corresponden colocadas.

Definición de juegos

Los juegos o puzzles de Manhla están definidos principalmente en ficheros de texto con extensión .puz. Además, muchos de ellos usan sus propios gráficos siguiendo ciertas convenciones. Y para su integración en la interfaz japi (para que aparezcan con una miniatura y una pequeña descripción en la ventana de selección) también hay que añadir ciertos ficheros. Con esos conocimientos cualquier usuario puede añadir sus propios juegos al programa. Pero el asunto es lo suficientemente largo como para requerir una tercera parte de este manual.