En mi juego vemos los pisos de una casa desde un costado, y el héroe puede tomar ascensores: un ascensor sube (al siguiente ascensor hacia arriba) o hacia abajo (al siguiente ascensor hacia abajo), dependiendo de la flecha como se muestra, y siempre hay un par de exactamente dos ascensores conectados. Esa es la única forma en que el héroe puede moverse verticalmente, aunque puede moverse libremente horizontalmente. El mapa de la casa es una cuadrícula aleatoria de 11x5 con diferentes elementos y paredes que no se pueden pasar a la izquierda, a la derecha y, a veces, en una de las dos posiciones centrales:
Mi pregunta: ¿cómo puedo asegurarme de que el mapa esté siempre aleatorizado pero siempre solucionable y que el héroe, comenzando en el lado izquierdo del piso inferior, siempre pueda dejarlo a través de un elevador que apunta hacia arriba en el piso superior?
Por lo que vale, estoy usando el lenguaje Lua para el desarrollo. ¡Muchas gracias!
La diferencia entre lo que tienes y un laberinto normal es simplemente que tiene conexiones no adyacentes verticalmente. Creo que lo que debería mirar son los algoritmos de generación de laberintos basados en gráficos . Simplemente necesita tener un conjunto más grande de "habitaciones adyacentes" o "paredes posibles" que un laberinto 2D común, ya que cada par verticalmente alineado de celdas de piso-cuadrícula que aún no tiene un ascensor intermedio es adyacente. Podría modelar esto como un gráfico en el que agregar bordes de elevación definidos elimina accidentalmente otros posibles bordes de elevación; Esto podría confundir algunos algoritmos, pero no otros.
fuente