Desde un punto de vista del mundo real: si se dirigía de A a B y encontraba una puerta D en su camino que estaba cerrada, se daría cuenta de que debe encontrar la llave D. Entonces, si su IA es tan desconocida como lo es el humano típico , eso implicaría explorar la clave, que es un conjunto de pequeños pasos de búsqueda de ruta en sí mismo. Por otro lado, es posible que desee que su IA sepa, antes de intentar un camino, que hay una puerta cerrada en esa ruta, y en ese caso probablemente también sepa dónde encontrar la llave.
De cualquier manera, el problema es uno de conectividad en dos niveles. En el nivel "en el suelo", sabes que siempre puedes moverte con seguridad dentro de una zona no dividida ... es decir, sin puertas cerradas. Aquí es donde puede usar su implementación actual de pathfinding A * libremente. (En un ejemplo simplista, podrías ver una zona como una habitación individual. No puedes llegar a ninguna otra habitación sin abrir una puerta. En realidad, podría ser una región completa de tu mazmorra). Esta es la base de tu movimiento de la entidad, pero es un poco como caminar con los ojos bajos, en lugar de inspeccionar el área a su alrededor primero, es probable que camine hacia una farola. O en este caso, una puerta cerrada. Por lo tanto, los mapas a nivel del suelo en los que se ejecuta tu A * deben restringir al jugador al movimiento solo dentro de la zona actual.
A continuación, hay un mapa de nivel superior, que es más de naturaleza topológica que topográfica. Realmente no le importan los detalles sobre el terreno de los obstáculos, etc., solo le importa la conectividad entre zonas. Este mapa topológico tiene conexiones entre zonas pares que actualmente tienen una puerta cerrada entre ellas, ya que muestra la conectividad ideal de todas las zonas en tu mazmorra. En sus bordes, cada uno representando una puerta entre zonas, almacena la llave que aún se necesita, si la hay, para abrir esa puerta, de lo contrario, se considera abierta. Por lo tanto, al buscar en este gráfico la ruta más corta, debe limitar esa ruta encontrada solo a las rutas que ya están abiertas , al verificar los datos en los bordes a medida que se ejecuta la búsqueda. La conectividad aquí no implica apertura, sino que implica apertura potencial.
Cuando desee moverse a un punto que se encuentre dentro de una zona separada, primero busque su mapa de nivel superior para encontrar un camino. (A * o cualquier otro algoritmo de ruta más corta se puede usar en este nivel). Una vez que encuentre una ruta, ese mapa de nivel superior también debe proporcionar información sobre qué puerta debe usar para llegar desde su zona actual a la otra zona. Ahora, en la zona local, puedes hacer IA a nivel del suelo para navegar hacia esa puerta. Una vez que se ha alcanzado la puerta, tu personaje puede pasar por esa puerta / portal. Ahora está en la zona B. Si esta es la zona objetivo, puede usar la navegación a nivel del suelo para ir a la tecla. Si no es así, debe repetir el paso uno hasta llegar a la zona objetivo.
Existe la posibilidad de que una llave que se busca esté detrás de una puerta cerrada ... y que la llave de esa puerta sea también ... y así hasta la saciedad. Esto es esencialmente un problema de resolución de dependencias, y hay algunas formas de abordarlo, una de las cuales son las Redes de Petri. Ver este excelente artículo.
PD. Si está creando su mazmorra de manera procesal, a medida que lo hace, puede almacenar información sobre el orden de dependencia, siempre que ya conozca la posición inicial del jugador.