Artigo 07 (Jul/2000)

Jogos com alto QI
por Renato R. Santana


Introdução

A melhor definição para Inteligência Artificial, ou IA, é a de que ela é a tentativa de transportar para os computadores a forma humana de pensar e de se comportar. Nos jogos de computador e de console, a IA faz com que os jogadores sintam-se como se estivessem jogando contra oponentes reais e inteligentes. Infelizmente isto ainda tem sido um grande desafio na programação de jogos. O objetivo deste artigo será o de apresentar IA e apontar algumas formas de desenvolvê-la.

Com o crescente número de jogos multiplayers aparecendo por aí, existe uma forte tendência de que os criadores de novos jogos se dediquem mais à rotinas multiplayers do que à IA. Se a IA de um jogo é fraca e previsível (a ponto de não ter graça jogar contra o computador), isso irá forçar com que o jogador vá on-line a procura de pessoas reais para jogar. A chave então é dar ao jogo uma característica multiplayer e ao mesmo tempo uma IA bem realística, deixando todo mundo feliz, até aqueles que não podem jogar on-line ou preferem jogar sozinhos.

Vamos abordar aqui alguns conceitos sobre técnicas que o programador de jogos pode adotar para implementar IA em seus jogos.


O Processo de Design Interativo

Ao contrário do que popularmente se pensa, para se programar jogos com IA, você não precisa de nenhum algorítmo especial e nem da última tecnologia em redes neurais. Tudo que você precisa é um pouco de criatividade e muita persistência.

Antes de tudo, tanto com IA, como com qualquer tipo de design de jogos, você pode utilizar o Processo de Design Interativo. Comece fazendo uma rotina simples que mova os inimigos - mesmo que ela seja algo tão simples como move(rnd(4)). Então, jogue e veja a sua IA fazer os movimentos. Fique observando até que algo não-inteligente aconteça (no começo isso não demora muito); então pense um pouco: a) se pergunte sobre o que o programa fez que você não gostou; b) o que deveria acontecer no lugar do que foi feito? c) o que levou você a chegar a determinada conclusão? Agora revise o seu algorítimo e adapte essa informação nele. Repita esse processo tantas vezes quanto for necessário. Este é um método bastante simples, mas no entanto, é a forma que a maioria dos desenvolvedores usa.


Achando o Caminho

Em jogos de estratégia, um algorítmo muito utilizado é o chamado "path-finding" ou "go-to". Este algorítmo nada mais é do que uma rotina que ensine um objeto ou personagem a ir de um lugar até o outro. A idéia é começar com uma rotina simples e ir aprimorando-a até chegar a algo mais sofisticado. Depois que tal rotina estiver funcionando, será possível se ter uma segunda rotina que administre os movimentos dos objetos sem no entanto se preocupar com por onde esse movimento deve ser feito (a primeira rotina cuida disso).

Você lembra que em alguns jogos antigos, os objetos, às vezes, ficavam presos em alguns lugares e outras vezes levavam muito tempo para chegarem ao lugar onde deveriam? Até hoje isso acontece em muitos jogos e é resultado de uma IA nem tão inteligente. Teste bem as suas rotinas. Force com que os objetos percorram todos os caminhos possiveis.


Dividindo e Multiplicando por 2

Uma boa tática para se encontrar o valor ideal é dobrar ou dividir por 2. Por exemplo, ajustar a velocidade ideal de movimento de um objeto, ou a quantidade pontos que daria mais uma vida ao jogador. Isso será bem mais óbvio e bem mais rápido do que testar valores um a um. Então, dobre, divida por 2, teste, revise e repita até encontrar o valor intermediário ideal.


Diferentes Tipos de IA e seus Problemas de Implementação

Em jogos de estratégia de tempo real (RTS), a IA é usada para traçar caminhos, para dar inteligência coletiva ou deixar um simples inimigo mais esperto. A IA num jogo RTS pode ser: IA estratégica, IA tática, IA decisacional de construção, avaliação de ameaças, análise de terreno, etc., tendo variações específicas conforme o tipo de jogo. Alguns problemas de IA são verdadeiros desafios. Os que têm uma representação matemática clara serão bem mais fáceis de resolver do que aqueles baseados em conceitos e abstrações.


Criação de objetos

Para cada projeto de jogo, provavelmente será necessário um novo modelo de IA, mas muito é mantido em qualquer novo modelo. Modele, não emule. Modelagem e emulação são ambos tipos de simulação, mas com grandes diferenças na abordagem do problema. Emulação tenta, meramente, parecer com alguma coisa, modelagem tenta capturar a estrutura fundamental de um objeto. Ambos têm o mesmo objetivo, mas a modelagem tem vantagens sobre a emulação:

  • No sistema emulado há um escopo muito pequeno de inteligência e autonomia - não há parâmetros do sistema com o mundo real, por exemplo.
  • Modelos são feitos de dentro para fora, enquanto que emulações são feitas de fora para dentro.
  • Emulações nunca serão simulações convincentes.

Pense de Forma Modular

Tente não olhar o problema todo do começo ao fim. Antes de mais nada, pense sobre a estrutura que permite realizar o comportamento desejado. Você não tem que entender o sistema por completo para obter a sua funcionalidade. Pensando no computador como se ele fosse um recipiente cheio de outras maquininhas você estará dando o primeiro passo certo. Hoje em dia muita gente está construindo jogos usando sistemas autônomos desde o começo do desenvolvimento. Trabalhando com esta sistemática, o foco fica no desenvolvimento do jogo (na informação, na criatividade, no jogo em si) ao invés de ficar no código. Esta forma de trabalho está se espalhando à medida que as pessoas vão se dando conta de que a criação de mundos virtuais complexos não é uma tarefa fácil se não houver uma mudança nas formas de se abordar os problemas de desenvolvimento.


A Natureza é um Ótimo Lugar para se Procurar por Ajuda

O mais incrível computador deste planeta é o cerebro biológico. A sua habilidade de se apaptar aos problemas (melhorando essa habilidade ao longo do tempo), a capacidade de generalizar e a aprendizagem entre positivo e negativo nunca foram reproduzidas dentro de um computador. Se dermos uma olhada no sistema humano, veremos que ele se resume(?) em aproximadamente 10 trilhões de células feitas de 100000 gens. Nós já estudamos e entendemos as células, mas ainda não se sabe porque que quando elas estão arranjandas de uma certa maneira formam um ser humano "pensante". Esta é uma gerência de complexidade numa escala vista em lugar nenhum - 10 trilhões de agentes cooperam de forma a criar uma consciência. Não tem uma célula única que é a encarregada de tudo. Não há um programa principal.

É possível se aprender bastante com isso. Se podemos modelar uma ponte e um tanque, nós podemos modelar "blocos biológicos" e então montar organismos desses blocos.

Se você quiser atores artificiais convincentes dentro de um mundo artificial auto consistente, então o processo biológico e as estruturas são a única forma de administrar tamanha complexidade. A natureza funciona muito bem, então é só aprender a usar os princípios já existentes.

Há um programa de computador, criado pela Cyberlife, feito com base nos princípios biológicos reais. Composto de órgãos, células, gens, etc., ele pode reagir, aprender e "pensar" sozinho, e ainda comunicar a você as suas necessidades. Uma boa análise sobre o funcionamento deste programa pode dar uma boa idéia de como dar um pouco de vida aos objetos e personagens dentro do computador.


Realismo e Diversão

O realismo é a primeira coisa a se pensar quando estamos falando de IA. De fato, realismo é o objetivo do uso de IA. Cada personagem ou objeto precisa ter vida própria (ou parecer que tem) da forma mais semelhante possível com o mundo real. Por outro lado, não podemos esquecer da diversão. Um jogo onde o programa faz com que o inimigo sempre se mova mais rápido do que o jogador não será divertido. Há um certo desafio, mas após certo tempo, o jogo fica chato, desistimulando o jogador a iniciá-lo noutra oportunidade. Mantenha sempre um equilíibrio entre o realismo e a diversão.


IA Simplificada

De um ponto de vista de programação você precisará manter o código de IA o mais simples possível. Quanto mais cálculos tiver o seu programa, mais você estará exigindo do processador. Isso pode trazer maus efeitos para o jogo. Leve em conta também que o jogo irá rodar em máquinas inferiores à sua (e superiores também).

Programar IA sem nenhum cálculo também não é possível, mas sempre que puder utilize tabelas (matrizes). Pegar um valor previamente calculado de uma tabela é muito mais rápido do que ter que calculá-lo toda vez que tal valor se faz necessário. O uso das tabelas resulta em uma IA mais inteligente e uma grande economia no processamento, que por sua vez, possibilita um maior número de frames por segundo durante o jogo.


As Coisas Mais Importantes Sobre IA

  • Tenha sempre em mente que o tamanho da rotina de IA nem sempre será proporcional à qualidade do realismo que ela dará ao usuário. A idéia é não gastar muito tempo com coisas que nem serão percebidas pelo jogador.
  • Desenvolva a sua IA pelo processo interativo. Ou seja, implemente uma rotina por mais grotesca que ela seja, e vá aprimorando a parte que se comporta de forma pior.
  • Projete de forma flexível, de tal modo que o comportamento possa ser facilmente modificado, caso necessário.
  • Faça uma IA bem modular desde o começo. Isso deixa mais fácil voltar atrás e corrigir qualquer parte do programa sem ter que mexer em muitos lugares.

Seja Profissional

Você não poderá desenvolver softwares profissionais se não agir de uma forma profissional. Nenhuma tecnologia de hardware vai ajudar se o seu projeto estiver cheio de defeitos e deixa a desejar em tudo. Caso você não tenha um controle de qualidade, trate de criar um. Faça um planejamento antes de começar, adote uma política de testes modular, e, não esqueça de documentar tudo.


Conclusão

A prática leva à perfeição! Durante o processo de adaptar uma IA para o seu jogo, tente todas as diferentes abordagens que você encontrar ou conhecer. Eventualmente você conseguirá algo que funcione - ou pelo menos que funcione melhor do que aquilo com o que você começou. Procure criar uma biblioteca com as suas rotinas. Usando uma biblioteca você programará de uma forma muito mais organizada, sem contar que depois de um certo tempo seu trabalho se desenvolverá muito mais rápido.


Referências On-Line

Inteligência Artificial:
http://www.gameai.com
http://www2k.biglobe.ne.jp/~tomo/aigames/index_e.html
http://www.gamasutra.com/features/programming/19981120/gameai_01.htm
http://www.cs.buffalo.edu/~goetz/AI/API/gameaijs.html
http://www.cs.cmu.edu/afs/cs.cmu.edu/project/ai-repository/ai/areas/games/

Cyberbiologia:
http://www.cyberlife.co.uk
http://www.creatures.co.uk
http://www.creatures2.com

Livro:
AI for Computer Games and Animation: A Cognitive Modeling Approach
by John David Funge. Hardcover (August 15, 1999)

Renato R. Santana desenvolve jogos e trabalha na Conectiva S.A.