J'ai réussi à obtenir des niveaux d'assez bonne mine en utilisant l'algorithme suivant, basé sur une grille carrée:
Tout d'abord, créez un ensemble de pièces. Des paramètres aléatoires définiront la taille des pièces et leur nombre. Un algorithme adaptatif pourrait même définir certaines zones constituées de grands couloirs et d'autres de très petites pièces.
Ensuite, vous devez vous assurer que toutes les pièces sont connectées les unes aux autres. Pour cela, lancez un explorateur pour creuser des corridors (par exemple, A *) entre chaque paire de pièces, en donnant un poids choisi aléatoirement aux espaces existants (salles ou autres corridors) par rapport aux espaces non encore sculptés (les murs). Si la différence de poids est faible, il sera alors relativement peu coûteux de creuser de nouveaux couloirs et l’algorithme créera de nombreux couloirs entre les pièces, offrant de nombreuses possibilités pour se déplacer d’un lieu à l’autre. Si la différence de poids est grande, l’algorithme préférera alors parcourir les salles et les couloirs existants, rendant les chemins plus tortueux et offrant moins de choix pour atteindre une certaine destination.
Cela vous permet, à partir d'un petit nombre de paramètres, de créer des niveaux d'aspect très différents, des couloirs massifs clairsemés aux petits couloirs les reliant à un labyrinthe de chambres étroitement interconnectées.
Voici un exemple de niveau généré.
Sur la base de cet algorithme, vous pouvez ajouter une décoration murale qui dépend de la zone, rendre les couloirs plus petits ou plus grands, créer des salles spéciales, etc.