En la mitología griega se establece que en la isla de Creta se escondía
el Minotauro dentro de un laberinto. Por eso este programa que trata de
laberintos se llama Creta.
El programa no es más que un divertimento para ver generar y resolver
laberintos que pueden llegar a ser grandes si se ven a pantalla completa.
Créditos
Todo el software y los recursos utilizados en la realización de este
programa tienen licencias libres. Se incluyen a continuación las referencias a
las páginas correspondientes, precedidas por el agradecimiento a la entrega y
generosidad de todas aquellas personas que publican su material con alguna
licencia libre.
El método para generar laberintos lo entendí gracias a las explicaciones de
Jamis
Buck.
Los iconos del laberinto son un muro, un cohete, una casa, una cruz
y una estrella. Todos ellos forman parte del conjunto de iconos
LED, obra de led24.de con licencia
Creative Commons Attribution 4.0 International.
El tipo de letra usado para los botones es
Nunito Bold, de
Vernon Adams, con licencia
SIL Open Font.
El método de creación de un carrusel de imágenes se ha adaptado del
que explica
Brad
S. Knutson.
Para aprender a usar JavaScript para poner a pantalla completa un elemento
de una página web usé varias fuentes, pero la que mejor me vino fue la de
Craig Buckler.
Licencia
Todo mi código y archivos auxiliares tiene licencia
CC0 1.0
Universal.
Descarga
Este programa funciona perfectamente en un navegador sin conexión a
Internet. Solo tienes que descargarte el archivo
creta-20150717.zip, descomprimirlo
y abrir el archivo index.html con un navegador.
Técnicas
Toda la programación está hecha en JavaScript.
La visualización de los laberintos se basa en el elemento canvas de HTML5.
Para los símbolos uso imágenes de 16×16 píxeles y para mostrar la
solución uso círculos y rectángulos dibujados.
La generación de laberintos se hace por backtracking y se obtiene un
laberinto perfecto: cualesquiera dos puntos están conectados por exactamente
un camino y no hay bucles. Lo elegí porque visualmente me pareció más
atractivo.
La salida (el cohete) y la llegada (la casita) las elijo para que estén
lo más separadas posible, para conseguir que la solución sea un camino
largo. En algunas ocasiones la curva resultante me recuerda a la
curva de Peano.
La solución del laberinto se obtiene buscando los puntos muertos, celdas
que están rodeadas de tres muros; cuando se eliminan todos, las celdas que
quedan son las que forman la solución. También me pareció más adecuada para su
visualización.
Para mostrar la solución utilizo un temporizador JavaScript ¡para cada
paso! Nunca pensé que eso podría funcionar. Con la inocencia del novato,
pensé en usar el equivalente en JavaScript a una función sleep() hasta que
descubrí que ni existía ni se consideraba correcto escribirla, por lo que tuve
que pensar un buen rato cómo conseguir lo que quería con temporizadores. Bueno,
parece que funciona :)