Aus realer Sicht: Wenn Sie von A nach B gehen und eine verschlossene Tür D auf Ihre Weise finden würden, würden Sie erkennen, dass Sie Schlüssel D finden müssen. Wenn Ihre KI also so wenig weiß wie der typische Mensch Dies würde das Suchen nach dem Schlüssel beinhalten, bei dem es sich um eine Reihe winziger Schritte zur Wegfindung an und für sich handelt. Auf der anderen Seite möchten Sie vielleicht, dass Ihre KI bereits vor dem Versuch eines Pfades weiß, dass sich auf dieser Route eine verschlossene Tür befindet, und in diesem Fall wird sie wahrscheinlich auch wissen, wo sich der Schlüssel befindet.
In beiden Fällen geht es um Konnektivität auf zwei Ebenen. Auf der Ebene "am Boden" wissen Sie, dass Sie sich immer sicher innerhalb einer ungeteilten Zone bewegen können ... also ungeteilt durch verschlossene Türen. Hier können Sie Ihre aktuelle A * -Pfadfindungsimplementierung frei verwenden. (In einem vereinfachten Beispiel könnten Sie eine Zone als einen einzelnen Raum sehen. Sie können keinen anderen Raum erreichen, ohne eine Tür aufzuschließen. In Wirklichkeit könnte es sich um eine ganze Region Ihres Dungeons handeln.) Dies ist das Fundament Ihres Entitätsbewegung, aber es ist ein bisschen so, als würde man mit niedergeschlagenen Augen herumlaufen, anstatt zuerst den Bereich um Sie herum zu überblicken - Sie werden wahrscheinlich auf einen Laternenpfahl stoßen. Oder in diesem Fall eine verschlossene Tür. Daher müssen Ihre Karten auf Bodenhöhe, auf denen Ihr A * ausgeführt wird, den Spieler auf Bewegungen nur innerhalb der aktuellen Zone beschränken.
Als nächstes gibt es eine Karte auf höherer Ebene, die eher topologischer als topografischer Natur ist. Es kümmert sich nicht wirklich um die Details von Hindernissen vor Ort und so weiter, sondern nur um die Konnektivität zwischen Zonen. Diese topologische Karte enthält Verbindungen zwischen geraden Zonen, zwischen denen sich derzeit eine verschlossene Tür befindet, da sie die ideale Konnektivität aller Zonen in Ihrem Dungeon zeigt. In den Kanten - jede repräsentiert eine Tür zwischen den Zonen - wird gespeichert, welcher Schlüssel noch benötigt wird, um diese Tür zu öffnen, andernfalls wird sie als offen betrachtet. Wenn Sie dieses Diagramm nach dem kürzesten Pfad durchsuchen, sollte dieser gefundene Pfad nur auf bereits geöffnete Routen beschränkt sein , indem die Daten an den Rändern während der Suche überprüft werden. Konnektivität bedeutet hier keine Offenheit, sondern potenzielle Offenheit.
Wenn Sie sich zu einem Punkt bewegen möchten, der in eine separate Zone fällt, durchsuchen Sie zuerst Ihre übergeordnete Karte, um einen Pfad zu finden. (Ein * oder ein anderer Algorithmus für kürzeste Pfade kann auf dieser Ebene verwendet werden.) Sobald Sie einen Pfad gefunden haben, sollte diese Karte auf höherer Ebene auch Informationen darüber enthalten, welche Tür Sie verwenden müssen, um von Ihrer aktuellen Zone in die andere Zone zu gelangen. Jetzt können Sie in der lokalen Zone eine bodennahe KI ausführen, um zu dieser Tür zu navigieren. Sobald die Tür erreicht ist, kann Ihr Charakter durch diese Tür / dieses Portal gehen. Er befindet sich jetzt in Zone B. Wenn dies die Zielzone ist, kann er die Bodennavigation verwenden, um zur Taste zu gelangen. Ist dies nicht der Fall, müssen Sie Schritt 1 wiederholen, bis Sie die Zielzone erreicht haben.
Es besteht die Möglichkeit, dass sich ein gesuchter Schlüssel selbst hinter einer verschlossenen Tür befindet ... und dass der Schlüssel zu dieser Tür ebenfalls ... ist und so weiter ad nauseum. Dies ist im Wesentlichen ein Problem der Abhängigkeitsauflösung, und es gibt einige Möglichkeiten, dies zu beheben, darunter Petri-Netze. Sehen Sie das ausgezeichnete Papier.
PS. Wenn Sie Ihren Dungeon prozedural erstellen, können Sie dabei Informationen zur Abhängigkeitsreihenfolge speichern, sofern Sie die Startposition des Spielers bereits kennen.