Algorithme de génération d'un labyrinthe 2D [fermé]

27

Quel algorithme avez-vous utilisé par le passé pour générer un labyrinthe 2D simple?

jdeseno
la source

Réponses:

21

Il existe de nombreuses façons de fabriquer des labyrinthes. Il y en a une énorme liste et leurs descriptions ici: http://www.astrolog.org/labyrnth/algrithm.htm

Je pense que j'ai utilisé celui décrit sous "Parfait".

Tetrad
la source
Très belle ressource, exactement ce que je cherchais.
jdeseno
J'adore ce site, je l'ai utilisé il y a de nombreuses années.
zanlok
8

Je préfère les labyrinthes étroitement enroulés que l'algorithme de Kruskal crée.

La description standard de l'algorithme de Kruskal est inappropriée en ce qu'elle ne parvient pas à distinguer les emplacements dans le graphique des groupes d'emplacement, tout en s'appuyant sur un jeu de mots sur le choix de la structure de données, conduisant à des ambiguïtés de description qui déroutent les novices. Par conséquent, je rejette la terminologie de Kruskal.

J'utiliserai les termes suivants:

  • Graphique
    • le labyrinthe lui-même.
  • Nœud
    • un emplacement dans le labyrinthe. Sur un labyrinthe carré, il s'agit d'une cellule carrée.
  • Bord
    • la connexion entre deux nœuds. Sur un labyrinthe carré, il s'agit d'une barre d'une longueur.
  • Groupe d'arbres
    • un ensemble de nœuds, qui peuvent être vides, disposés en arbre

Et de ceux-ci, nous obtenons:

  1. Créer un groupe GTG , pour le groupe d'arbres graphiques , contenant des groupes d'arbres
  2. Remplissez GTG avec un groupe d'arbres contenant un nœud, pour chaque emplacement dans votre labyrinthe
  3. Créer un jeu de bords E
  4. Remplissez E avec chaque bord valide dans votre labyrinthe
  5. Bien qu'il y ait plus d'un groupe dans GTG et que E ne soit pas vide:
  6. Choisissez un bord aléatoire rE parmi E
  7. Identifier les points d'extrémité p1 et p2 de rE
  8. Supprimer rE de E
  9. Vérifiez à quels groupes p1 et p2 appartiennent ( p1g et p2g respectivement).
  10. Si p1g et p2g sont différents, joignez les groupes d'arbres p1g et p2g à p1 -> p2 , et réécrivez tous les groupes de propriété d'un arbre à l'autre, rejoignant ainsi les arbres.
  11. Revenez à l'étape 5.
  12. Si vous n'avez plus d'arêtes, mais plus d'une arborescence, soit le graphique n'est pas connecté, soit il y a un bug.
  13. Si vous n'avez qu'un seul arbre, vous disposez d'un labyrinthe complet sans boucle.
John Haugeland
la source
1
Nous avions un projet GUI et nous avons dû construire un labyrinthe 2D aléatoire sur l'interface graphique. C'est exactement comme ça que je l'ai fait et je n'ai jamais réalisé que j'utilisais Kruskals lol. J'ai vraiment réalisé que j'avais utilisé un graphique.
Bryan Harrington
1

Un moyen simple consiste à dresser une liste des murs nord et ouest, puis à les permuter. Donnez un numéro à chaque pièce. Faites exploser l'un des murs de la liste, tant que les deux pièces n'ont pas le même numéro, puis propagez l'un des numéros à toutes les autres pièces portant le même numéro. Continuez jusqu'à ce que vous manquiez de murs. Cela fonctionne pour les labyrinthes rectangulaires ou, vraiment, tout autre labyrinthe où vous pouvez donner une liste de "pièces potentiellement connectées". De plus, c'est assez simple à programmer.


la source
1

Je voudrais également jeter un oeil à certains des algorithmes utilisés dans le développement Roguelike. Il y a une bonne ressource de départ au bassin Rogue

Casey
la source
0

Vous avez demandé lequel j'ai utilisé, donc je vais m'assurer de répondre à cela. J'ai utilisé l' algorithme Recursive Backtracker dans mon jeu de labyrinthe sur Rootbeer Games .

C'est la preuve que j'ai utilisé l'algorithme, veuillez ne pas le voir comme une publicité de mon travail.

BenMaddox
la source