Sono riuscito a ottenere livelli ragionevolmente belli usando il seguente algoritmo, basato su una griglia quadrata:
Innanzitutto, crea un set di stanze. I parametri casuali definiranno la dimensione delle stanze e i loro numeri. Un algoritmo adattivo potrebbe persino definire alcune zone fatte di grandi corridoi e altre di stanze molto piccole.
Quindi, è necessario assicurarsi che tutte le stanze siano collegate tra loro. Per questo, esegui un pathfinder per scavare corridoi (diciamo, A *) tra ogni coppia di stanze, dando un peso scelto casualmente agli spazi esistenti (stanze o altri corridoi) rispetto allo spazio non ancora scolpito (i muri). Se la differenza di peso è piccola, scavare nuovi corridoi sarà ragionevolmente economico e l'algoritmo creerà molti corridoi tra le stanze, con molte possibilità di spostarsi da un luogo all'altro. Se la differenza di peso è elevata, l'algoritmo preferirà attraversare stanze e corridoi esistenti, rendendo i percorsi più tortuosi e con meno scelte per raggiungere una determinata destinazione.
Ciò ti consente, da un numero limitato di parametri, di creare livelli dall'aspetto molto diverso, da ampie sale sparse con piccoli corridoi che le collegano a un labirinto dall'aspetto alveare di camere strettamente interconnesse.
Ecco un esempio di un livello generato.
Sulla base di questo algoritmo, è possibile aggiungere decorazioni murali che dipendono dalla zona, rendere i corridoi più piccoli o più grandi, creare stanze speciali e così via.