¿Es posible obtener una estructura similar a una colmena, conectando todas las habitaciones sin tener demasiados pasillos? (Demasiados pasillos de 3-4+ provenientes de una sola habitación)
A continuación se muestra el resultado de cómo se ven mis habitaciones, básicamente ubicadas al azar.
Lo que espero obtener en cuanto al corredor.
procedural-generation
Mezclador
fuente
fuente
Respuestas:
Bueno, la forma más simple en que puedo pensar comienza con asegurarme de que todas las habitaciones estén conectadas por al menos 1 corredor:
Ahora sabemos que puede llegar a todas las habitaciones, pero ahora, si desea algo más que este laberinto estrictamente lineal, puede simplemente recorrer sus habitaciones y hacer un nuevo camino al azar para conectar habitaciones, hasta un límite por habitación de 2-3, o hasta que un cierto porcentaje de habitaciones alcance las conexiones máximas, etc.
Como paso final, puede agregar reglas que alterarían sus resultados para adaptarse a diversas situaciones. Por ejemplo, puede observar que cualquier habitación con solo 1 corredor es, por definición, un callejón sin salida; Podría hacer más callejones sin salida, o podría eliminarlos todos asegurándose de que todo tenga al menos 2 conexiones. Podrías hacer que los callejones sin salida tengan un pasaje secreto. Podrías asegurarte de que una habitación de jefe sea un callejón sin salida. Puede asegurarse de que su sala de inicio sea un callejón sin salida, pero luego asegúrese de que la segunda sala tenga un mínimo de conexiones X. Indefinidamente.
Cada suposición y regla puede cambiar radicalmente la apariencia de sus niveles, ¡pero eso es parte de la diversión! Esto debería al menos hacer que comiencen las habitaciones tipo colmena / cueva.
fuente
Simplemente construya sus habitaciones ya conectadas. Comience con una habitación, luego construya 1-3 pasillos a otras habitaciones. Luego recurse hasta que haya agregado suficientes habitaciones.
fuente
Dado que estas salas son vértices de gráficos incrustados en una llanura 2D, esto podría hacerse en teoría resolviendo el problema del vendedor ambulante (lo cual estaría bien con solo unas pocas salas). Obviamente, una simple heurística estaría bien y permitiría una escalabilidad razonable.
Calcula los bordes (longitudes de pasillo) entre todas las habitaciones. Los ordena por longitud. Agregue el corredor más corto a menos que cree un ciclo o aumente el grado del vértice (habitación) por encima del valor máximo deseado (3-4) (Repetir). Para verificar los ciclos, puede aplicar UnionFind o hacer un BFS rápido en datos pequeños.
fuente