Ich habe eine Methode zum rekursiven Generieren einfacher Dungeonkarten entwickelt, indem ich mit einem Raum begonnen und rekursiv neue benachbarte Räume zufällig damit verbunden habe.
Karten werden als zweidimensionale Arrays dargestellt, wobei jede Zelle einen Wert von 0-15 enthält. 0 steht für keinen Raum, während jede Richtung durch Nord = 1, Ost = 2, Süd = 4, West = 8 dargestellt wird.
Ich wollte mit einem einzelnen Nicht-Raum ([[0]]) beginnen und dann das 2D-Array nach Bedarf erweitern, um es an die generierte Karte anzupassen. Die Schwierigkeit, mit der ich bei dieser baumartigen Rekursion konfrontiert bin, besteht darin, dass ich die aktuelle Position der Funktion anpassen muss, an welcher Zeile und in welcher Spalte sie sich befindet, wenn die Arrays verschoben werden müssen, um Zeilen und Spalten links und oben auf der Karte hinzuzufügen . Dies führt dazu, dass separate Zweige keine Anpassungen des Array-Index von anderen Zweigen kennen. Nur ihre untergeordneten Funktionen wissen dies, da ihnen die angepasste Position als Zeilen- und Spaltenargumente übergeben wurde.
Gibt es eine Möglichkeit, dies zu tun? Ich habe versucht, Zeilen- und Spaltenversatzwerte außerhalb der Rekursion zu speichern, aber es hat aus irgendeinem Grund nicht funktioniert.
Ich mache eine ähnliche Sache in Python. (Oder zumindest der elastische Teil).
Ich habe ein Wörterbuch mit (x, y) Tupeln, die den Zellen zugeordnet sind. Im Pseudocode:
Eine Hash-Tabelle wäre für so etwas sehr gut.
quelle
Die Lösung mit minimalem Aufwand besteht darin, eine maximale Größe (X- und Y-Ausdehnung) auszuwählen, die der Dungeon erreichen soll, Ihren Startpunkt in die Mitte zu setzen und kein Wachstum außerhalb des Dungeons zuzulassen. Keine Verschiebung erforderlich. Kommt natürlich darauf an, dass ein fester Umfang akzeptabel ist.
quelle
Sie möchten ein Diagramm anstelle des 2D-Arrays verwenden.
Jeder Raum wäre ein Knoten in der Grafik und weiß, welche anderen Räume daneben liegen:
Auf diese Weise müssen Sie nicht definieren, wie groß Ihre Karte werden kann.
Die x, y-Koordinaten können als eindeutiger Schlüssel in einer Hashmap für den schnellen Zugriff auf jeden Raum verwendet werden. Wenn Sie einen neuen Raum hinzufügen, werden lediglich Einträge zu den Listen der angrenzenden Räume der Räume in der Nähe hinzugefügt.
Das Diagramm eignet sich auch hervorragend für Pfadfindungsalgorithmen, wenn Sie diese benötigen.
quelle