Algorithmus zur Erzeugung eines 2D-Labyrinths [geschlossen]

27

Mit welchem ​​Algorithmus haben Sie in der Vergangenheit ein einfaches 2D-Labyrinth erstellt?

jdeseno
quelle

Antworten:

21

Es gibt viele verschiedene Arten, Labyrinthe herzustellen. Es gibt eine riesige Liste von ihnen und ihre Beschreibungen hier: http://www.astrolog.org/labyrnth/algrithm.htm

Ich denke, ich habe die unter "Perfekt" beschriebene verwendet.

Tetrade
quelle
Sehr schöne Ressource, genau das, wonach ich gesucht habe.
Jdeseno
Ich liebe diese Seite, die ich vor vielen Jahren benutzt habe.
Zanlok
8

Ich bevorzuge die dicht gewundenen Irrgärten, die Kruskals Algorithmus erzeugt.

Die Standardbeschreibung des Kruskal-Algorithmus ist insofern ungeeignet, als er Standorte im Diagramm nicht von Standortgruppen unterscheidet und sich dabei auf einen Wortspiel bei der Auswahl der Datenstruktur stützt, was zu Unklarheiten bei der Beschreibung führt, die Anfänger verwirren. Deshalb lehne ich die Termonologie von Kruskal ab.

Ich werde die folgenden Begriffe verwenden:

  • Graph
    • das Labyrinth selbst.
  • Knoten
    • ein Ort im Labyrinth. In einem quadratischen Labyrinth ist dies eine quadratische Zelle.
  • Kante
    • die Verbindung zwischen zwei Knoten. Bei einem quadratischen Labyrinth handelt es sich um eine Stange mit einer Länge von 1.
  • Baumgruppe
    • Eine Menge von Knoten, die leer sein können und als Baum angeordnet sind

Und von diesen bekommen wir:

  1. Erstellen Sie eine Gruppen- GTG für die Diagrammbaumgruppe , die Baumgruppen enthält
  2. Füllen Sie GTG mit einer Baumgruppe mit einem Knoten für jeden Ort in Ihrem Labyrinth
  3. Erstellen Sie einen Kantensatz E
  4. Fülle E mit jeder gültigen Kante in deinem Labyrinth
  5. Während es in GTG mehr als eine Gruppe gibt und E nicht leer ist:
  6. Wähle eine zufällige Kante rE aus E
  7. Identifizieren Sie die Endpunkte p1 und p2 von rE
  8. Entferne rE von E
  9. Überprüfen Sie, zu welchen Gruppen p1 und p2 gehören ( p1g bzw. p2g ).
  10. Wenn p1g und p2g unterschiedlich sind, verbinden Sie die Baumgruppen p1g und p2g bei p1 -> p2 und schreiben Sie alle Gruppeneigentümer eines Baums auf den anderen, um die Bäume zu verbinden.
  11. Kehren Sie zu Schritt 5 zurück.
  12. Wenn Sie keine Kanten mehr haben, aber mehr als einen Baum, ist das Diagramm entweder nicht verbunden oder es liegt ein Fehler vor.
  13. Wenn Sie nur einen Baum haben, haben Sie ein komplettes No-Loop-Labyrinth.
John Haugeland
quelle
1
Wir hatten ein GUI-Projekt und mussten ein zufälliges 2D-Labyrinth auf der GUI erstellen. Genau so habe ich es gemacht und ich habe nie bemerkt, dass ich Kruskals verwendet habe. Lol. Ich stellte definitiv fest, dass ich ein Diagramm verwendet hatte.
Bryan Harrington
1

Eine einfache Möglichkeit besteht darin, eine Liste der Nord- und Westwände zu erstellen und diese dann zu permutieren. Geben Sie jedem Raum eine Nummer. Sprengen Sie dann eine der Wände in der Liste in die Luft, solange die beiden Räume nicht dieselbe Nummer haben, und verbreiten Sie dann eine der Nummern an alle anderen Räume mit derselben Nummer. Gehen Sie weiter, bis Ihnen die Wände ausgehen. Dies funktioniert für rechteckige Labyrinthe oder wirklich für jedes andere Labyrinth, in dem Sie eine Liste von "potenziell verbundenen Räumen" erstellen können. Außerdem ist das Programmieren ziemlich einfach.


quelle
1

Ich würde mir auch einige der Algorithmen ansehen, die in der Roguelike-Entwicklung verwendet wurden. Es gibt eine gute Starthilfe im Rogue Basin

Casey
quelle
0

Sie haben gefragt, welchen ich verwendet habe, also werde ich sicherstellen, dass ich darauf antworte. Ich habe den Recursive Backtracker-Algorithmus in meinem Labyrinthspiel bei Rootbeer Games verwendet .

Dies ist ein Beweis dafür, dass ich den Algorithmus verwendet habe. Bitte betrachten Sie ihn nicht als Werbung für meine Arbeit.

BenMaddox
quelle