Do ponto de vista do mundo real: se você fosse de A a B e encontrasse uma porta D no seu caminho trancada, perceberia que precisava encontrar a chave D. Portanto, se sua IA é tão desconhecida quanto o ser humano típico , isso envolveria a busca pela chave, que é um conjunto de pequenas etapas de busca de caminhos por si só. Por outro lado, você pode querer que sua IA saiba, antes mesmo de tentar um caminho, que existe uma porta trancada nessa rota e, nesse caso, provavelmente também saberá onde encontrar a chave.
De qualquer forma, o problema é de conectividade em dois níveis. No nível "no chão", você sabe que sempre pode se mover com segurança dentro de uma zona não dividida ... dividido por portas trancadas. É aqui que você pode usar sua implementação atual de localização de caminhos A * livremente. (Em um exemplo simplista, você pode ver uma zona como um quarto individual. Você não pode chegar a qualquer outro quarto sem abrir uma porta. Na realidade, pode ser uma região inteira do seu calabouço.) Esta é a base do seu movimento de entidade, mas é como andar com os olhos abatidos, em vez de examinar primeiro a área ao seu redor - é provável que você entre em um poste de luz. Ou, neste caso, uma porta trancada. Portanto, seus mapas no nível do solo nos quais seu A * é executado devem restringir o jogador ao movimento apenas dentro da zona atual.
A seguir, existe um mapa de nível superior, mais topológico do que topográfico. Realmente não se preocupa com os detalhes dos obstáculos no terreno e assim por diante, apenas se preocupa com a conectividade entre as zonas. Esse mapa topológico contém conexões entre zonas pares que atualmente têm uma porta trancada entre elas, pois mostra a conectividade ideal de todas as zonas em sua masmorra. Em suas bordas - cada uma representando uma porta entre zonas -, ela armazena qual chave ainda é necessária, se houver, para abrir a porta; caso contrário, é considerada aberta. Portanto, ao procurar o caminho mais curto nesse gráfico, ele deve limitar o caminho encontrado apenas às rotas que já estão abertas , verificando os dados nas bordas à medida que a pesquisa é executada. A conectividade aqui não implica abertura, mas implica abertura potencial.
Quando você deseja mover para um ponto que se enquadra em uma zona separada, primeiro você pesquisa no mapa de nível superior para encontrar um caminho. (Um * ou qualquer outro algoritmo de caminho mais curto pode ser usado nesse nível.) Depois de encontrar um caminho, esse mapa de nível superior também deve fornecer informações sobre qual porta você precisa usar para ir da sua zona atual para a outra zona. Agora, na zona local, você pode fazer IA no nível do solo para navegar até essa porta. Quando a porta for alcançada, seu personagem poderá passar por essa porta / portal. Ele agora está na zona B. Se esta é a zona de destino, ele pode usar a navegação no nível do solo para ir para a chave. Caso contrário, você precisa repetir a etapa um até chegar à zona de destino.
Existe a possibilidade de que uma chave sendo procurada esteja atrás de uma porta trancada ... e que a chave dessa porta seja da mesma forma ... e assim por diante ad nauseum. Este é essencialmente um problema de resolução de dependência, e existem algumas maneiras de resolver isso, uma das quais é a Rede de Petri. Veja este excelente artigo.
PS. Se você estiver criando sua masmorra proceduralmente, ao fazê-lo, poderá armazenar informações sobre pedidos de dependência, desde que você já saiba a posição inicial do jogador.