Los laberintos son sumamente interesantes de por sí, pero cuando se trata de generarlos de forma automática la cuestión se complica mucho más que cuando se diseñan «a mano». Recuerdo haber pasado días y días probando con diferentes algoritmos para crear –y resolver– laberintos en los viejos microordenadores (con poca capacidad de cálculo y menos memoria). Lo más complicado precisamente no era conseguir que el muñeco saliera de ellos: era crear un laberinto que resultara de algún modo interesante y difícil para los humanos.
En Algorithms for making more interesting mazes (Gamasutra) Herman Tulleken repasa unas cuantas técnicas y conceptos para conseguir que los laberintos que genera un algoritmo puedan suponer un verdadero reto para quien tienen que resolverlos. Esto se basa en ideas de la generación por procedimientos que suele emplearse en juegos y simulaciones.
Una de esas técnicas es el algoritmo de Prim, que construye las bases de estos laberintos; otras utilizan diversos sencillos patrones prediseñados (por ejemplo de 4 × 4) que pueden combinarse de formas aleatorias pero que resultan interesantes de por sí. También hay técnicas y «normas» que se pueden aplicar de diversas formas, con nombres como Chebyshev, Knight, Euclides o Manhattan (el artículo explica someramente en qué consisten).
Finalmente hay otra serie de técnicas o trucos para enrevesar visualmente un laberinto ya generado, tales como aplicar simetrías, rotaciones, repeticiones o recursividad, que sumadas a pequeñas variaciones en puntos clave hacen que todo sea un auténtico lío en el que las diversas zonas parecen una cosa pero son otras – por no hablar de cómo deben resultar de de confusos si se aplican a un escenario 3D en el que quede inmerso un jugador, solo con una visión en primera persona.
Una recomendación final que hace al autor en vista de que los resultados son buenos es combinar varias de estas técnicas en diversas zonas, especialmente si el laberinto es grande, de modo que el resultado sea tanto o más complejo que utilizando un solo concepto en toda su extensión.