Ich habe gerade ein neues Projekt gestartet, in dem ich möchte, dass die Spielwelt aus prozedural generierten Orten besteht, die durch Teleporter verbunden sind. Nach ein wenig Recherche habe ich festgestellt, dass dies entweder als "Graphentheorie" oder als "blutig kompliziert" bezeichnet wird, je nachdem, wer darüber spricht. Leider habe ich nur sehr wenige Informationen zum Generieren von Diagrammen gefunden. Die meisten Tools, die ich gesehen habe, zielen darauf ab, vorhandene Diagramme zu untersuchen.
Vorausgesetzt, ich habe die Terminologie korrekt sortiert, muss das Diagramm wie folgt lauten:
- einfach - kein Ort (Scheitelpunkt) sollte einen Teleporter (Rand) haben, der wieder mit sich selbst verbunden ist, noch sollten zwei Scheitelpunkte mehrere Kanten haben, die sie verbinden
- verbunden - es sollte möglich sein, zwischen zwei beliebigen Eckpunkten in der Grafik zu reisen (obwohl ich nicht voraussehe, dass ich jemals den Pfad finden muss; es reicht aus, nur zu wissen, dass der Spieler einen finden kann, wenn er dies wünscht)
- zyklisch - Es sollte mehr als einen Pfad zwischen zwei beliebigen Scheitelpunkten geben
- ungerichtet - alle Kanten können in beide Richtungen bewegt werden
- unendlich - wenn der Spieler dies wünscht, sollte er in der Lage sein, unbegrenzt zu reisen, wobei der Graph weiterhin inkrementell generiert wird, wenn er sich
seinen äußerstenunerforschten Eckpunkten nähert - lokal endlich - der Grad eines Scheitelpunkts sollte sich niemals ändern, nachdem der Spieler ihn besucht hat
- stabil markiert - jeder Scheitelpunkt stellt einen Ort dar, der selbst prozedural aus einem Samen erzeugt wird; Der gleiche Startwert muss einem Scheitelpunkt zugewiesen werden, unabhängig davon, welchen Pfad der Spieler verwendet hat, um dorthin zu gelangen, oder wie groß die Grafik ist, wenn er dies tut
Ich hatte einige Ideen (die ich noch nicht zu implementieren versucht habe) bezüglich der Verwendung der lokalen Maxima des 2D-Perlin-Rauschens als Eckpunkte (die Eingabe x und y könnte dann als Bezeichnung verwendet werden), aber das fühlt sich klobig und überkompliziert an.
Gibt es eine bessere Möglichkeit, ein solches Diagramm zu erstellen? Ich entwickle in Python 2.6 mit Panda3D und numpy und wäre natürlich bereit, andere Bibliotheken einzubeziehen, wenn sie bei diesem Problem helfen!
Bearbeiten
Ich glaube, ich habe einige meiner Anforderungen schlecht erklärt, also ist es Zeit für Illustrationen! Hoffentlich klärt dies die Dinge auf.
Was ich mit stabilen Etiketten meine, ist, dass ich zum Beispiel möchte, dass Spieler A eine Reihe von Erkundungen durchführen und unter anderem einen Radweg zurück zu seinem Startort und einen Berg finden kann, der wie eine Katze aussieht. Sein Spiel sieht nun ungefähr so aus (Eckpunkte werden mit ihrem Samen und Kanten in der Reihenfolge nummeriert, in der der Spieler sie durchquert hat). Er startete am Scheitelpunkt 8329 (grün) und Happycat Mountain befindet sich am Scheitelpunkt 6745 (blau).
Der gute Freund von Spieler A Spieler B ist ein Fan von Katzen, deshalb möchte er es ihr zeigen. Er gibt ihr den Wurzelsamen für seine Welt und Richtungen entlang des kürzeren Weges zum Berg von Interesse. Ihr Spiel sollte jetzt so aussehen:
Das Problem, mit dem ich derzeit am meisten Schwierigkeiten habe, ist: "Wie generiere ich die gleichen Samen für Spieler B, wenn ihre Erkundung nicht den gleichen Weg gegangen ist?" Das brachte mich auf die Idee, Perlin-Rauschen zu verwenden - solange derselbe Wurzelsamen verwendet wird, bewegen sich die Maxima nicht, sodass ihre Koordinaten als stabile Scheitelpunktsamen verwendet werden können.