Inteligência Artificial

A Inteligência Artificial feita para o Projeto PATTO

Bom, como foi nosso primeiro jogo e era mais um teste do engine não implementamos nada muito sofisticado para a inteligência artificial, os inimigos só precisavam atirar na direção do herói e o máximo que acontece para dificultar é o aumento do numero de inimigos que aparecem de acordo com a pontuação atingida.

A Inteligência Artificial feita para o Projeto GANNSO 

Todo jogo do tipo covert action tem vários personagens que estão pelo cenário para deixar o jogo mais emocionante, esses personagens são chamados de NPC (Non –Player Caracter ). A idéia de NPC’s é uma coisa muito antiga em jogos, já que o jogo costuma ser divertido pôr causa disso, quando você vence um NPC você esta vencendo o jogo de uma certa forma. Os fantasmas do PacMan eram NPC’s , no Doom todos os monstros que tentam te matar o jogo inteiro são NPC’s .

O objetivo da Inteligência Artificial em jogos é controlar NPC’s de forma que eles sejam pelo menos um pouco desafiadores ou ate mesmo invencíveis.

Para tanto os algoritmos implementados na inteligência artificial devem ser muito bem elaborados já que inimigos muito fáceis podem transformar um jogo num fracasso.

Uma das primeiras coisas que um NPC tem que aprender a fazer é se locomover pôr salas sem ficar travado em cantos ou batendo em paredes. Essa tarefa pode parecer simples, mas o fato de ser um jogo que vai utilizar isso leva a uma ponderação importante: quanto tempo eu tenho pra achar um caminho eficiente em uma matriz de 1920000 posições possíveis? A resposta não é muito animadora: Pouco! O pouco tempo decorre do fato de ser um um programa com muita interatividade , o jogador não pode perceber lentidão durante o jogo , isso é intolerável. A principio uma busca em largura resolveria o problema para se achar um caminho, mas essa solução não é muito boa pôr causa do tempo que requer, e esse método não daria prioridade para o melhor caminho ser seguido pelo NPC:

Para se chegar de A ate C a busca em largura acharia o caminho A -> B -> C que como pode ser visto na figura não é o melhor e assim a movimentação do NPC ficaria ruim e não natural.

Um algoritmo que foi o que eu implementei foi o A*, é um algoritmo de busca em largura que utiliza uma heurística para decidir qual o melhor caminho.

A Heurística

Na decisão de caminhos para cada novo ponto analisado eu crio uma célula com as coordenadas desse ponto , o ponto que gerou ele e o custo acumulado ate este ponto , na busca em largura essa célula é simplesmente inserido no final da fila, mas com a heurística essa célula é colocada antes das células com custo maior do que o dela, fazendo com que a busca sempre tente o caminho de menor custo antes, fazendo o caminho A -> C antes do caminho A -> B -> C que tem um custo maior como visto na figura acima.

Os custos foram implementados utilizando o sistema de custos visto na figura abaixo.

 

 

Com esse método para achar caminho implementado uma boa parte de IA inicial estava pronta mas ainda faltava modelar o comportamento de cada tipo de NPC. Em um jogo podem existir vários tipos de NPS’s , no GANNSO pôr exemplo a principio pensamos em cientistas e soldados que tem um comportamento bem diferente. Um soldado tem como objetivo patrulhar áreas e atacar intrusos , já um cientista é bem diferente, ao ver um intruso a primeiro reflexo dele seria fugir e ao invés de patrulhar ele fica trabalhando nos laboratórios, isso leva um cientista a ser menos atento. Esses comportamentos tinham que ser modelados para serem implementados na classe de IA.

Modelagem do Comportamento dos NPC’s

Para fazer um modelo de fácil visualização fizemos um autômato de estados para cada um dos NPS’s:

cientista

c1 estado inicial (pesquisando)

c2 em alerta

c3 fugindo

 

c1 ->barulho de tiro -> c2 ->barulho de tiro -> c3 ->lugar seguro -> c2 ->perigo eliminado -> c1

c1 ->barulho normal -> c1

c1 ->viu inimigo -> c3 -> lugar seguro -> c2 ->perigo eliminado -> c1

 

soldado

s1 estado inicial

s2 em alerta

s3 atacando

s4 fugindo

 

s1 ->barulho de tiro -> s2 -> vê o inimigo -> s3 -> fica muito ferido -> s4 -> lugar seguro ->s1

s3 ->mata ameaça -> s1

s2 -> não encontra nada -> s1

 

 

Transições de estado:

estado inicial : depende do NPC, no caso de um cientista pode ser pesquisando e no caso de um soldado é patrulhando

lugar seguro : lugar onde o NPC não vê mais o herói nem escuta tiros

atacando : tentando matar o herói

fugindo : fica andando ate achar um lugar seguro, de preferencia na direção oposta do herói ou pelo menos um lugar onde ele não veja o herói

 

Depois da modelagem de comportamento tentamos bolar um jeito de agregar a cada NPC alguns atributos, como a destreza , inteligência e coisas do gênero , essa idéia tem como objetivo diferenciar um NPC da mesma classe de outro, os soldados pôr exemplo não seriam todos iguais, alguns seriam mais espertos outros com uma mira melhor devido a sua destreza maior. Esses princípios foram idéias tiradas de RPG’s (Role Playing Game) onde a idéia de se Ter atributos é muito bem elaborada. Pensamos também que esses tributos deveriam ser lidos de um arquivo, porque para mudar esses valores não seria necessário recompilar tudo o que nem sempre é pratico.

Volta a Pagina Principal