Localize o caminho mais curto através de obstáculos quando todos os caminhos normais estiverem bloqueados

10

Estou fazendo um Tower Defense e tenho o pathfinding básico funcionando, mas tenho um problema.

Quero tornar o caminho bloqueável e, quando ocorrer um bloqueio, os corredores atacarão as torres de bloqueio.

Então, o que eu preciso é uma maneira de encontrar o caminho mais curto que, mais importante, tenha o menor número de torres no caminho.

Como faço isso?

Dani
fonte
1
não seria uma detecção de colisão dentro do seu caminho percorrível?
Prix
Como as torres de bloqueio são destrutíveis, existe realmente um caminho. Apenas o custo de atravessá-los é muito mais alto do que seguir um caminho desobstruído. (Veja a resposta de coderanger abaixo)
bummzack

Respostas:

21

Na pontuação do seu caminho, apenas passar por uma torre custa o mesmo que passar por um grande número de peças. Em geral, ele tentará contorná-los, mas se não houver esse caminho, a saída ainda passará pelo menor número de obstáculos. Você pode ajustar a penalidade para que, às vezes, eles passem em vez de percorrer todo o mapa, se você também quiser.

coderanger
fonte
gostaria de ver um exemplo de código desta implementação, simples som e robusto
DFectuoso
3
O algoritmo A * ( en.wikipedia.org/wiki/A * _search_algorithm) funciona com custos de caminho. Apenas aumente o custo para segmentos que passam por uma torre. Seus agentes tentarão evitar as torres ou, se for "mais barato" atacar uma torre, eles a atacarão. A idéia do algoritmo A * é minimizar o custo, então você deve ser capaz de conseguir o que deseja, simplesmente ajustando os custos de caminho ...
bummzack
Esta é uma ótima solução em que eu não pensaria, obrigado!
Jhocking
Apenas uma observação: conceder aos nós da torre um enorme custo de movimento sem também aumentar a estimativa usada para o algoritmo A * quando o caminho está obviamente bloqueado significa que seus agentes verificarão todos os nós da parte do obstáculo antes de decidirem uma quebra. através do ponto. Dependendo da quantidade de nós e agentes, isso pode tornar o algoritmo proibitivamente lento.
Martin Sojka