Imagine um tiroteio muito simples, algo que todos sabemos:
Você é o jogador (verde). Seu movimento é restrito ao X
eixo. Nosso inimigo (ou inimigos) está no topo da tela, seu movimento também é restrito ao X
eixo. O jogador dispara balas (amarelas) contra o inimigo.
Eu gostaria de implementar uma IA para o inimigo que deve ser realmente boa em evitar as balas dos jogadores. Minha primeira idéia foi dividir a tela em seções discretas e atribuir pesos a elas:
Existem dois pesos: O "peso da bala" (cinza) é o perigo imposto por uma bala. Quanto mais próxima a bala estiver do inimigo, maior o "peso da bala" ( 0..1
onde 1 é o maior perigo). As faixas sem uma bala têm um peso igual a 0. O segundo peso é o "peso à distância" (verde-limão). Para cada faixa eu adiciono 0.2
custo de movimentação (esse valor é meio arbitrário agora e pode ser ajustado).
Simplesmente adiciono os pesos (branco) e vou para a pista com o menor peso (vermelho). Mas essa abordagem tem uma falha óbvia, porque ela pode facilmente errar os mínimos locais, pois o lugar ideal para ir seria simplesmente entre duas balas de entrada (como indicado pela seta branca).
Então, aqui está o que estou procurando:
- Deve encontrar um caminho para a tempestade de balas, mesmo quando não há lugar que não imponha a ameaça de uma bala.
- O inimigo pode desviar de maneira confiável das balas escolhendo uma solução ótima (ou quase ótima).
- O algoritmo deve ser capaz de levar em consideração a velocidade de movimento da bala (como eles podem se mover com velocidades diferentes).
- Maneiras de ajustar o algoritmo para que diferentes níveis de dificuldade possam ser aplicados (mudos para inimigos super inteligentes).
- O algoritmo deve permitir objetivos diferentes, pois o inimigo não apenas deseja fugir das balas, mas também deve ser capaz de atirar no jogador. Isso significa que as posições em que o inimigo pode disparar contra o jogador devem ser preferidas quando se desviar de balas.
Então, como você lidaria com isso? Ao contrário de outros jogos desse gênero, eu gostaria de ter apenas alguns inimigos, mas muito "habilidosos", em vez de muitos inimigos estúpidos.