quarta-feira, 26 de maio de 2010

Design pattern Strategy para fazer a IA nos jogos

Recentemente tive que entregar um trabalho em que o objetivo principal era comparar inteligência artificial superficial e inteligência artificial aparente. Não há uma definição muito formal desses tipos de inteligência artificial. Vejam a palestra que o professor Flávio Soares Corrêa da Silva (que passou o trabalho) apresentou sobre o assunto na Campus Party. Basicamente, inteligência artificial aparente é a inteligência usada nos games.

Para o trabalho tivemos que implementar um jogo não jogável, onde existe duas partículas: uma é a partícula perseguida e a outra a perseguidora. No caso como era um projetinho rápido, a perseguida anda pelo labirinto de maneira aleatória. Para a perseguidora, tivemos que implementar duas inteligências: uma utilizando apenas A* e indo atrás da perseguida e outra que apenas vai atrás da perseguida quando a enxerga.

Como tenho estudado alguns conceitos de programação orientada a objetos, decidi fazer o trabalho em Action Script e usar o design pattern Strategy para implementar a parte da inteligência artificial.

Primeiro, decidi que a inteligência seria bem simples: ela apenas recebe um ponto do mapa (a posição da partícula) e decide para qual posição irá. Sendo assim criei uma interface Strategy:


public interface Strategy{
function execute(point:Point):Point;
}


Nas classes referentes às partículas, basta ter uma instância de alguma classe que implemente a interface e chamar o execute quando for necessário uma atualização da posição. Cada partícula deveria ter um tempo diferente de atualização então coloquei isso na classe das partículas também.

As classes relacionadas a inteligência ficaram bem modularizadas e fáceis de programar. O uso do design pattern valeu a pena!

Eis o resultado final:

Use a tecla 'a' para gerar blocos aleatórios na tela.
Use a tecla '0' e clique para colocar uma partícula que se move aleatoriamente sem colidir com as paredes.
Use a tecla '1' e clique para colocar uma partícula que usa o algoritmo A* para pegar a partícula gerada acima.
Em vez de '1', use a tecla '2' para colocar uma partícula que persegue a partícula aleatória apenas se esta for visível.





Se quiser dar uma olhada no código para ver como implementei as inteligências e outras coisas do projeto pode baixá-lo em: projeto

0 comentários:

Postar um comentário