Ich entwickle eine prozedural generierte Spielwelt in Python. Die Struktur der Welt wird ähnlich dem MUD/MUSH-Paradigma von Räumen und Ausgängen sein, die als gerichteter Graph angeordnet sind (Räume sind Knoten, Ausgänge sind Kanten). (Beachten Sie, dass dies nicht unbedingt ein azyklischer Graph, obwohl ich bin bereit, azyklische Lösungen zu berücksichtigen.)Was ist eine gute Strategie zum Erstellen eines gerichteten Graphen für eine Spielkarte (in Python)?
Zur Welterzeugungsalgorithmus, Zimmer verschiedener Art werden von jedem „Tags“ Attribut Zimmer unterscheiden (a Reihe von Zeichenfolgen). Sobald sie instanziiert wurden, können Räume abgefragt und nach Tags ausgewählt werden (Einzel-Tag, Tag-Schnittpunkt, Tag-Union, bester Kandidat).
Ich werde bestimmte Arten von Räumen mit einem verklärten System von Vorlagenobjekten und Fabrikmethoden erstellen - ich denke nicht, dass die Details hier wichtig sind, da sich die aktuelle Implementierung wahrscheinlich ändern wird, um der gewählten Strategie zu entsprechen. (Zum Beispiel wäre es möglich, Tags und Tag-Anfragen an die Raumvorlage System hinzuzufügen.)
Ein Beispiel ich Zimmer dieser Art haben:
side_street
,main_street
, plaza, bar, hotel, restaurant, shop, office
Schließlich die Frage: Was ist Eine gute Strategie, um diese Räume zu instanziieren und zu arrangieren, um ein Diagramm zu erstellen, das bestimmten Regeln entspricht?
Einige Regeln könnten enthalten: eine Plaza pro 10.000 Einwohner; main_street
verbindet mit plaza
; side_street
verbindet mit main_street
oder side_street
; hotel
bevorzugt oder plaza
Verbindungen, und erhält entsprechend weitere Tags; usw.
Bonuspunkte, wenn eine vorgeschlagene Strategie eine datengesteuerte Implementierung ermöglichen würde.
-1: Das OP fragt nach einem Nicht-Koordinaten-Raum-Graph-Ansatz, der in vielen Spielen recht erfolgreich verwendet wird (und unregelmäßigere Verbindungen erlaubt, was sehr nützlich sein kann). Sie beschreiben einen völlig anderen (nicht unbedingt besseren) Ansatz. –
Auch ein Baum ist nicht die richtige Datenstruktur für diese Anwendung. Der OP sagte Graph, und er meinte Graph. Ein Baum ist nur ein azyklischer Graph, und in diesem Fall möchten Sie die azyklische Einschränkung nicht. –
@Carl Meyer: "Das OP fragt nach einem nicht-Koordinaten-Raum Graph Ansatz" Gut zu wissen. Ich frage mich, wie du das weißt? Irgendwelche Wörter oder Ausdrücke in der Frage, die das anzeigen? Ich konnte keine finden. Was habe ich verpasst? –