Estou tentando melhorar o caminho para os inimigos do meu jogo. No momento, eles basicamente se movem constantemente em direção à posição exata do jogador, calculando o ângulo entre eles e os jogadores e se movendo nessa direção. Eu também tenho um algoritmo de agrupamento que evita que os inimigos se amontoem uns sobre os outros, para que eles se formem em grupos, em vez de se agruparem.
No entanto, agora que adicionei um mapa baseado em blocos, preciso que os inimigos também sejam capazes de percorrer obstáculos e paredes, por exemplo. Inicialmente, tentei adicionar um valor de separação a blocos "não passíveis de passagem", para que o algoritmo de agrupamento considerasse as paredes e os obstáculos como objetos para os quais se afastar. Eu ainda tenho que descobrir se isso é ou não viável, porque meu teste inicial mostrou os inimigos atingindo uma "parede" invisível onde não há azulejos que não podem ser percorridos, mas, por alguma razão, eles acertam e começam a disparar.
Fiquei me perguntando se poderia ser muito alto desempenho para calcular um caminho para o jogador usando A * e, em seguida, use o algoritmo flocking para evitar aglomeração. Originalmente, meu jogo seria um shooter baseado em ondas, mas decidi torná-lo baseado no nível na linha direta da Miami, por isso é provável que eu tenha menos inimigos, com a horda ocasional, e apenas faça eles mais fortes.
Esta é uma solução viável? Estou usando Java com o Slick2D como meu mecanismo de jogo. Ou existe uma solução / algoritmo melhor que lide com esses dois problemas?