Du point de vue du monde réel: si vous vous dirigiez de A à B et trouviez une porte D sur votre chemin qui était verrouillée, vous vous rendriez compte que vous devez trouver la clé D. Donc, si votre IA est aussi inconnue que l'être humain typique , cela impliquerait de rechercher la clé, qui est un ensemble de minuscules étapes de recherche de chemin en soi. D'un autre côté, vous voudrez peut-être que votre IA sache, avant même de tenter un chemin, qu'il y ait une porte verrouillée sur cette route, et dans ce cas, elle saura probablement aussi où trouver la clé.
Quoi qu'il en soit, le problème est celui de la connectivité à deux niveaux. Au niveau "sur le terrain", vous savez que vous pouvez toujours vous déplacer en toute sécurité dans une zone indivise ... indivisible par des portes verrouillées, c'est-à-dire. C'est ici que vous pouvez utiliser librement votre implémentation de pathfinding A * actuelle. (Dans un exemple simpliste, vous pourriez voir une zone comme une seule pièce. Vous ne pouvez pas accéder à une autre pièce sans déverrouiller une porte. En réalité, cela pourrait être une région entière de votre donjon.) Ceci est le fondement de votre mouvement d'entité, mais c'est un peu comme se promener les yeux baissés, au lieu d'examiner d'abord la zone autour de vous - vous risquez de marcher dans un lampadaire. Ou dans ce cas, une porte verrouillée. Ainsi, vos cartes au niveau du sol sur lesquelles votre A * fonctionne doivent limiter le joueur au mouvement uniquement dans la zone actuelle.
Ensuite, il y a une carte de niveau supérieur, qui est de nature plus topologique que topographique. Il ne se soucie pas vraiment des détails sur le terrain des obstacles et ainsi de suite, il ne se soucie que de la connectivité entre les zones. Cette carte topologique contient des connexions entre des zones paires qui ont actuellement une porte verrouillée entre elles, car elle montre la connectivité idéale de toutes les zones de votre donjon. Dans ses bords - chacun représentant une porte entre des zones - il stocke quelle clé est encore nécessaire, le cas échéant, pour ouvrir cette porte, sinon elle est considérée comme ouverte. Ainsi, lorsque vous recherchez dans ce graphique le chemin le plus court, il doit limiter ce chemin trouvé aux itinéraires déjà ouverts , en vérifiant les données dans les bords pendant l'exécution de la recherche. La connectivité ici n'implique pas l'ouverture, mais plutôt une ouverture potentielle.
Lorsque vous souhaitez vous déplacer vers un point qui se trouve dans une zone distincte, vous recherchez d'abord votre carte de niveau supérieur pour trouver un chemin. (Un * ou tout autre algorithme de chemin le plus court peut être utilisé à ce niveau.) Une fois que vous avez trouvé un chemin, cette carte de niveau supérieur devrait également fournir des informations sur la porte que vous devez utiliser pour passer de votre zone actuelle à l'autre zone. Maintenant, dans la zone locale, vous pouvez effectuer une IA au niveau du sol pour accéder à cette porte. Une fois la porte atteinte, votre personnage peut passer par cette porte / portail. Il est maintenant dans la zone B. S'il s'agit de la zone cible, il peut utiliser la navigation au niveau du sol pour accéder à la clé. Si ce n'est pas le cas, vous devez répéter la première étape jusqu'à ce que vous atteigniez la zone cible.
Il y a la possibilité qu'une clé recherchée soit elle-même derrière une porte verrouillée ... et que la clé de cette porte soit également ... et ainsi de suite ad nauseum. Il s'agit essentiellement d'un problème de résolution des dépendances, et il existe plusieurs façons de résoudre ce problème, dont Petri Nets. Voir cet excellent article.
PS. Si vous créez votre donjon de manière procédurale, vous pouvez alors stocker des informations sur l'ordre des dépendances, à condition que vous connaissiez déjà la position de départ du joueur.