Ich erstelle gerade ein Raumschiff-Erkundungsspiel und habe ein massives Problem, das ich seit Monaten zu lösen versucht habe. Der Rest meiner Gruppe hat sich entschieden, sich für ein Umschreiben zu entscheiden, um einige massive Spaghetti zu reparieren.
Wie auch immer, die Probleme gehen wie folgt vor:
Der Spieler beginnt in einem Raum, von dem aus er durch Türen zu anderen angrenzenden Räumen gelangen kann.
Diese Türen werden in einer Karte der Richtung, in der sie sich befinden, und des Türobjekts, auf das sie sich beziehen, gespeichert. Jedes Doorway-Objekt verfolgt die beiden Räume, die es verbindet, und leitet den Spieler bei Bedarf zu jedem.
Alle Räume müssen jedoch auf mindestens einem Weg zugänglich sein. Wenn Sie durch eine Tür auf der Steuerbordseite gehen, muss der andere Raum auf der Backbordseite dieselbe Tür haben. Ich kann das tun, indem ich einfach jede Wand als Tür habe, aber es wird langweilig, sie zu erkunden.
Das Vorgenerieren dieser Daten erwies sich als problematisch genug, um es zu scheitern, aber jetzt hat sich die Spezifikation geändert. Die Welt wird theoretisch unendlich sein, und als solche kann der Pfad nicht vorgeneriert werden, sondern muss stattdessen durchgeführt werden, wenn neue Räume benötigt werden oder voraussichtlich bald angefordert werden.
Ich muss also ein Labyrinth erzeugen, in dem Schleifen erlaubt sind, die quadratisch auf einem Raster gezeichnet sind, wobei nicht nur jeder Raum nicht direkt weiß, dass die anderen existieren, sondern auch voneinander zugänglich ist. Wenn Sie durch eine Tür auf einer Seite eines Raums gehen, muss sich dieselbe Tür auf der gegenüberliegenden Seite des nächsten Raums befinden.
Was ist ein guter Weg, um all diese Eigenschaften zu garantieren? Ich bin bereit, mich von Räumen zu trennen, die keine Kenntnis von anderen haben, würde es aber lieber so lassen, um den Raumtyp später leichter neu zu generieren, falls dies notwendig werden sollte.
Unten ist ein ASCII-Modell einer Textdatei eines 5x5-Beispiels, das ich erstellt habe. Https://pastebin.com/EtdAWAwD Linien sind Wände, Xs sind Türen und das S ist die Startposition des Spielers.
Jeder Rat wird geschätzt, auch auf alternativen Routen, die für die Erstellung dieser berücksichtigt werden müssen.