ESCOLA DE ENGENHARIA DE PIRACICABA

BACHARELADO EM CIÊNCIA DA COMPUTAÇÃO

Kleber de Oliveira Andrade

Um Algoritmo Evolutivo para Adaptação das Estratégias dos NPCs em um Jogo de Ação

Piracicaba 2008

Kleber de Oliveira Andrade

Um Algoritmo Evolutivo para Adaptação das Estratégias dos NPCs em um Jogo de Ação

Trabalho de conclusão do curso de Ciência da Computação apresentado à Escola de Engenharia de Piracicaba como parte dos requisitos necessários à aprovação na disciplina Trabalho de Graduação.

Orientadora: Profa. Dra. Ana Estela Antunes da Silva Co-orientador: Prof. Msc. Marcio Kassouf Crocomo

Piracicaba 2008

FOLHA DE APROVAÇÃO

Kleber de Oliveira Andrade

Um Algoritmo Evolutivo para Adaptação das Estratégias dos NPCs em um Jogo de Ação

Trabalho de conclusão do curso de Ciência da Computação apresentado à Escola de Engenharia de Piracicaba como parte dos requisitos necessários à aprovação na disciplina Trabalho de Graduação.

Data de aprovação: 24/11/2008

Banca Examinadora

Titulação e nome: Prof. Msc. José Martins Jr Instituição: Escola de Engenharia de Piracicaba Assinatura: _______________

Titulação e nome: Prof. Msc. Luis Henrique Sacchi Instituição: Escola de Engenharia de Piracicaba Assinatura: _______________

Titulação e nome: Prof. Msc. Márcio Kassouf Crocomo Instituição: ICMC – USP Assinatura: _______________

DEDICATÓRIA

À minha família, meus professores e aos meus valiosos amigos.

AGRADECIMENTOS Deus, por me conceder o privilégio da Vida. À minha amiga, professora e orientadora Dra. Ana Estela Antunes da Silva que me apresentou a área de Inteligência Artificial e me guiou neste projeto, me mantendo sempre firme na idéia base para não fazer coisas desnecessárias e obter um ótimo resultado. Ao amigo e co-orientador, Msc. Márcio Kassouf Crocomo, que sempre esteve disposto a responder minhas dúvidas sobre algoritmos evolutivos e jogos. Sem essa ajuda, certamente o caminho desse trabalho teriam sido mais árduo. Aos meus orientadores, muito obrigado pela ajuda, interesse, dedicação e contribuição. Aos meus professores que me transmitiram conhecimentos valiosos, sempre me dando apoio e motivação, e com quem pude compartilhar uma maravilhosa jornada acadêmica. À minha família, pela simples existência em minha vida. Nenhuma palavra é capaz de expressar toda minha gratidão à minha mãe e meus irmãos, que estiveram sempre me apoiando e torcendo por mim. A todos os meus amigos dos mais antigos aos mais recentes, pela companhia e momentos vividos em minha vida antes e durante o período da graduação. Ao professor Msc. Rogério Leon Pereira da Universidade Federal de Maringá, que compartilho idéias de jogos desde 2007 e que apesar de nunca ter o conhecido pessoalmente, meu muito obrigado. Pessoal do portal UNIDEV e do grupo XNA-BR que me ajudaram na compreensão de alguns pontos importantes no desenvolvimento do jogo. À Leonardo Trindad e Felipe Aron que me ajudaram com os conceitos de programação em XNA, e mesmo só mantendo contato virtualmente, muito cooperaram para a implementação do jogo. Aos colegas de trabalho e aos diretores da Elos & PPR Bombas e Válvulas, meu muito obrigado pelo apoio que me deram durante todo esse período e por me darem a oportunidade de aprender e crescer não só profissionalmente, mas também como pessoa. Para todos aqueles que leram este trabalho e deixaram suas valiosas contribuições, e também aos que sempre perguntaram sobre o andamento deste projeto: obrigado, o interesse demonstrado por vocês foi responsável pela qualidade que pude atingir neste trabalho. Espero que gostem do resultado final!

“Para o Infinito, e Além!” Buzz Ligthyear, Personagem do filme Toy Story.

RESUMO Durante este trabalho foi desenvolvido um Algoritmo Evolutivo e elaborado um jogo em que as estratégias adotadas pelos personagens não controlados pelo jogador se adaptam de acordo com as estratégias utilizadas pelo jogador a cada batalha. Desta forma o Algoritmo Evolutivo utilizado tende a aumentar a atratividade do software. Para a elaboração deste jogo chamado de “O Último Sobrevivente”, foi utilizada a linguagem C# e o framework XNA desenvolvido pela Microsoft. Foi realizada uma pesquisa sobre a aplicação de Inteligência Artificial em jogos, mais especificamente, Algoritmos Evolutivos em jogos. O presente trabalho vem a contribuir com o estado da arte, onde são poucas as publicações de aprendizagem utilizando Algoritmos Evolutivos aplicados a jogos em tempo real, sendo assim, o mesmo contribui com mais um estudo de caso. Graças ao Algoritmo Evolutivo implementado, o jogo produzido mostrou adaptar-se às ações do jogador. Palavras-chave: Inteligência artificial, jogos eletrônicos, videogames, algoritmo evolutivo, aprendizagem.

ABSTRACT An evolutionary algorithm was developed to support a game in which the non-player character strategies are adapted, during each battle, accordingly to the human player strategies. In this way, the evolutionary algorithm tends to improve the software attraction to the players. In order to develop the game called “O ultimo sobrevivente” (The last survivor) the C# language and the XNA framework (by Microsoft) were utilized. A research in Artificial Intelligence, specifically in Evolutionary Algorithms, was developed in order to assimilate the main concepts of the area. The present work tries to contribute to the state of art where there are few publications using evolutionary algorithms applied to game in real time execution. In this way the work contributes to one more case study. Accordingly to the evolutionary algorithm the developed game was very well adapted to the player´s actions. Keywords: Artificial intelligence, electronic games, consoles, evolutionary algorithms, learning.

LISTA DE ILUSTRAÇÕES Figura 1 – Tennis for Two (1958) rodado na tela de um osciloscópio ............12 Figura 2 – Spacewar! (1961) rodado no computador PDP-1 ........................13 Figura 3 – Magnavox Odyssey, o primeiro console doméstico ......................13 Figura 4 – Evolução de gráficos do personagem Mario da Nintendo. ............14 Figura 5 – Jogo Black & White utiliza RNA para aprendizagem dos NPCs....19 Figura 6 – Jogo Doom....................................................................................23 Figura 7 – Jogo Monkey Island ......................................................................24 Figura 8 – Jogo Championship Manager 2008...............................................24 Figura 9 – Jogo Civilization III ........................................................................25 Figura 10 – Jogo Neverwinter Nights 2 ..........................................................26 Figura 11 – Jogo World of Warcraft................................................................27 Figura 12 – Camadas do XNA Framework.....................................................30 Figura 13 – Rascunho da interface do jogo....................................................33 Figura 14 – Tela do jogo “O Último Sobrevivente” .........................................35 Figura 15 – MEF da tomada de decisão de um NPC .....................................37 Figura 16 – Fluxograma de funcionamento do AE .........................................38 Figura 17 – Exemplo de cromossomo. Cada célula representa um alelo ......39 Figura 18 – Exemplo de crossover.................................................................41 Figura 19 – Exemplo de mutação...................................................................42 Figura 20 – Evolução do experimento 1, Média Móvel Aptidão / Geração.....43 Figura 21 – Evolução do experimento 2, Média Móvel Aptidão / Geração.....44 Figura 22 – Agrupamento formado pelos NPCs.............................................45

LISTA DE TABELAS Tabela 1 – Linha de tempo da IA em jogos ....................................................18 Tabela 2 – Exemplo de entradas e suas respectivas saídas..........................36 Tabela 3 – Exemplo de população onde cada indivíduo é um NPC...............40

LISTA DE ABREVIATURAS E SIGLAS AE AG API C# CE CG EE IA IDE MEF MMOG NPC PE RNA RPG RTS SDK UML XNA Algoritmo Evolutivo Algoritmo Genético Application Programming Interface C Sharp, linguagem de programação Computação Evolutiva Computação Gráfica Estratégia Evolucionária Inteligência Artificial Integrated Development Environment Máquina de Estado Finito Massively Multiplayer Online Game Non-Player Character, personagem não controlado pelo jogador Programação Evolucionária Redes Neurais Artificiais Role Playing Game, jogo de interpretações de papéis Real Time Strategy, jogo de estratégia em tempo real Software Development Kit Unified Modeling Language XNA`s Not Acronymed

Sumário 1 Introdução ...................................................................................................12 1.1 Apresentação dos orientadores................................................................15 1.2 Objetivos ..................................................................................................16 1.3 Objetivos específicos ...............................................................................16 2 Revisão bibliográfica ...................................................................................16 2.1 Inteligência Artificial..................................................................................17 2.1.1 Padrões de movimento..........................................................................19 2.1.2 Máquina de Estado Finito......................................................................20 2.1.3 Redes Neurais Artificiais .......................................................................20 2.1.4 Scripting ................................................................................................21 2.2 Computação Evolutiva .............................................................................21 2.3 Gêneros de Jogos ....................................................................................22 2.3.1 Jogos de Ação.......................................................................................23 2.3.2 Jogos de Aventura ................................................................................23 2.3.3 Jogos Esportivos ...................................................................................24 2.3.4 Jogos de Estatégia ................................................................................25 2.3.5 Role-Playing Game (RPG) ....................................................................25 2.3.6 Jogos Massivos de Mundo Persistente (MMOG) ..................................26 2.4 Trabalhos relacionados ............................................................................27 3 Atividades Realizadas .................................................................................29 3.1 Recursos necessários ..............................................................................29 3.2 XNA ..........................................................................................................29 3.2.1 Camadas do XNA..................................................................................30 3.2.2 Requisitos do sistema para desenvolver o jogo ....................................31 3.3 O Projeto do jogo .....................................................................................32

13

3.3.1 A idéia e o rascunho do jogo .................................................................32 3.3.2 A interface .............................................................................................33 3.3.3 O Jogo...................................................................................................34 4 O Algoritmo Evolutivo do Jogo ....................................................................38 4.1 Cromossomos ..........................................................................................39 4.2 População ................................................................................................39 4.3 Função de Pontuação ..............................................................................40 4.4 Método de seleção ...................................................................................40 4.5 Crossover .................................................................................................41 4.6 Mutação....................................................................................................42 5 Resultados ..................................................................................................42 6 Conclusões..................................................................................................45 6.1 Dificuldades e Limitações.........................................................................46 6.2 Trabalhos Futuros ....................................................................................47 7 Referências bibliográficas ...........................................................................48 8 Bibliografia...................................................................................................51 ANEXOS ........................................................................................................53

12

1 Introdução As primeiras tentativas de se criar um jogo eletrônico segundo Kent (2001), foi em 1958 no Brookhaven National Laboratories em Nova Iorque, pelo físico Willy Higinbotham. O “Tennis for Two” (Figura 1) era exibido em um osciloscópio e processado por um computador analógico. Willy morreu no dia 10 de Novembro de 1995, porém ele não é lembrado por inventar o primeiro jogo eletrônico, e sim por ter contribuído com a criação da primeira bomba atômica que destruiu as cidades de Hiroshima e Nagasaki durante a segunda guerra mundial.

Figura 1 – Tennis for Two (1958) rodado na tela de um osciloscópio

Mas para muitos adoradores de jogos clássicos, o primeiro jogo eletrônico chama-se Spacewar! (Figura 2), desenvolvido por Steve Russel em 1961 durante a sua graduação no MIT (Massachussets Institute of Technology) (DEMARIA, 2004). Spacewar é um jogo no qual dois jogadores se envolvem em uma batalha espacial e tentam derrotar o oponente com torpedos e, ao mesmo tempo, evitar uma representação do sol que fica no centro da tela. Uma das pessoas que tinha contato com o jogo era o engenheiro Ralph H. Bear que em 1971 fecha contrato com a

13

Magnavox e lança em 1972 o primeiro console doméstico, o Magnavox Odyssey (Figura 3).

Figura 2 – Spacewar! (1961) rodado no computador PDP-1

Figura 3 – Magnavox Odyssey, o primeiro console doméstico

A indústria de jogos procurou tornar os jogos mais realistas, para atrair novos jogadores e aumentar o faturamento. Desde então, a criação de jogos evoluiu, e os jogos eletrônicos começaram a chegar a um nível impensável de realidade nos últimos 20 anos. Um exemplo de evolução dos gráficos pode ser visto na figura 4.

14

Figura 4 – Evolução de gráficos do personagem Mario da Nintendo.

Em 2003 a indústria de jogos superou a indústria do cinema, movimentando US$ 28 bilhões no mundo inteiro. Esse grande movimento de dinheiro é por causa da melhoria de gráficos, que implica em melhoria de componentes de hardware, melhoria dos enredos, em jogabilidades, entre outros. A indústria de jogos eletrônicos no Brasil é responsável por 0,16% do faturamento mundial. Este ano, a produção de games no Brasil deve movimentar 87,5 milhões de reais, um crescimento de 16,6% em relação ao faturamento de 76,5 milhões de reais verificado em 2007, revela o mais novo levantamento da Abragames (Associação Brasileira das Desenvolvedoras de jogos Eletrônicos). Desenvolver jogos é uma atividade multidisciplinar na área da computação, dentre as matérias envolvidas estão: projeto, programação, desenho, música, efeitos sonoros, hardware, redes, inteligência artificial, matemática e física. Em função da diversidade de matérias envolvidas, os jogos se mostram um bom ambiente para a pesquisa de novas tecnologias para estas áreas da computação. Inicialmente os fabricantes de jogos têm concentrado grandes esforços ao realismo da ambientação gráfica. No entanto, autores como Sweetser (2002) dizem que o próximo foco a ser desenvolvido no mercado de jogos será com personagens que se

15

comportam de forma realista e podem aprender a se adaptar, ao invés de personagens mais visivelmente reais (CROCOMO, 2006). Tais informações estão sendo reforçadas devido ao aumento do investimento das empresas em jogos com qualidade em sua inteligência artificial. Dentre as diversas técnicas envolvidas em IA, os Algoritmos Evolutivos (AE) têm sido bastante utilizados para evoluir comportamentos e estratégias de jogos desde os anos 80. Porém, a técnica encontra resistência em ser utilizada pelos desenvolvedores de jogos, pois autores como Spronk (2004) afirmam que esta técnica (assim como a técnica de Redes Neurais Artificiais) permite a obtenção de comportamentos não aceitáveis durante o processo de aprendizado dos

personagens se aplicada de maneira errada (CROCOMO, 2006). Alguns trabalhos realizados por: Crocomo (2006), Crocomo (2008) e Demasi (2004) já conseguiram, com sucesso, utilizar AEs para gerar estratégias pelos personagens não controlados pelo jogador (NPCs – Non-Player Characters). O presente trabalho procura contribuir com a aplicação dos AEs no aprendizado dos NPCs de um jogo, onde existem poucos trabalhos encontrados até o momento.

1.1 Apresentação dos orientadores Os dois orientadores deste projeto, os professores Ana Estela A. Silva e Marcio K. Crocomo tiveram papéis importantes para a conclusão deste trabalho, e foram escolhidos pela capacidade profissional, conhecimento e interesses nas áreas de Inteligência Artificial e Jogos. A professora Ana Estela Antunes da Silva é doutora em Engenharia da Computação pela UNICAMP (Universidade Estadual de Campinas), mestre em Ciência da Computação na Massey University, graduada em Ciência da Computação na UNICAMP. Atualmente é professora do Programa de Mestrado em Ciência da

16

Computação na UNIMEP (Universidade Metodista de Piracicaba) e professora na EEP (Escola de Engenharia de Piracicaba). Marcio Kassouf Crocomo é mestre em Ciência da Computação e Matemática Computacional pela USP São Carlos (Universidade de São Paulo), graduado em Ciência da Computação a USP São Carlos e desde 2007 ministra aulas de Desenvolvimento de Jogos para Computador e Processamento de Imagens na UNIMEP. Tem diversos artigos publicados, sendo dois deles na SBGames (Simpósio Brasileiro de Jogos e Entretenimento Digital) no ano de 2005 e 2007.

1.2 Objetivos O objetivo deste trabalho consiste em desenvolver um algoritmo evolutivo (AE) que seja responsável pelas estratégias dos NPCs em um jogo de ação. Desta forma, este AE deverá propor desafios diferentes ao jogador a cada novo jogo, aumentando a atratividade e jogabilidade do software.

1.3 Objetivos específicos Para viabilizar o desenvolvimento do trabalho proposto, alguns objetivos específicos foram realizados: estudar e aprender a linguagem C# e o framework XNA para o desenvolvimento do jogo; desenvolvimento de um AE adequado ao jogo, capaz de produzir soluções adaptativas para o problema; modelagem e programação de um jogo que mostre um bom ambiente para os testes do AE; verificar a adaptação dos personagens colhendo e analisando os resultados.

2 Revisão bibliográfica Para o desenvolvimento deste trabalho, foram realizado estudos nos seguintes tópicos: Inteligência Artificial e Algoritmos Evolutivos. Tais tópicos são explicados

17

nas subseções seguintes. Ainda neste tópico é comentado um pouco sobre os gêneros de jogos e alguns trabalhos relacionados são explicados.

2.1 Inteligência Artificial Segundo Bourg e Seemann (2004), “é mais apropriado pensar que IA é o comportamento inteligente demonstrado pela máquina que foi criada, ou talvez o cérebro artificial por trás daquele comportamento inteligente”. Os trabalhos em torno da IA começaram logo a após a Segunda Guerra Mundial, e o próprio nome foi cunhado em 1956 (RUSSEL e NORVIG, 2004). Para aqueles que desenvolvem jogos eletrônicos, a IA estudada no meio acadêmico é diferente da IA aplicada nos jogos (SCHAWAB, 2004). Segundo kishimoto (2004), a principal diferença entre as duas é o objetivo de busca de cada uma. A IA no meio acadêmico, busca resolver problemas complexos como, reconhecimento de sinais e imagens, entender e construir agentes (SCHAWAB, 2004). Nos jogos de entretenimento o objetivo da IA é a diversão, mas para jogos sérios os objetivos são os mesmo da IA acadêmica. A importância da IA nos jogos é quanto aos resultados que o sistema irá gerar, e não como o sistema chega até os resultados. Isso se deve pelo fato que jogos eletrônicos são negócios, sendo assim, os consumidores os compram em busca de diversão, e não pensando na maneira como a inteligência de um personagem do jogo foi criada, desde que ela transforme o jogo divertido e desafiador, além de tomar decisões coerentes com o contexto do jogo (TOZOUR, 2002) (SCHWAB, 2004) (KISHIMOTO, 2004). Segundo Perucia (2005) IA é um dos recursos que são muito utilizados nos jogos eletrônicos. No qual, diversos elementos do jogo exibem, de uma forma ou de outra, certo nível de inteligência e o grande objetivo de seu uso, é desafiar o jogador.

18

No começo da história dos jogos eletrônicos, a programação de IA era mais usualmente conhecida por “programação de jogabilidades”, pois não havia nada de inteligente sobre os comportamentos exibidos pelos NPCs (SCHAWAB, 2004). A tabela 1 contém alguns exemplos de como a IA foi utilizada nos jogos com o passar do tempo.

Tabela 1 – Linha de tempo da IA em jogos

Ano 1962 1972 1974 1975 1978 1980 1990 1993 1996 1998

Descrição Primeiro jogo de computador, Spacewar, para 2 jogadores. Lançamento do jogo Pong, para 2 jogadores. Jogadores tinham que atirar em alvos móveis em Pursuit e Qwak. Gun fight lançado, personagens com movimentos aleatórios Space Invaders contém inimigos com movimentos padronizados, mas também atiram contra o jogador. O jogo Pac-man conta com movimentos padronizado dos inimigos, porém cada fantasma (inimigo) tem uma “personalidade” sobre o mundo em que caça o jogador. O primeiro jogo de estratégia em tempo real, Herzong Wei, é lançado. Junto, os jogadores puderam noticiar uma péssima busca de caminho. Doom é lançado como primeiro jogo de tiro em primeira pessoa. BattleCruiser: 3000AD é publicado como o primeiro jogo a utilizar redes neurais em um jogo comercial. Half-Life é lançado e analisado como a melhor IA em jogos até a época, porém, o jogo utiliza IA baseada em scripts.

IA utilizada Nenhuma Nenhuma Padrões de Movimento Padrões de Movimento Padrões de Movimento Padrões de Movimento Máquina de Estados Máquina de Estados Redes Neurais Máquina de Estados / Script Diversos

O jogo Black & White (figura 5) é alvo da mídia a respeito de como as criaturas do jogo aprendem com as decisões 2001 feitas pelo jogador. Utiliza redes neurais, reinforcement1 e observational learning2. Fonte: (Schwab, 2004).

Reinforcemente learning - aprendizagem por reforço (reinforcement learning) (Sutton e Barto, 1998) consiste, basicamente, em fazer um agente escolher suas ações se baseando apenas na interação com o ambiente
2

1

Observational learning - aprendizagem supervisionada consiste em dizer ao agente qual deveria ter sido a ação correta para cada estado.

19

Algumas técnicas de IA utilizadas em jogos como: padrões de movimento, MEF, RNA e Script, serão descritas nos subtópicos.

Figura 5 – Jogo Black & White utiliza RNA para aprendizagem dos NPCs

2.1.1 Padrões de movimento Os padrões de movimento foram utilizados nos primeiros jogos eletrônicos da história, e são compostos por movimentos aleatórios, algoritmos de perseguição e evasão. Movimentos aleatórios são implementados obtendo um valor aleatório e incrementando a posição de um personagem com tal valor. O algoritmo de perseguição verifica a posição do adversário que ele quer perseguir e avança em sua direção. O algoritmo de evasão faz o personagem se distanciar de um determinado personagem. Os padrões de movimento simplesmente fazem com que um personagem se movimente em um determinado padrão (LAMOTHE, 1999), porém era utilizado na época pela falta de memória e a limitação existente na velocidade de processamento (SCHWAB, 2004).

20

2.1.2 Máquina de Estado Finito As máquinas de estado finito são compostas de um conjunto de estados predefinidos e um conjunto de regras que definem a transição entre os estados, geralmente os estados são alguma ação ou tipo de comportamento que o personagem deve executar e podem também apresentar algum evento a ser executado no ambiente do jogo (KARLSSON, 2005). Ainda segundo Karlsson (2005), a MEF é uma técnica bastante utilizada nos jogos, pois apresenta um ótimo custo/benefício: rápida implementação, fácil depuração e baixa complexidade. As MEFs apresentam limitações, pois seu método de programação torna previsível a estratégia utilizada pelo computador, já que, dada uma situação, a MEF sempre escolherá a mesma ação (KARLSSON, 2005).

2.1.3 Redes Neurais Artificiais As redes neurais (RNs) são simulações computacionais simplificadas do funcionamento do cérebro humano. O conhecimento é adquirido a partir do ambiente envolvente através de um processo de aprendizagem, e esse conhecimento é armazenado nas redes. O primeiro modelo de RNs simulando máquinas foi introduzido por McCulloch e Pitts (1943). Hebb (1949) e Rosenblatt (1958) apresentam, respectivamente, o modelo básico de rede de auto-organização e o modelo Perceptron de aprendizado supervisionado. Hopfield (1982) descreve a utilização de redes simétricas para otimização e Rumelhart et all. (1986), o método de treinamento backpropagation. Muitos desenvolvedores de jogos oferecem resistência ao uso desta técnica, devido ao fato da mesma permitir aprender algo “estúpido”. Como se procura manter um certo grau de inteligência aparente por parte dos NPCs, a solução passa por fazer a aprendizagem durante o desenvolvimento do jogo (aprendizado off-line)

21

(YANNAKAKIS, 2005), para que esta possa ser aferida de acordo com as pretensões do jogo. Alguns exemplos de jogos que utilizam RNAs na execução de várias tarefas são BattleCruiser, Black & White e Creatures e Quake 2.

2.1.4 Scripting As linguagens de scripting são linguagens de programação que permitem ter o controle sobre o motor de um jogo, sem que esse controle tenha sido explicitamente incluído no código do motor. Desta forma é possível alterar as funcionalidades ou comportamento sem necessidades de recompilar o jogo. As linguagens de scripting são potentes e são muito utilizadas pelos desenvolvedores de jogos (PRECHELT, 2003). Grande parte dos jogos que utilizam linguagem de script tem como principal linguagem utilizada a Lua, devido ao seu tamanho e desempenho, fácil integração e portabilidade. Lua é utilizada por diversas empresas da indústria de jogos como: LucasArts, BioWare, Relic Entertainment, Absolute Studios e Monkeystone Games. (CELES et all., 2004). Utilizar uma linguagem de script no desenvolvimento de jogos traz vários benefícios, ela pode ser usada para o desenvolvimento de um jogo inteiro, para definir objetos de um jogo, gerenciar algoritmos de I.A., controlar personagens, tratar eventos de entrada e montar a interface com o usuário (CELES et all., 2004). Exemplos de jogos que usam está técnica são Baldur`s Gate e Neverwinter Nights.

2.2 Computação Evolutiva A Computação Evolutiva (CE) se inspira na teoria da evolução natural das espécies de Charles Darwin (DARWIN, 1859) para o desenvolvimento de métodos computacionais. Os algoritmos que pertencem a este campo da computação são

22

chamados de Algoritmos Evolutivos (AEs). Introduzidos por John Holland (WHITLEY, 1993) o algoritmo mais conhecido na CE é o Algoritmo Genético (AG) (BARRETO, 1996). O AG é uma subdivisão do AE, onde também se encontra a Programação Evolucionária (PE) e a Estratégia Evolucionária (EE). Todos compartilham do mesmo princípio, que consiste na simulação da evolução de estruturas individuais, através do processo de seleção e os Operadores Genéticos (OG), tais como crossover (recombinação ou cruzamento) e mutação. Essas estruturas individuais são as possíveis soluções para o problema e são representadas sob a forma de indivíduos de uma população (cromossomo). Todo o processo depende de um grau de adaptação, ou seja, do fitness (aptidão), do indivíduo frente ao ambiente. A seleção, inspirada na seleção natural das espécies, diz que os indivíduos mais aptos ou com melhor grau de adaptação ao meio, terão uma chance maior de repassar seu material genético para as próximas gerações. Assim quanto maior o grau de adaptação de um indivíduo, maiores as chances do material genético deste estar presente na próxima geração. Exemplos de jogos de computador que utilizam AEs são: Creatures; Cloak Dagger and DNA e Return to Fire II.

2.3 Gêneros de Jogos Segundo Salen e Zimmerman (2004), Meigs (2003), Pedersen (2003) e Pereira (2006) os jogos eletrônicos podem ser agrupados segundo sua jogabilidade, seu propósito, seu conteúdo e até mesmo a faixa etária a quem se destina. Os principais gêneros são: ação, aventura, esporte, estratégia, RPG e MMOG.

23

2.3.1 Jogos de Ação Os jogos de ação são aqueles nos quais o jogador deve responder com velocidade ao que está acontecendo, exigindo do usuário coordenação motora e reflexos rápidos. Jogos desse gênero buscam sempre ser rápidos e em tempo real. Este gênero possui uma grande galeria de jogos com tipos diferenciados como exemplo: Devil May Cry, Doom (figura 6) e Half Life.

Figura 6 – Jogo Doom

2.3.2 Jogos de Aventura Os jogos de aventura são baseados em histórias, colocam o jogador no papel de protagonista, como se fosse uma novela digital, precisando então resolver vários quebra-cabeças para poder chegar ao final da trama. Os exemplos de maiores sucessos são Where in the world is Carmen Sandiego?, King`s Quest e Monkey Island (figura 7).

24

Figura 7 – Jogo Monkey Island

2.3.3 Jogos Esportivos Os jogos de esportes representam os esportes individuais ou coletivos do mundo real. Esse gênero é subdividido em dois grupos, o grupo que simula o esporte pelo lado do atleta praticando o esporte e o segundo que simula pelo lado do técnico gerenciando sua equipe. Alguns jogos exemplos desse gênero são: FIFA 2008, NBA Live 2008 e Championship Manager 2008 (figura 8).

Figura 8 – Jogo Championship Manager 2008

25

2.3.4 Jogos de Estatégia O gênero Estratégia está subdivido em dois grupos, sendo o primeiro baseado em turnos “Turn-based” e o segundo em tempo real “Real Time Strategy – RTS”, ambos priorizando o raciocínio estratégico para alcançar a vitória. Em ambos estilos a inteligência artificial é utilizada tanto para a construção dos agentes como para o micro-gerenciamento das unidades no jogo. Exemplos de jogos deste gênero são: Civilization III (figura 9), Starcraft e OutLive3.

Figura 9 – Jogo Civilization III

2.3.5 Role-Playing Game (RPG) Role-Playing Game (RPG), ou jogos de interpretações de papéis, geralmente colocam o jogador em um universo com uma história não linear, onde o jogador pode dirigir ou não um grupo de personagens em alguma missão, com diversas criaturas controladas por inteligência artificial e sistema de evolução dos poderes e
3

OutLive é um jogo brasileiro produzido pela Continuum Entertainmen, lançado em 2001. <http://www.continuum.com.br/principal.htm>, acessado em junho de 2008.

26

forças dos personagens até atingir um objetivo maior no final. Jogos de sucesso no gênero são: Final Fantasy, Neverwinter Nights 2 (figura 10) e Baldur`s Gate.

Figura 10 – Jogo Neverwinter Nights 2

2.3.6 Jogos Massivos de Mundo Persistente (MMOG) Os jogos do gênero MMOGs - Massively Multiplayer Online Game permitem a participação de milhares de usuários interagindo simultaneamente entre si e com o ambiente virtual. Esse mundo virtual é chamado de mundo persistente, o que significa que o mundo continua evoluindo independentemente de o usuário estar ou não conectado. Esses tipos de jogos possuem alta tecnologia em balanceamento de carga, protocolo de comunicação de rede e inteligência artificial. Os MMOG podem ser de qualquer outro gênero de jogo já citado como ação, estratégia, esporte, RPG e outros. São exemplos de jogos MMOG: Ultima Online, World of Warcraft (figura 11) e Taikodom 4.

4

Taikodom é um jogo brasileiro produzido pela Hoplon, lançado em 2008. <http://www.taikodom.com.br/>, acessado em junho de 2008.

27

Figura 11 – Jogo World of Warcraft

2.4 Trabalhos relacionados Em um trabalho de graduação desenvolvido no Instituto de Ciências e Matemática Computacional (ICMC-USP), Crocomo utiliza Algoritmos Evolutivos para criar um jogo adaptativo, no qual o comportamento dos agentes controlados pelo computador se adapta de acordo com as estratégias utilizadas pelo jogador (CROCOMO, 2006). Crocomo neste trabalho testa vários AEs, com o objetivo de encontrar uma configuração capaz de adaptar as estratégias do computador ao estilo do jogador. Neste trabalho Crocomo cita que alguns autores chegam a afirmar que AEs não são umas alternativas viáveis para esse tipo de aplicação por não cumprirem o requisito de eficiência. Contrariando essas afirmações, o software que Crocomo produziu resultou num jogo em que os personagens controlados pelo computador oferecem um grau de adaptabilidade às ações do jogador devido ao AE implementado. Além disso, ele continua dizendo que foi possível observar o surgimento de estratégias originais muito eficientes utilizadas pelo computador que superaram as expectativas dos desenvolvedores.

28

Crocomo em seu mestrado da continuidade em sua pesquisa, e tenta verificar a possibilidade de aplicar Algoritmo Evolutivos no aprendizado on-line de jogos (CROCOMO, 2008). Crocomo neste trabalho contesta a veracidade da afirmação de alguns autores que afirmam que os Algoritmos Evolutivos não são aplicáveis na pratica para atingir o objetivo em questão. Sendo assim foi desenvolvido um jogo de computador, no qual o algoritmo de aprendizagem gera estratégias inteligentes para os NPCs através de um algoritmo evolutivo. Desta forma, a função do algoritmo evolutivo é fazer com que a estratégia adotada pelo computador se adapte a estratégia utilizada pelo usuário a cada vez que joga. No trabalho Crocomo apresenta uma revisão bibliográfica a respeito da Computação Evolutiva e suas vantagens e desvantagens, além das aplicações. São também explicados o jogo e os algoritmos implementados, assim como os experimentos realizados e seus resultados. No final Crocomo faz uma comparação entre o algoritmo evolutivo e a técnica de Dynamic Scripting. Cruz e Demasi apresentam um método de evolução em tempo real de agentes em jogos eletrônicos de ação, baseado em algoritmos genéticos (CRUZ e DEMASI, 2003). A idéia de seu trabalho é de fazer os agentes dentro de um jogo evoluírem de acordo com determinados objetivos até atingirem um certo patamar, a partir do qual evoluem livremente de acordo com o adversário. O objetivo do método proposto por Cruz e Demasi é de permitir que haja uma evolução suave da capacidade dos agentes de acordo com o adversário, fazendo assim, com que o nível de dificuldade do jogo cresça na mesma proporção em que o jogador humano melhora seu desempenho. Para Cruz e Demasi testar o método foi desenvolvido um jogo chamado “Olhos Assassinos”, no qual, o jogador controla um aventureiro que dispõe de uma arma com tiros limitados, mas recarregáveis que deve se proteger contra os olhos que

29

tentam mata-lo. Os resultados do projeto foram bastante animadores. Baseados em tempos de perda de vida do jogador e diferenças entre esses tempo, pode-se notar uma tendência ao longo do tempo de ter uma evolução bem distribuída. O método então apresentado apesar de ter resultados bastante animadores e de ampla gama de possibilidades de seu uso, o método apresentou algumas desvantagens, a principal delas, foi o risco de a evolução dos agentes sair completamente do previsto em relação ao próximo indivíduo objetivo.

3 Atividades Realizadas Durante o projeto de graduação, foi criado um jogo para testar o AE desenvolvido. Este AE tem por objetivo adaptar as estratégias dos NPCs. Desta forma espera-se obter desafios diferentes a cada nova partida.

3.1 Recursos necessários O projeto foi construído utilizando a linguagem C#, o Ambiente Integrado de Desenvolvimento Microsoft Visual C# Express Edition 2005 (Integrated Development Environment – IDE), XNA Game Stúdio Express 2.0 que é um framework desenvolvido pela Microsoft. Ferramentas como GIMP e Inkscape para computação gráfica e na edição do som o software Audacity. Os diagramas foram feitos utilizando o StarUML. Todos os softwares utilizados são gratuitos, não deixando a desejar de suas funcionalidades.

3.2 XNA O Microsoft XNA (XNA`s Not Anacronymed) é uma plataforma de desenvolvimento, desenvolvida pela Microsoft para auxiliar os programadores de jogos tanto para Windows quanto Xbox 360. Por ser uma plataforma de desenvolvimento, ela possui

30

uma série de componentes que auxiliam durante o projeto. Ela possui o “XNA Game Studio” que é uma IDE de desenvolvimento que utiliza a linguagem C#. Lançado em 2006, atualmente se encontra na versão 3.0, porém por motivos do projeto ter iniciado com a versão 2.0 a mesma foi mantida até o final. O XNA possui uma rica API para criação de jogos 3D assim como jogos 2D, além de permitir a manipulação de som e entrada de dados como teclado, mouse e joystick (Xbox 360). O Microsoft XNA incorpora as funcionalidades do DirectX, sendo assim os recursos do DirectX estão presentes no XNA mas de uma maneira mais fácil e rápida de serem utilizados. O XNA é uma iniciativa da Microsoft para facilitar ao máximo o desenvolvimento de jogos, onde ela leva ao desenvolvedor entusiasta e até mesmo a outros tipos de desenvolvedores como os profissionais, a praticidade na criação dos jogos.

3.2.1 Camadas do XNA As camadas do XNA Framework são mostradas na figura 12.

Figura 12 – Camadas do XNA Framework

Plataforma: (Direct3D, XACT, XInput, e XContent) – é a base do XNA, API`s de baixo nível.

31

Framework (núcleo): (Graphics, Audio, Input, Math e Storage) – é o núcleo do framework e provê de funcionalidades que vêm da base de gráficos, entrada de dados, funções matemáticas e armazenamento. Framework (extensão): é a camada que faz com que o XNA se torne uma ferramenta prática para o desenvolvimento de jogos e aplicações que utilizam DirectX. • Modelo de aplicação: é responsável pelo trabalho maçante, como criação e gerenciamento de janelas, game looping e funções do DirectX. • Content Pipeline: é responsável por processar os dados do jogo como texturas, carregamento de objetos (modelos 3D), som e entrada de dados. Jogos: • Starter Kits: são kits iniciais que foram desenvolvidos para auxiliar os desenvolvedores a entender a tecnologia XNA. • • Código: não é nativo, o programador do jogo que o desenvolve. Conteúdo: formado pelas comunidades, fóruns e todos aqueles que contribuem para o melhoramento do framework. • Componente: são códigos criados por terceiros, mas que podem ser incluídos nos jogos até mesmo para minimizar o processo de codificação.

3.2.2 Requisitos do sistema para desenvolver o jogo Os requisitos necessários para desenvolver jogos com XNA na plataforma Windows são: • • • Windows XP SP2 ou Windows Vista. Visual C# 2005 Express Edition (com SP1 – Service Pack 1) Runtime do DirectX

32

Placa de video compátivel com Direct3D 9.0 e Shader Model 1.1 (recomendado Shader Model 2.0)

Runtime do XNA e do DirectX

3.3 O Projeto do jogo O jogo implementado (O Último sobrevivente) para este projeto tem como objetivo servir de ambiente de teste para o AE desenvolvido. Neste jogo o jogador é responsável pelo controle de um único personagem, contra quatro NPCs. O Último Sobrevivente segue o gênero ação, onde o jogador deve responder com velocidade o que está acontecendo na batalha para não ser surpreendido pelos NPCs e perder.

3.3.1 A idéia e o rascunho do jogo O desenvolvimento da idéia do jogo produzido neste trabalho surgiu na primeira reunião realizada. Nesta reunião além de ter sido tratado o funcionamento do AE, nela também foi discutida as idéias do jogo, como: qual o objetivo do jogo, o que o jogador terá de fazer, como ele vai interagir como o personagem e outras. Todas essas idéias da reunião se transformarão no rascunho (figura 13). Segundo Perucia (2005) o processo de rascunhos do projeto em papel é muito vantajoso, pois por meio dele, pode-se visualizar melhor como será o produto final.

33

Figura 13 – Rascunho da interface do jogo

3.3.2 A interface A tela do jogo é do tamanho 800x600 pixels e nela são identificados os seguintes componentes: • Arena: é a área onde o jogo se passa. Essa área esta localizada no canto esquerdo e possui as dimensões de 570x600 pixels e é onde ocorrem as batalhas entre os NPCs e o personagem do jogador. • • • • Circulo: identifica o personagem do jogador. Cavaleiro negro: personagem controlado pelo jogador. Cavaleiro vermelho: personagem controlado pelo computador. Barra de energia: a barra de energia representa em forma percentual a quantidade de energia que aquele personagem tem. Os NPCs e jogador têm no máximo 4, esses valores foram escolhidos após vários testes, afim de, obter um jogo mais equilibrado. • Tempo: o tempo decorrido daquela batalha.

34

Batalha: indica quantas gerações as NPCs tiveram para evoluir. Se for a primeira batalha então todos os NPCs tem seu cromossomo iniciados aleatoriamente. Conforme aumenta o número de batalhas, os NPCs tendem a evoluir e dificultar o jogo.

Vitórias: é o número de vitórias que o jogador ganhou até a batalha atual. O jogador obtém uma vitória quando é o único personagem sobrevivente.

Derrotas: é o número de derrotas até a batalha atual. O jogador é derrotado quando sua energia acaba e ainda existem outros personagens vivos.

3.3.3 O Jogo O jogo se passa em uma arena de batalha, no qual existem quatro NPCs (cavaleiros vermelhos) e um jogador (cavaleiro negro). Cada NPC possui quatro vidas e um único equipamento que é composto por uma espada. A espada possui um dano padrão, retirando somente uma vida do personagem que recebe o ataque. O jogador controla o cavaleiro negro que dispõe de quatro vidas e uma espada. O cavaleiro negro deve se proteger contra os cavaleiros vermelhos que tentaram matálo. Os personagens podem andar em oito direções, estando limitado, somente a dimensão da arena (570x600 pixels). O objetivo do jogador é tentar permanecer vivo e acabar com os NPCs. A figura 14 mostra um quadro do jogo desenvolvido para este trabalho5.
5

Sprites utilizados no jogo extraídos de http://reinertileset.4players.de/. Acessado em abril de 2008.

35

Figura 14 – Tela do jogo “O Último Sobrevivente”

Cada um dos NPCs possui as ações que são determinadas pelas duas primeiras colunas da Tabela 2. Essas ações representam uma possível abstração de um NPC. Na primeira coluna é representado o nível de energia que pode variar de 0 a 3 (0 = 1 vida, 1 = 2 vidas e 2 = 3 vidas). A segunda coluna representa a quantidade de amigos que está dentro do campo de percepção daquele NPC (o campo de percepção tem raio de 150 pixels dentro da arena). Para cada situação, existe uma única saída (coluna 3) e essa saída pode ser o valor 0 no qual, o personagem fugira do jogador quando o ver. Esse valor pode ser 1, então o personagem caminhara em direção do amigo mais próximo. Mas quando o valor de saída for 2, o NPC ira procurar e perseguir o jogador desviando dos obstáculos para atacá-lo. Então os

36

NPCs com base na energia e quantidade de amigos que pode ver, assumem assim uma determinada ação.

Tabela 2 – Exemplo de entradas e suas respectivas saídas.

Vida 0 0 0 0 1 1 1 1 2 2 2 2

Amigos 0 1 2 3 0 1 2 3 0 1 2 3

Cromossomo (Saída) 2 1 2 2 0 0 1 0 2 1 2 1

Essas entradas e saídas também podem ser representadas por uma MEF, onde a abstração ocorre quando o personagem se encontra em alerta, as transições dos estados são as entradas da abstração e as saídas são os estados de 1 a 12 que representação respectivamente uma linha de cada possível ação da tabela 2. Uma representação dessas MEF pode ser visto na figura 15.

37

Figura 15 – MEF da tomada de decisão de um NPC

Para cada ação que o individuo tomar, será executado um padrão de movimento. Estes padrões de movimentos foram usados para facilitar a programação do jogo. Um dos padrões de movimentos definidos foi o de caminhar até um determinado personagem. Mas para não ter um movimento linear ao caminhar em direção de um personagem, foi mantida uma aleatoriedade de movimentos com a função random. Quando o NPC andar este não só anda em direção do personagem definido como pode andar para outros lados. Para cada ação de caminhar tomada pelo indivíduo, este pode se mover 6 pixels se andar nas direções verticais e horizontais (norte, sul, leste e oeste) ou 5 pixels se ele andar nas diagonais (nordeste, noroeste, sudeste e sudoeste).

38

4 O Algoritmo Evolutivo do Jogo O AE proposto para o jogo tem como cromossomos as estratégias de uma população composto por 4 guerreiros. O funcionamento do AE consiste em 5 etapas básicas: geração da população aleatoriamente, testes dos indivíduos no ambiente, seleção do indivíduo mais bem adaptado, aplicação dos operadores genéticos (crossover e mutação), geração de uma nova população. Este funcionamento pode ser visto no fluxograma da figura 13.

Inicio do Jogo (batalha = 0)

População é gerada aleatoriamente

Inicio da batalha (tempo = 0)

População é testada no ambiente

Nova população (batalha ++)

Fim da batalha

Aplica-se Mutação

Aplica-se Crossover

Seleção do pai

Figura 16 – Fluxograma de funcionamento do AE

O AE utilizado tem como objetivo adaptar os parâmetros da coluna mais a direita da tabela 2 de cada NPC que forma a população. Esse conjunto de parâmetro é o cromossomo de cada indivíduo. Inicialmente, tais parâmetros são iniciados aleatoriamente após começar o jogo, onde o número da batalha é zero. A população

39

então é testada no ambiente do jogo, e o membro mais bem adaptado no final da batalha é então selecionado para se tornar o pai da próxima geração. São aplicadas em seguida, as funções de crossover e mutação para produzir a próxima geração.

4.1 Cromossomos O cromossomo é uma estrutura de dados que representa uma possível solução para um problema. Os cromossomos do jogo (Figura 14) a serem evoluídos serão representados como um vetor numérico, sendo que cada célula (alelo) pode ser composta de valores variando de 0 a 2. Essa estrutura tem 3¹² (531.441) possibilidades de estratégias para cada NPC.

0 2 1 0 0 1 2 2 0 1 0 1
Figura 17 – Exemplo de cromossomo. Cada célula representa um alelo

4.2 População O conceito de população aplica-se a um grupo de indivíduos. Cada indivíduo dentro da população é representado por um cromossomo, e cada cromossomo é detentor de uma possível solução para o mesmo problema, sendo na maioria das vezes diferentes entre si. Pode-se chamar de geração cada nova população produzida nas iterações do algoritmo. Um exemplo de uma possível população é representado na tabela 2.

40 Tabela 3 – Exemplo de população onde cada indivíduo é um NPC

População Indivíduo 1 Indivíduo 2 Indivíduo 3 Indivíduo 4
4.3 Função de Pontuação

Cromossomo 021002010001 010202210101 000000000000 112110111111

Aptidão 20 12 5 11

Cada solução é avaliada por uma função de pontuação no decorrer do jogo, recebendo uma nota (fitness score) que indica o quão eficaz é a solução (TOMASSINI, 1995). Os NPCs no jogo são recompensados com 5 pontos para cada ataque realizado com sucesso e 2 pontos a cada 10 segundo que permaneça vivo na partida. Porém, para encontrar uma boa solução é necessário punir certas ações, e para cada ataque que o NPC receber do jogador ele é punido com 3 pontos de sua nota. Essas pontuações foram reguladas empiricamente após alguns jogos, afim de, deixar o jogo mais dinâmico.

4.4 Método de seleção O Método de seleção é responsável por selecionar os indivíduos mais aptos para o cruzamento. o jogo proposto foi utilizado o método de elitismo, já que o elitismo pode aumentar rapidamente o desempenho do AE, porque previne a perda da melhor solução já encontrada. Sendo assim o AE pode convergir mais rapidamente, o que é ideal para o jogo, já que o mesmo possui um grande número de soluções e uma pequena população. A idéia do elitismo é copiar os melhores cromossomos (no jogo só copia o melhor) para a nova população. O resto da população é submetido aos operadores

41

genéticos (crossover e mutação). Sendo assim a melhor solução é escolhida para gerar descendentes.

4.5 Crossover O operador de recombinação ou reprodução (crossover) permite combinar dois ou mais cromossomos de uma mesma população para formar descendentes similares. Esse operador pode ser aplicado de diversas maneiras e com certa probabilidade de ocorrência, denominada probabilidade de recombinação. O crossover no jogo, assim como em qualquer outro problema é aplicado logo após o indivíduo mais bem adaptado ser escolhido. Esse indivíduo torna-se o pai da população e todos os outros que não foram escolhidos serão as mães. Cada valor dos cromossomos das mães tem 50% de probabilidade de recombinação. Exemplo: se a posição 1 do vetor da mãe possui valor 0 e no pai a mesma posição possui valor 2, o novo cromossomo (filho) possui 50% de chance de possuir esse mesmo parâmetro como o valor 0 e 50% de chance com o valor 2. Outro exemplo de crossover pode ser visto na figura 15.

Figura 18 – Exemplo de crossover

42

4.6 Mutação O operador de mutação é necessário para a introdução e manutenção da diversidade genética da população, alterando arbitrariamente um ou mais componentes de um indivíduo. Exemplo: quando este operador é aplicado, cada alelo possui 5% de chance de ser substituído por um novo valor. No caso do valor original ser 0 ou 1, o novo valor será 2. Se o valor original é 2, o novo valor terá 50% de probabilidade de ser 1, caso contrário, será 0. Outro exemplo de mutação pode ser visto na figura 16.

Figura 19 – Exemplo de mutação

O operador de mutação permite ao AE explorar novas possibilidades e pode impedir os NPCs de ficarem presos em uma solução local. A taxa de mutação está relacionada com o grau de liberdade do algoritmo. Quando se aumenta a probabilidade de mutação, aumenta-se a liberdade do algoritmo para buscar novas soluções na região de domínio do parâmetro. Entretanto, o AE poderá levar mais tempo para convergir, ou até mesmo não chegar a nenhum resultado, uma vez que a mutação também pode gerar comportamentos não desejados pelos NPCs.

5 Resultados Neste trabalho foi desenvolvido um algoritmo evolutivo para a adaptação das estratégias dos NPCs do jogo O Último Sobrevivente, construído também neste

43

projeto. O AE utilizado apresentou uma adaptação bem interessante, tendendo a ter uma evolução de forma bem distribuída ao longo do tempo e de acordo com o próprio desempenho do jogador. Foram realizados dois jogos com 80 partidas por motivo de tempo. O sistema automático de coleta de dados implementado permite que, após cada partida, o fitness de cada personagem seja armazenado. Com isso pode-se obter gráficos referente aquele jogo, podendo visualizar a adaptação dos NPCs, sendo assim, cada linha do gráfico é referente a um indivíduo daquela população. Com o primeiro experimento demonstrado no gráfico da figura 20, foi possível notar que a população começou conseguindo altos valores de aptidão sendo assim, o jogo foi mais demorado e o mesmo deu mais desafio ao jogador. Com o passar dos jogos o usuário começou a perceber como os NPCs estão jogando e passou a ganhar dos mesmos. Porém logo o mesmo aconteceu com os NPCs, e voltaram a ganhar do jogador.

Figura 20 – Evolução do experimento 1, Média Móvel Aptidão / Geração

44

Em um segundo experimento, obteve um jogo mais desafiador. Os NPCs aprendiam de maneira rápida a estratégia do jogador, assim como, o jogador aprendia de maneira rápida a estratégia nos NPCs. Sendo assim o jogo permaneceu em equilíbrio, aumentando a atratividade do jogo. O gráfico que representa este jogo pode ser visto na figura 21.

Figura 21 – Evolução do experimento 2, Média Móvel Aptidão / Geração

Embora o primeiro experimento tenha resultado em um maior número de vitórias para o jogador (31 vitórias e 52 derrotas), essas vitórias foram consecutivas, isso está bem refletido no gráfico da figura 20, no qual o nível de aptidão diminui de maneira suave e aumenta novamente de maneira suave. Já no segundo experimento, o jogador teve uma quantidade menor de vitórias (26 vitórias e 54 derrotas), porém elas foram distribuídas de maneira uniforme, sendo assim o jogo obteve um maior nível de disputa entre o jogador e os NPCs, aumentando a diversão do jogo. O desafio ao jogador surgiu da adaptatividade dos NPCs proporcionada pelo AE.

45

O objetivo do trabalho era adaptar as estratégias dos NPCs, de maneira a tornar o jogo mais desafiador ao jogador. Uma das estratégias desenvolvidas pelos personagens não controlados pelo jogador foi a formação de enxames. Além dos comportamentos de fuga e perseguição do jogador, os NPCs apresentaram em algumas ocasiões comportamentos de agrupamento em enxames, resultantes da perseguição de algum amigo. Esse comportamento pode ser visto na figura 22.

Figura 22 – Agrupamento formado pelos NPCs

Outros resultados obtidos com este projeto foram, as participações com resumos no XVI CIC (XVI Congresso de Iniciação Cientifica da UFSCar) e no SIICUSP (Simpósio Internacional de Iniciação Cientifica da USP). Em seguida foi realizada uma entrevista para o Jornal de Piracicaba, matéria que saiu no dia 12 de Outubro de 2008 e uma entrevista a TV Claret, exibida no dia 29 de Outubro no jornal do meio-dia da Cultura falando sobre o Algoritmo Evolutivo e o jogo desenvolvido.

6 Conclusões O Algoritmo Evolutivo desenvolvido durante este projeto foi capaz de adaptar as estratégias dos personagens não controlados pelo jogador. Essas adaptações podem ser constatadas nos jogos 1 e 2 realizados que apresentam evidências da

46

adaptação das populações evoluídas pelo AE em resposta ao ambiente em que se encontram. Aplicações como esta, podem ser possíveis em uma variedade de jogos, como em jogos de ação, jogos de estratégia, em MMORPGs e outros. Dessa forma, não é necessário que o programador codifique todas as estratégias que serão utilizadas e sim esperar que a capacidade de gerar estratégias novas a cada jogo diferente renove o interesse despertado pelo mesmo em seus usuários. Ao utilizar o AE proposto neste projeto, busca-se aumentar o entretenimento, pois o mesmo adiciona novos desafios ao jogador e apresenta comportamentos diferentes para cada personagem evoluído com o objetivo de aumentar o interesse do usuário no jogo. Foi constatado que os níveis de dificuldade oferecidos pelas adaptações das estratégias adotadas pelo computador foram bem equilibrados, tendendo a oferecer entretenimento. Esse entretenimento pode ser notado também durante as partidas de um jogo, ao invés de olhar somente os gráficos. Esse projeto trouxe a oportunidade de aplicar conceitos aprendidos durante o curso de Ciência da Computação, e aprender muito sobre o estado da arte de Inteligência Artificial aplicada no aprendizado em jogos de computador, e principalmente sobre o uso de Algoritmos Evolutivos em jogos.

6.1 Dificuldades e Limitações Algumas dificuldades foram encontradas no desenvolvimento deste trabalho. Em primeiro lugar, deve-se destacar a necessidade de muitas horas de estudos que foram reservadas para o aprendizado da linguagem C#, da API XNA e dos estudos da computação evolucionária. Essas horas foram essenciais para o entendimento da programação orientada a objetos (POO), a fim de facilitar o desenvolvimento do jogo, porém o jogo não foi criado utilizando somente orientação a objetos, pois foram encontradas várias

47

dificuldades em utilizar este paradigma. Outra parte do tempo foi reservada ao estudo das funcionalidades do XNA e sua arquitetura, sendo que o mesmo não teve 40% da potencialidade utilizada. Enfim uma boa parte foi reservada para o entendimento dos AEs e suas aplicações em jogos. Outro problema enfrentado foi a necessidade de correção de bugs encontrados durante a programação do jogo “O Último Sobrevivente”, que desviava o esforço de trabalho do foco principal. Durante o projeto foi observado que existem grandes dificuldades em encontrar trabalhos que envolvem estudos de AEs em jogos, pois existem poucas pesquisas sobre esse assunto.

6.2 Trabalhos Futuros Como sugestões para a continuação deste trabalho, podem ser citadas: • Avaliar melhor o AE implementado, procurando realizar testes para medir os comportamentos dos NPCs no jogo desenvolvido. • Terminar o software deixando-o mais parecido com um jogo (apresentação, menu de opções, sons...). • Implementar e comparar outras técnicas de aprendizado no mesmo ambiente desenvolvido. • • Teste do AE produzido em outros gêneros de jogos. Tentar encontrar AEs que se mostrem ainda mais eficientes que o deste trabalho. • Gravar as informações atuais de um jogo para no futuro continuar jogando o mesmo jogo, afim de, verificar o que acontece com a técnica utilizada após muitas horas de jogo. • Melhorar o jogo implementado e expandir o mesmo, procurando obter novos cenários com diferentes objetivos a serem cumpridos pelo jogador e até

48

mesmo uma história para o jogo, propondo assim maior entretenimento aos jogadores. O software apresenta um total de 4558 linhas de código, e o tempo utilizado para a programação e aprendizado foi de aproximadamente 500 horas.

7 Referências bibliográficas ABRAGAMES, http://www.abragames.org/, acessado em junho de 2008. AZEVEDO, E. et all. Desenvolvimento de jogos 3D e aplicações em realidade virtual. Rio de janeiro: elseiver, 2005. BATTAIOLA, A. L. Jogos por computador: Histórico, Relevância Tecnológica, Tencências e Técnicas de Implementação. Anais da SBC 2000. Volume 2. Curitiba, 2000. BRAMLETT, M. F. Initialization, mutation and selection methods in genetic algorithms for function optimization, Proceedings of the Fourth International Conference on Genetic Algorithms, Sam Mateo, CA: Mongan Kaufmann, pp. 100107, 1991. BOURG, D. M.; SEEMAN, G. AI for Game developers. Cambridge: O`Reilly, 2004. CELES, W. et all. Linguagem Lua e suas Aplicações em Jogos. Rio de Janeiro, 2004. CHAMPANDARD, A. J.; AI Game Development – Synthetic Creatures with Learning and Reactive Behaviors. Indianapolis: New Riders, 2003. Continuum, http://www.continuum.com.br/principal.htm, acessado em junho de 2008. CROCOMO, M. K.; Desenvolvimento de um Jogo Adaptativo Utilizando um Algoritmo Evolutivo. 2006. 39 f. Dissertação (Graduação) – Universidade de São Paulo – Instituto de Ciências Matemática de Computação (USP-ICMC), São Carlos, SP. CROCOMO, M, K.; Um Algoritmo Evolutivo para Aprendizado On-line em Jogos Eletrônicos. 2008. 95 f. Dissertação (Mestrado) – Universidade de São Paulo – Instituto de Ciências Matemática de Computação (USP-ICMC), São Carlos, SP. CRUZ, A. J. O.; DEMASI, P., "Evolução de Agentes em Tempo Real para Jogos Eletrônicos de Ação" , In:II Workshop de Jogos e Entretenimento Digital-Wjogos 2003, 2003, Salvador - Bahia, Proceedings of Wjogos 2003, 2003, v.1, p.1 - 10 DARWIN, C. The Origin of Species by Means of Natural Selection, Reading, UK, pp. 458, 1998. Reprint from the sixth edition 1872. ISBN 185958070.

49

DARWIN, C.; On the Origin of Species, 1st edition, Harward University Press, MA, 1859. DEMARIA, R.; WILSON, J. L.; Hign Score! The Illustrated History of Electronic Games, 2nd edition. Emeryville: McGraw-Hill/Osborne, 2004. DEMASI, P.; Estratégias Adaptativas e Evolutivas em Tempo Real para Jogos Eletrônicos. 2003. 175 f. Dissertação (Mestrado) – Universidade Federal do Rio de Janeiro (UFRJ), Rio de Janeiro, RJ. DORIGO, M.; DI CARO, G.; Ant Colony Optimization: A New Meta-Heuristic, Preceedings of the Congresso n Evolutionary Computation, IEEE Press, vol. 2, pp. 1470-1477, Washington, DC, 1999. HEBB, D. O. The organization of behavior. Wiley, New York, 1949. HOLLAND, J. H.; Outline for a Logical Theory of Adaptive Systems, Journal of the Association for Computing Machinery. Vol. 3, pp. 297-314, 1962. HOPFIELD, J.; Neural Networks and Physical System with Emergent Collectives Computational Abilities. Proceedings of the National Academy of Science 79 (1982), 2554-2558. KARLSOON, B. F. F.; Um Middleware de Inteligência Artificial para Jogos Eletrônicos. 2005. Dissertação (Mestrado) – Pontifica Universidade Católica do Rio de Janeiro, Rio de Janeiro, 2005. KENT, S. L.;The Ultimate History of Video Games: From Pong to Pokemon, the Story Behind the Craze That Touched Our Lives and Changed the World. New York: Three Rivers Press, 2001. KISHIMOTO, A.; Inteligência Artificial em Jogos Eletrônicos. São Paulo, 2004. LAMOTHE, A. Tricks of the Windows Game Programming Gurus – Fundamentals of 2D and 3D Game Programming. Indianapolis: Sams, 1999. MCCULLOCH, W. S. & PITTS, W.; A Logical Calculus of the Ideas Immanent in Nervous Activity. Bulletin of Mathematical Biophyics 5 (1943), 115-133. MEIGS, T. Ultimate Game Design: Building game worlds. New York: McGrawHill/Osborne, 2003. PEDERSEN, R. E. Game Design Foundations. Plano: Wordware Publishing, 2003. PEREIRA, R. L.; Uma Contribuição para a Rejogabilidade de Software de Entretenimento Digital através de Conceitos de Artificial Life. 2006. 90 f. Dissertação (Mestrado) – Universidade Estadual de Maringá (UEM), Maringá , PR. PERUCIA, A. S. et all.; Desenvolvimento de Jogos eletrônicos: Teoria e Prática. São Paulo: Novatec Editora Ltda., 2005.

50

PRECHELT, L. Are scripting languages any good? A validation of Perl, Phyton, Rexx, and Tcl against C, C++, and Java. Advances in Computers, 57: pp. 207-271, 2003 CODEN, ISSN 0065-2458. ROSENBLATT, F. The perceptron: a probabilistic model for information storage and organization in the brain. Psychological Review 65 (1958), 386-408. RUMELHART, D. E.; MCCLELLNAD, J. L. & GROUP, P.; Parallel Distributed Processing, vol 1: Foundations. The MIT Press, 1986. RUSSEL, S.; NORVIG, P. Inteligência Artificial: tradução da segunda edição. Rio de Janeiro: Elsevier, 2004. SALEN, K.; ZIMMERMAN, E.; Rules of Play: Game Design Fundamentals. Cumberland: The MIT Press, 2004. SANTEE, A.; Programação de Jogos com C++ e DirectX. São Paulo: Novatec Editora Ltda., 2005. SCHWAB, B.; AI Game Engine Programming (Game Development Series). Charles River Media, 2004. SPRONCK, P., Shprinkhuizen-Kuyper, I. and Postma, E. Online Adaptation of Game Opponent AI in Theory and Practice. Proceedings of the 4th International Conference on Intelligent Games and Simulation (GAME-ON 2004) (ed. Q. Mehdi and N. Gough), SUTTON, Richard, BARTO, Andrew. Reinforcement Learning: An Introduction. Cambridge, MA. MIT Press. 1998 SWEETSER, P. Current AI in Games: A review. Australian Journal of Intelligent Information Processing Systems. Scool of ITEE, University of Queensland, 2002 Taikodom, http://www.taikodom.com.br/, acessado em junho de 2008. TOMASSINI, M. Survey of genetic algorithms. In: Annua Reviews of Computational Physics, World Scientific, 3, 87-118, 1995. TOZOUR, P.;.The Evolution of Game AI from AI Game Programming Wisdom. Hingham: Charles River Media, 2002. TOZOUR, P.; Artificial Intelligence: Introduction from Game Programming Gems 4. Hingham: Charles River Media, 2004. YANNAKAKIS, J. N. AI in Computer Games: Generating Interesting Interactive Opponents by the use of Evolutionary Computation, A thesis submitted t University of Edinburgh in the subject of Artificial Inteligence for the degree of Doctor of Philosophy, 2005. WHITLEY, D.; “A Genetic Algorithm tutorial”, Springer Science + Business Media B.V., Formerly Kluwer Academic, 1994. p. 65-85.

51

8 Bibliografia Audacity, http://audacity.sourceforge.net, acessado em fevereiro de 2008. Brimond, http://brimond.com, acessado em abril de 2008. Blog do time do XNA, http://blogs.msn.com/xna, acessado em março de 2008. Creator`s Club, http://creators.xna.com, acessado em janeiro de 2008. GameDev, http://www.gamedev.com.br/, acessado em junho de 2008. GameReporter, http://www.gamereporter.org/, acessado em março de 2008. Game Studio XNA 2.0, http://msdn2.microsoft.com/en-us/xna/aa937795.aspx, acessado em fevereiro de 2008. GameTutorials, http://www.gametutorials.com/, acessado em março de 2008. GIMP, http://www.gimp.org, acessado em fevereiro de 2008. GUEDES, G. T. A. UML: Uma Abordagem Prática. São Paulo: Novatec Editora Ltda, 2004. HOPLON, http://www.hoplon.com/, acessado em setembro de 2008. KAWICK, M. Real-Time Strategy Game Programming. Plano: Wordware Publishing, 1999. PDJ, http://www.programadoresdejogos.com/, acessado em março 2008. ROLLINGS, A. MORRIS, D.; Game Architecture and Design. Indianapolis: New Riders Publishing, 2003. SharpGames, http://sharpgames.net, acessado em janeiro/2008. SILVA, L. A. Simulacron: professional game & level design. Curitiba: Free Editora, 2004. StarUML, http://staruml.sourceforge.net, acessado em fevereiro de 2008. UniDev, http://www.unidev.com.br, acessado em fevereiro/2008. Visual Studio C# 2005, http://msdn.microsoft.com/vstudio/express/downloads/ , acessado em fevereiro de 2008. Visual C# 2005 Service Pack, http://download.microsoft.com/download/7/7/3/7737290f-98e8-45bf-907585cc6ae34bf1/VS80sp1-KB926749-X86-INTL.exe, acessado em fevereiro de 2008. XNA-Br, http://br.groups.yahoo.com/group/xna-br/, acessado em fevereiro 2008.

52

Xuti Game Development, http://www.xuti.net, acessado em maio de 2008.

53

ANEXOS