IA procurar abrigo

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

IA procurar abrigo

Mensagem por saim em Seg 10 Fev 2014, 15:26

Normalmente, eu procuro fazer inteligências artificiais agressivas. Quando tenho uma mais defensiva, o jogador tem apenas uma personagem. Ontem me peguei quebrando a cabeça pra imaginar uma IA defensiva contra múltiplos inimigos. Deixa eu descrever melhor o cenário.

Um campo aberto, visão top-down. Munição controlada (não é fácil pegar munição, a IA também não tem munição infinita). Fora alguns abrigos específicos, não há lugar seguro. Esses abrigos são blocos irregulares. Os tiros saem em todas as direções. O jogador controla vários objetos ao mesmo tempo. Pra ficar fácil de visualizar, pense em múltiplos jogadores no mesmo teclado - tendo dois ou mais, pra mim já dá. As ações do jogador e da IA são mover só mover e atirar. Os tiros atingem o alvo no instante em que são disparados. Pra facilitar, mirar não gasta tempo, os objeto giram 360º instantaneamente. A mira é sempre perfeita.

Variações possíveis: o ato de atirar pode levar algum tempo, tipo um segundo. O tiro poderia passar por cima do bloco que serve de abrigo ao objeto que está atirando. O tiro pode se deslocar menos rapidamente. O jogo pode funcionar em turnos, de modo que cada objeto tenha uma distância pra se mover e/ou um número de tiros pra disparar (como se cada tiro ou cada metro gastasse um tanto de uma variável "ação"), mas um objeto agindo de cada vez. Os blocos podem ser regulares e o jogo todo ficar numa grid.

Ok. Esse é o cenário.

Se o jogador tivesse apenas uma personagem, minha IA, o tentar se esconder, iria em direção ao bloco mais próximo e, traçando uma linha do jogador até o bloco, ficaria do lado oposto ao jogador.

Mas tendo mais de uma direção pra me opor, eu não consigo determinar qual seria o ponto seguro mais próximo. Essa é minha primeira dúvida. Como determinar o ponto mais seguro quando múltiplos inimigos estão mirando?
Outra coisa... como determinar quando não existirem mais pontos seguros. Por exemplo, o jogador faz uma jogada sensacional e cerca completamente a IA. O bloco mais próximo está completamente cercado, tem 360 objetos-jogador em volta dele. Como definir que não dá mais pra se esconder?
A terceira dúvida é pra depois de resolvida as primeiras... supondo que eu determine como me esconder de muitos inimigos e que o bloco adjacente esteja completamente cercado, mas exista um bloco ao meu alcance com boa possibilidade de me esconder. Como encontrá-lo? Melhor ainda, como definir a melhor posição pra me esconder?
Quarta dúvida, pra terminar de viajar: e se eu quiser que essa IA tenha um comportamento defensivo e agressivo ao mesmo tempo? Quer dizer, como ir de proteção em proteção até atacar o jogador, com segurança?

Por enquanto, são apenas perguntas teóricas, então evitem responder com códigos. Sei que tem hora que é mais fácil colocar umas linhas de código que descrever a ação, mas fora isso, não precisa de código. Quero mesmo é uma luz quanto a como abordar o problema...

saim

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

Re: IA procurar abrigo

Mensagem por PedroX em Seg 10 Fev 2014, 15:38

Boa pergunta. Quando descobrir me avise.

Agora falando sério.

Como determinar o ponto mais seguro quando múltiplos inimigos estão mirando?
O jeito é descobrir todas os possíveis esconderijos. Então você calcula uma nota pra cada um, dependendo de quantos inimigos podem atirar nessa posição.

Como definir que não dá mais pra se esconder?
Quando não houver possibilidades.

como definir a melhor posição pra me esconder [quando completamente cercado]?
Baseando-se na nota.

como ir de proteção em proteção até atacar o jogador, com segurança?
Aí teria as seguintes possibilidades:

Mover somente para abrigos igualmente ou mais seguros, e mais próximos do jogador, ou não.
Mover para qualquer abrigo mais próximo do jogador.

A pergunta que sobra é: como aumentar a rapidez nessa procura?

Edit: Estou sem o GM, porque o Studio não abre e os projetos do GM:8 não rodam ( confused ).

Pra quebrar o galho, ou melhor, a árvore inteira, estou usando o LateralGM com o ENIGMA. Quando eu resolver alguns bugs aqui, vou tentar fazer um exemplo.

PedroX

Ranking : Nota C
Número de Mensagens : 6034
Idade : 21
Data de inscrição : 26/07/2008
Notas recebidas : C+B
Reputação : 286
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: IA procurar abrigo

Mensagem por luiz_eldorado em Seg 10 Fev 2014, 17:04

Não acho boa ideia a do PedroX, pois pelo que li os "esconderijos" são irregulares, então o jogo teria que calcular automaticamente quais são esses esconderijos.

Não sei como isso pode ajudar, mas esse sistema teria uma analogia ao sistema de iluminação dos jogos 2d. Você tem um ponto de luz (inimigo do bot) e os objetos (os esconderijos). A parte "vísível" ficaria mais clara e a parte "invisível" ficaria preta. Então nesses locais pretos seriam os esconderijos. Acho que essa direção entre inimigo e bot deve ser calculada primeiro, antes de fazer o bot ir até o bloco.

Se uma engine de luz pode calcular os pontos claros e escuros, não deve ser difícil fazer os pontos de esconderijo para o bot.

saim escreveu:A terceira dúvida é pra depois de resolvida as primeiras... supondo que eu determine como me esconder de muitos inimigos e que o bloco adjacente esteja completamente cercado, mas exista um bloco ao meu alcance com boa possibilidade de me esconder. Como encontrá-lo? Melhor ainda, como definir a melhor posição pra me esconder?
Nesse caso é a mesma coisa que em cima, ver os "pontos de escuridão". Se um esconderijo está cercado, ele estaria totalmente claro, então não é válido como esconderijo.

luiz_eldorado

Ranking : Nota C
Número de Mensagens : 928
Idade : 17
Data de inscrição : 30/07/2011
Notas recebidas : C
Reputação : 47
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 1

http://luizpontes.tk/

Voltar ao Topo Ir em baixo

Re: IA procurar abrigo

Mensagem por saim em Seg 10 Fev 2014, 18:16

@PedroX: Talvez eu não tenha me expressado bem. O campo todo é esconderijo, ao mesmo tempo em que não é. Eu estou escondido no momento em que existe um bloco entre eu e meu inimigo.
Eu gosto muito da idéia de dar notas pra posições. Me lembra o A*
off:
comentei contigo que consegui entender aquele link que você mandou, relativo ao slide puzzle? No final, não era tão complicado, mas certamente requer atenção ao ler.
Mas se todo o campo pode ser esconderijo, como dar uma nota? Talvez usando aquela modificação que divide a tela em grids (também como o A*)... Aí, cada célula da grid poderia ter um adicional negativo (existe isso? adicional negativo?) se o collision_line de CADA inimigo conseguir passar por ela. Nesse caso, teríamos um loop do tamanho da quantidade de inimigos, o que não parece absurdo, talvez até pra colocar no step!!!
Mais que isso, teríamos as melhores posições próximas ao bot, o que já dá um avanço excelente à solução do problema de quando completamente cercado.
É, acho que entendi sua idéia. Gostei dela. Mais, dá pra bolar um joguinho de estratégia, baseado nisso.
O problema não é tanto fazer um jeito rápido de calcular a solução, mas evoluir essa IA pra prever as posições que o jogador PODE estar (mas isso já não faz parte do escopo do tópico).

@luiz_eldorado: Cara, MUITO parecido com sistema de iluminação. Só que sistemas de iluminação (que eu conheço, pelo menos) não me dão pontos iluminados, mas pontos que colidam com masks. Essas masks estão sempre numa direção, então fica mole saber se há colisão ou não. No caso do meu problema, eu quero determinar uma posição em que a luz não chegue, que pode (provavelmente será) ser diferente da posição em que estou. Então eu não tenho o ângulo da mask. Pode ser qualquer ângulo.
Mais uma vez, caímos na necessidade de dividir a tela numa grid e testar, célula-por-célula, se a luz chega lá e em que intensidade. Na verdade, não é muito diferente da idéia do PedroX, só foi colocada de forma diferente.

Tem uma coisa que essa idéia deixa em aberto, mas parece fácil de solucionar. Dependendo da disposição da room e situação de jogo, pode acontecer de a célula mais segura ficar longe das células com blocos, o que não convence como uma simulação de um jogador real (pode até ser mais eficiente!). Mas aí, podemos dar um valor maior pras células adjacentes aos blocos.
Aliás, em analogia ao A*, podemos dar esse valor "de bloco" pra cada célula logo no início do jogo, o que aceleraria o processamento na hora de calcular o melhor abrigo no momento.

ABRIGO! Essa é a palavra. Esqueçam esconderijo.

saim

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

Re: IA procurar abrigo

Mensagem por Kapoty em Qui 13 Fev 2014, 11:53

Sei que não queria códigos muito menos uma engine, mas como a solução já foi dada no tópico, eu resolvi criar está engine:

https://dl.dropboxusercontent.com/u/78063995/Saim.gmk

Ela está toda comentada.

Kapoty

Ranking : Nota B
Número de Mensagens : 635
Data de inscrição : 05/11/2011
Notas recebidas : E + D + C + B + D +B + A
Reputação : 22
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 1

Voltar ao Topo Ir em baixo

Re: IA procurar abrigo

Mensagem por felipejoys em Qui 13 Fev 2014, 14:37

Pra primeira dúvida... o meio de onde você vê onde há a maior brecha sem inimigos! Não em coordenadas, mas em ângulos. Pegue os ângulos de ataque dos inimigos, calcule o raio a partir de si que une eles (por exemplo, um inimigo em 10 e um em 330 daria 40º), pegue o centro de todos e inverta (seguindo o exemplo, o centro de 10 para 330 seria 350º, basta mover-se na direção oposta, tirando 180º). Se quiser detalhar, pegue a maior brecha entre eles a partir desse ângulo resultante. Assim ele iria para o caminho com menos concentração de inimigos, mas com a maior brecha entre eles também. Não sei, só uma idéia.

felipejoys

Número de Mensagens : 56
Data de inscrição : 29/12/2013
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: IA procurar abrigo

Mensagem por PedroX em Dom 16 Fev 2014, 15:43

Interessante seu exemplo, Kapoty. Agora só é preciso melhorar a performance, já que não dá pra por no Step por enquanto. E seria bom 'prever o futuro', conforme você comentou.

PedroX

Ranking : Nota C
Número de Mensagens : 6034
Idade : 21
Data de inscrição : 26/07/2008
Notas recebidas : C+B
Reputação : 286
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: IA procurar abrigo

Mensagem por Kapoty em Sab 12 Abr 2014, 15:18

Desculpe-me reviver o tópico mas, saim, conseguiu resolver seu problema?

Kapoty

Ranking : Nota B
Número de Mensagens : 635
Data de inscrição : 05/11/2011
Notas recebidas : E + D + C + B + D +B + A
Reputação : 22
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 1

Voltar ao Topo Ir em baixo

Re: IA procurar abrigo

Mensagem por Conteúdo patrocinado Hoje à(s) 09:52


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum