Was sind einige ideale Algorithmen für die Rogue-ähnliche 2D-Dungeon-Generierung? [geschlossen]

47

Was sind einige gute Ressourcen zur prozeduralen Inhaltsgenerierung im Kontext der Dungeongenerierung?

Der nächste Artikel, den ich finden konnte, war Algorithmus zum Erzeugen eines 2D-Labyrinths , was nicht ganz das ist, wonach ich suche. Merkmale wie Räume und verbundene Flure sind ideal.

Vielen Dank!

Gabriel Isenberg
quelle
1
Schauen Sie sich auch die Labyrinth-Generation an .
Anthony
1
Es gibt einige Artikel zu diesem Thema bei RogueBasin
PATRY Guillaume

Antworten:

27

Dies wurde bereits mehr oder weniger beantwortet. Ihre erste Anlaufstelle sollte http://pcg.wikidot.com/ sein.

Da mir vorgeworfen wurde, dies sei überhaupt keine hilfreiche Antwort. ), befasst sich diese Seite im Wiki speziell mit Dungeon-Generatoren und verweist auf verschiedene Artikel zu diesem Thema.
http://pcg.wikidot.com/pcg-algorithm:dungeon-generation

Ich würde dennoch empfehlen, das gesamte Wiki zu durchsuchen, da die Erstellung von prozeduralen Inhalten nur ein sehr kreativer Ansatz ist und alle Ideen gültig sind. Es ist eine Herausforderung für Querdenker - und es macht Spaß.

Kaj
quelle
+1 für "Alle Ideen sind gültig", aber ich möchte Folgendes klarstellen: Alle Ideen sind gültig, aber einige funktionieren besser als andere. Ihre <vage Computer-Fachsprache hier> -Idee wird funktionieren und wahrscheinlich das sein, was Sie wollen. Es gibt jedoch auch andere Möglichkeiten, die effizienter, zufälliger, zusammenhängender, anpassbarer oder eine beliebige Kombination davon sind, es sei denn, Sie sind einer von beiden Wirklich gut oder wirklich glücklich.
Nic Hartley
20

Ich habe es geschafft, mit dem folgenden Algorithmus, der auf einem quadratischen Gitter basiert, einigermaßen gut aussehende Level zu erhalten:

Erstellen Sie zunächst eine Reihe von Räumen. Zufällige Parameter bestimmen die Größe der Räume und deren Anzahl. Ein adaptiver Algorithmus könnte sogar einige Zonen definieren, die aus großen Fluren bestehen, und andere aus sehr kleinen Räumen.

Dann müssen Sie sicherstellen, dass alle Räume miteinander verbunden sind. Führen Sie dazu einen Pfadfinder durch, um zwischen jedem Raumpaar Korridore (z. B. A *) zu graben, und geben Sie den vorhandenen Räumen (Räumen oder anderen Korridoren) ein zufällig ausgewähltes Gewicht im Vergleich zu den noch nicht geschnitzten Räumen (Wänden). Wenn der Gewichtsunterschied gering ist, ist das Graben neuer Korridore relativ billig, und der Algorithmus erstellt viele Korridore zwischen den Räumen mit vielen Möglichkeiten, von einem Ort zum anderen zu gelangen. Wenn der Gewichtsunterschied hoch ist, wird der Algorithmus es vorziehen, vorhandene Räume und Korridore zu durchlaufen, wodurch die Wege kurviger werden und weniger Auswahlmöglichkeiten bestehen, um ein bestimmtes Ziel zu erreichen.

Auf diese Weise können Sie aus einer kleinen Anzahl von Parametern sehr unterschiedlich aussehende Ebenen erstellen, aus spärlichen, massiven Hallen mit kleinen Korridoren, die sie mit einem Labyrinth aus eng miteinander verbundenen Kammern verbinden.

Hier ist ein Beispiel eines generierten Levels.

Bildbeschreibung hier eingeben

Basierend auf diesem Algorithmus können Sie zonenabhängige Wanddekorationen hinzufügen, Korridore verkleinern oder vergrößern, spezielle Räume erstellen usw.

small_duck
quelle
10

Wenn Sie gerne Code lesen und C # analysieren können, kann ich Ihnen den Dungeon-Generator empfehlen, den mein Amaranth verwendet? Es ist da . Es verwaltet verbundene Räume, erweiterbare Funktionen und einige andere nützliche Dinge.

Wenn Sie das gesamte Projekt öffnen und erstellen, gibt es ein eigenständiges Tool, mit dem Sie die Dungeons generieren und zeichnen können, sodass Sie sie optimieren und sehen können, wie sie funktionieren.

herrlich
quelle
1
Ich bin auf Amaranth gestoßen, wie es scheint, vor Monaten, aber ich hatte den Namen vergessen, als ich selbst in die Dungeon-Generation kam. Danke für den Link!
Gabriel Isenberg
2
Ihr Artikel bei journal.stuffwithstuff.com/2014/12/21/rooms-and-mazes ist auch wirklich gut, ich verwende eine modifizierte Version davon mit ein paar zusätzlichen Funktionen wie verschiedenen Korridor-Gen-Motoren usw.
Tobsta
3

All dies sind großartige Ideen. Ich habe RogueBasin und pcg.wikidot.com ein wenig entnommen und meine eigene Implementierung in C # geschrieben.

Ich mochte das "natürliche" Aussehen von höhlenartigen Ebenen, die mit der Methode der zellularen Automaten erzeugt werden können. Stellen Sie sich Conways Spiel des Lebens vor, um zu verstehen, was ich mit der Methode der zellularen Automaten meine. In meinem Code wird die so genannte 4-5-Methode verwendet. Dies bedeutet, dass eine Kachel zu einer Wand wird, wenn es sich um eine Wand handelt und 4 oder mehr der neun Nachbarn Wände sind oder wenn es sich nicht um eine Wand handelt und 5 oder mehr Nachbarn Wände sind. Ich beginne damit, die Karte zufällig mit Wänden oder Leerzeichen zu füllen, gehe dann iterativ zu jeder x / y-Position und wende die 4-5-Regel an. Um das Problem der Bildung isolierter Höhlen zu lösen, entferne ich nach dem zufälligen Ausfüllen der Karte eine horizontale Linie über die Karte und setze jedes Feld auf ein Leerzeichen anstelle einer Wand, bevor ich die 4-5-Regel auf jedes Feld anwende.

Sie können den Code für meine Map-Handler-Klasse und die hier vorgenommenen Verbesserungen anzeigen

oder eine archivierte Version hier .

Adam White
quelle
2
Diese Frage hat viele Stimmen und es wäre besser, wenn Sie diese Antwort ein bisschen mehr öffnen könnten. Links neigen dazu, irgendwann zu sterben. Versuchen Sie also, so zu antworten, dass Sie nicht mehr auf Links klicken müssen. Wie funktioniert das? Was ist der Grundgedanke? Wie unterscheidet es sich von anderen Algorithmen?
Katu
1
Die Verbindung ist tatsächlich gestorben.
htmlcoderexe
2

Ich denke, der direkteste Ort, um dies zu finden, ist der Blick auf den Quellcode. Angband und Nethack sind beide Open-Source-Unternehmen.

Ian Schreiber
quelle
3
Obwohl Open-Source, ist, wie ich mich erinnere, weder eine sehr gut dokumentierte Quelle noch eine transparente Quelle oder eine Quelle, aus der man lernen kann. Sie sind leicht zu hacken Tweaks, aber insgesamt viel schwieriger zu grocken.
Tom Hudson
Vielleicht sind die Originale keine großartigen Referenzen, aber es gibt eine Vielzahl von Varianten, von denen einige ausgezeichnet sind. Zum Beispiel hat der Entwickler von UnAngband einige Verbesserungen an der Dungeon-Generation vorgenommen und eine Reihe exzellenter Blog-Posts geschrieben , sodass Sie die Ideen auf jeden Fall verwenden können, wenn nicht den Code.
Congusbongus
Die NetHack-Quelle ist bekanntermaßen schwer zu verstehen. Der Dungeon-Generator (EINER von ihnen) ist auf nicht weniger als DREI C-Dateien und etwa 15 Funktionen verteilt
Élektra