JONAS DE CARVALHO FELINTO APLICAÇÃO DE INTELIGÊNCIA ARTIFICIAL PARA TESTE DE VIABILIDADE DE JOGOS DE PLATAFORMA LONDRINA–PR 2015 JONAS DE CARVALHO FELINTO APLICAÇÃO DE INTELIGÊNCIA ARTIFICIAL PARA TESTE DE VIABILIDADE DE JOGOS DE PLATAFORMA Versão Preliminar de Trabalho de Conclusão de Curso apresentado ao curso de Bacharelado em Ciência da Computação da Universidade Estadual de Londrina para obtenção do título de Bacharel em Ciência da Computação. Orientador: Prof(a). Dr(a). Helen Cristina de Mattos Senefonte LONDRINA–PR 2015 Jonas de Carvalho Felinto Aplicação de Inteligência Artificial para teste de viabilidade de jogos de plataforma/ Jonas de Carvalho Felinto. – Londrina–PR, 201524 p. : il. (algumas color.) ; 30 cm. Orientador: Prof(a). Dr(a). Helen Cristina de Mattos Senefonte – Universidade Estadual de Londrina, 2015. 1. Palavra-chave1. 2. Palavra-chave2. I. Orientador. II. Universidade xxx. III. Faculdade de xxx. IV. Título CDU 02:141:005.7 JONAS DE CARVALHO FELINTO APLICAÇÃO DE INTELIGÊNCIA ARTIFICIAL PARA TESTE DE VIABILIDADE DE JOGOS DE PLATAFORMA Versão Preliminar de Trabalho de Conclusão de Curso apresentado ao curso de Bacharelado em Ciência da Computação da Universidade Estadual de Londrina para obtenção do título de Bacharel em Ciência da Computação. BANCA EXAMINADORA Prof(a). Dr(a). Helen Cristina de Mattos Senefonte Universidade Estadual de Londrina Orientador Prof. Dr. Segundo Membro da Banca Universidade/Instituição do Segundo Membro da Banca Prof. Dr. Terceiro Membro da Banca Universidade/Instituição do Terceiro Membro da Banca Prof. Ms. Quarto Membro da Banca Universidade/Instituição do Quarto Membro da Banca Londrina–PR, 22 de fevereiro de 2015 Este trabalho é dedicado às crianças adultas que, quando pequenas, sonharam em se tornar cientistas. AGRADECIMENTOS Agradecimentos “Não vos amoldeis às estruturas deste mundo, mas transformai-vos pela renovação da mente, a fim de distinguir qual é a vontade de Deus: o que é bom, o que Lhe é agradável, o que é perfeito. (Bíblia Sagrada, Romanos 12, 2) FELINTO, J. C.. Aplicação de Inteligência Artificial para teste de viabilidade de jogos de plataforma. 24 p. Trabalho de Conclusão de Curso – Versão Preliminar (Bacharelado em Ciência da Computação) – Universidade Estadual de Londrina, Londrina–PR, 2015. RESUMO Testes em jogos são essências, criar um nível impossível de ser passado é ruim para os desenvolvedores, por isso, neste trabalho será implementada uma inteligência artificial para completar um nível de um jogo de plataforma, como Super Mario, a IA será implementada no jogo Woodpecker World para teste. Diversos tipos de busca serão estudadas, como busca em profundidade e busca gulosa. Palavras-chave: Inteligência artificial . Jogos de Plataforma. Busca em Profundidade. Busca Gulosa. FELINTO, J. C.. Artificial Intelligence application platform games feasibility test. 24 p. Final Project – Draft Version (Bachelor of Science in Computer Science) – State University of Londrina, Londrina–PR, 2015. ABSTRACT Test games are essences , creating an impossible level to be past is bad for developers , so this work will be implemented artificial intelligence to complete a level of a platform game like Super Mario , the IA will be implemented in WoodpeckerWorld game for testing. Various types of search will be studied , such as depth-first search and greedy search . Keywords: Artificial intelligence. Plataform games. Greedy search. Depth-first search an. LISTA DE ILUSTRAÇÕES Figura Figura Figura Figura 1 2 3 4 – – – – Busca em Largura [1] . . . . . . . Busca em Profundidade [1] . . . . Busca Heurística [1] . . . . . . . Jogo de Plataforma Super Mario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 17 18 19 LISTA DE TABELAS LISTA DE ABREVIATURAS E SIGLAS IA Inteligência Artificial FIFO First In First Out LIFO Last In First Out SUMÁRIO 1 1.1 1.2 INTRODUÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . Objetivos e Contribuições . . . . . . . . . . . . . . . . . . . . . . . Organização do Trabalho . . . . . . . . . . . . . . . . . . . . . . . 13 13 14 2 2.1 2.2 2.3 2.3.1 15 15 15 15 15 2.4 FUNDAMENTAÇÃO TEÓRICA Conceitos . . . . . . . . . . . . . . . Redes Neurais . . . . . . . . . . . . Tipos de Busca . . . . . . . . . . . Busca Cega . . . . . . . . . . . . . . Busca em largura . . . . . . . . . . . Complexidade de tempo e espaço . . . . . . Busca em profundidade . . . . . . . . Complexidade de tempo e espaço . . . . . . Busca Heurística . . . . . . . . . . Busca Gulosa . . . . . . . . . . . . . . Jogo de Plataforma . . . . . . . . . 3 TRABALHOS RELACIONADOS . . . . . . . . . . . . . . . . . 20 4 4.1 4.2 4.2.1 4.2.2 MATERIAIS E MÉTODOS . . . . . . . . . . Método Proposto . . . . . . . . . . . . . . . . . . Funcionamento das Inteligências Artificiais . . Busca heurística . . . . . . . . . . . . . . . . . . . Busca em profundidade . . . . . . . . . . . . . . . . . . . 21 21 22 22 23 REFERÊNCIAS . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 2.3.1.1 2.3.1.1.1 2.3.1.2 2.3.1.2.1 2.3.2 2.3.2.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 16 16 17 17 18 18 13 1 INTRODUÇÃO A inteligência artificial para jogos é um tópico estudado há muito tempo, como há uma constante evolução dos métodos de desenvolvimento de jogos, é necessário que haja um estudo de novas técnicas ou novos meios de aplicação de técnicas já conhecidas sejam revistos para acompanhar a tecnologia. A evolução da inteligência artificial deve acompanhar a qualidade gráfica dos jogos, para que não haja jogos frustrantes com gráficos modernos [2]. O uso de técnicas de inteligência artificial para jogos eletrônicos é cada vez mais necessário e em certos jogos são essenciais. Podemos dizer que uma IA bem feita pode ser um elemento de diversão e esse é o grande proposito de um jogo, proporcionar diversão ao usuário [3]. O foco deste trabalho se encontra em buscar técnicas de inteligência artificial em jogos para comparações entre elas, através de testes práticos e coleta de dados. Neste trabalho a inteligência artificial terá que completar uma fase de um jogo de plataforma, no qual o personagem move-se em duas dimensões, poderá pegar moedas, vidas e não cair em obstáculos, pois são mortais. 1.1 Objetivos e Contribuições O objetivo deste trabalho é apresentar um algoritmo de Inteligência Artificial capaz de testar os jogos de plataforma antes que eles sejam lançados, com abordagem em apenas um jogo - Woodpecker World [4]. O teste das fases é fundamental para garantir que uma fase criada é passável, ou seja, os obstáculos não travam uns aos outros ou as distâncias entre os pulos são possíveis de ser alcançadas. O teste básico para o lançamento de um jogo é se ele é ou não impossível, portanto, com este trabalho pretende-se obter o melhor algoritmo de inteligência artificial capaz de completar um nível de do jogo Woodpecker World. Considerando o estado da arte, foram selecionados alguns algoritmos os quais serão colocados em diversas simulações com o intuito de mostrar quais técnicas são promissoras quando aplicadas em um ambiente de jogo. Em desenvolvimento de jogos, utiliza-se algoritmos que geram fases automaticamente com o intuito de acelerar o processo, mas pode ocorrer de alguma condição não estar devidamente calculada e o programador não perceber o erro antes do lançamento. Como o intuito é acelerar o processo, fica inviável fazer os testes manualmente, principalmente se existir algum elemento aleatório na hora da construção do nível implementado no algoritmo. Uma técnica de teste automático pode resolver o problema - um algoritmo que teste todas as possibilidades de movimento e ação do personagem em um jogo de plataforma facilita o trabalho dos desenvolvedores na fase de teste e mesmo que a fase 14 seja construída manualmente, ainda é necessário testar se é impossível. - Com a técnica apresentada nesse trabalho, o desenvolvedor poupará tempo e dinheiro na fase dos testes. 1.2 Organização do Trabalho No Capítulo 2 são apresentados os conceitos estudados para a produção e compreensão do trabalho. No Capítulo 3 são levantados alguns trabalhos relacionados á proposta e no Capítulo 4 é apresentada a descrição do método desenvolvido. 15 2 FUNDAMENTAÇÃO TEÓRICA 2.1 Conceitos Existem vários modos de definir Inteligência Artificial, segundo Russel, um sistema pode ser considerado racional se ele toma uma decisão correta ou esperada, a partir de um conhecimento adquirido ou dado a este sistema [1]. E de acordo com Rich, IA é o estudo de como programar os computadores para realizarem tarefas as quais, os homens faziam melhor [5]. Para definir melhor um agente inteligente, ele vai ser dividido em três partes, segundo russel, os sensores, que percebem o mundo e suas características, os atuadores, que mudam esse ambiente de alguma forma e o programa que define suas ações, no caso de uma pessoa os sensores são os 5 sentidos, o atuador é o seu corpo, e o programa que define suas ações o cérebro. 2.2 Redes Neurais Uma rede neural é um circuito composto por uma grande quantidade de unidades simples de processamento inspiradas no sistema neural [6]. De acordo com Russel, é apenas uma coleção de unidades ligadas entre si; as propriedades da rede são determinadas pela sua topologia e as propriedades dos neurônios [1]. E uma estrutura de processamento com possibilidade de implementação em dispositivos eletrônicos, possui um número de unidades interconectadas, chamadas neurônios artificiais - cada um possui um comportamento específico de entrada/saída, que é determinado pela sua função de transferência, pelas interconexões com outras unidades, dentro de um raio de vizinhança, e possivelmente pelas entradas externas. 2.3 2.3.1 Tipos de Busca Busca Cega A busca cega utiliza uma estratégia na qual o algoritmo não possui informações adicionais dos estados posteriores, ela só pode gerar um novo estado sucessor e saber a diferença entre um estado objetivo e um não objetivo [1]. 16 2.3.1.1 Busca em largura A busca em largura utiliza uma estratégia de busca simples, na qual expandese primeiramente os nós mais próximos da raiz, ou seja, todos os nós de uma mesma profundidade são expandidos para depois ocorrer a expansão dos nós dos níveís seguintes. Para isso, é utilizada a estrutura de dados fila, com o conceito de FIFO (First In First Out), no qual o primeiro a entrar é o primeiro a sair. Ela coloca os nós filho sempre atrás dos nós pai, garantindo a saída dos nós de níveis mais rasos antes [1]. 2.3.1.1.1 Complexidade de tempo e espaço Considerando-se uma árvore com quantidade de nós sucessores uniforme, na qual seja ‘b’ essa quantidade de nós e ‘d’ a profundidade onde a solução será encontrada. Na raíz, o custo de tempo e espaço será b, no nível sucessor, será 𝑏2 e nos próximos, seguindo o critério será 𝑏𝑑 , portanto a fórmula de custo é : b + 𝑏2 + 𝑏3 + ... 𝑏𝑑 = O(𝑏𝑑 ) A figura 1 mostra um exemplo de execução do algoritmo explicado. Figura 1 – Busca em Largura [1] 2.3.1.2 Busca em profundidade A busca em profundidade utiliza uma estratégia de busca na qual o algoritmo segue uma ordem de expansão priorizando o nó mais profundo da borda atual da árvore de busca. Ela a estrutura de dados fila com o conceito de LIFO(Last In First Out), no qual o último a entrar é o primeiro a sair. Ela insere os nós filho sempre atrás dos nós pai, garantindo que os filhos sempre saiam antes para a expansão. A busca em profundidade pode ser utilizada usar com um limite de profundidade, para tratar casos em quais os níveis sejam infinitos ou simplesmente hajam muitos níveis. - o limite torna a busca mais rápida, mas não garante que vá encontrar um estado objetivo pois a escolha do limite é empírica e o objetivo pode estar um ou mais níveis a baixo do limite escolhido [1]. 17 2.3.1.2.1 Complexidade de tempo e espaço Considerando-se uma árvore com quantidade de nós sucessores uniforme, na qual seja ‘b’ essa quantidade de nós e ‘m’ a profundidade máxima existente na árvore. A fórmula de custo de tempo e espaço é : O(𝑏𝑚 ) Caso a busca seja feita em um grafo, ou seja, uma árvore que pode conter laços, o custo de tempo e espço pode ser inf. A figura 2 mostra um exemplo de execução do algoritmo explicado. Figura 2 – Busca em Profundidade [1] 2.3.2 Busca Heurística A busca em heurística utiliza uma estratégia de busca na qual o algoritmo tem informações adicionais sobre cada estado. É utilizada uma função de avaliação para determinar qual nó deve ser expandido, esta função é definida e implementada a cada problema. Uma estratégia de busca heurística muito utilizada é a busca gulosa. - Ela tenta expandir o nó mais próximo do nó objeto existente, para que isso seja possível, é necessário obter uma informação adicional como a distancia para chegar até o nó objetivo. 18 2.3.2.1 Busca Gulosa A busca gulosa não é completa, ou seja, ela não garante a chegada a um nó objetivo, pois o algoritmo pode ficar preso em um laço infinito. Uma forma de visualizar o problema é imaginar uma árvore com raiz A, pela heurística gulosa, que escolhe o caminho B, mas em B não existe outra opção a não ser voltar para A e assim ao voltar em A o próximo passo pela heurística é ir para B (de novo), o que gera um laço infinito [1]. A figura 3 mostra uma busca gulosa em uma árvore na qual a raíz é representada pela cidade Arad e o objetivo é chegar até a cidade de Bucharest, é possível notar que em cada nó possui a informação adicional da distância entre o nó atual e o objetivo, a heurística [1]. Figura 3 – Busca Heurística [1] 2.4 Jogo de Plataforma Os jogos de Plataforma fazem parte de um gênero no qual o jogador pode andar e pular sobre plataformas, obstáculos, inimigos, pegar itens e geralmente matar um inimigo 19 mais forte ao final de cada saga, o chefão (boss). O mais famoso jogo deste estilo é o Super Mario [7] lançada pela Nintendo em 1985, existem outros famosos como o Mega Man lançada pela capcon em 1987 [8]. Os jogos de plataformas não se restringem ao ambiente de duas dimensões, eles podem e são feitos em três dimensões, principalmente com o avanço da tecnologia de desenvolvimento de jogos. O jogo Crash Bandicoot, desenvolvido pela empresa Naughty Dog [9] é um famoso exemplo de um jogo de plataforma em três dimensões. Figura 4 – Jogo de Plataforma Super Mario 20 3 TRABALHOS RELACIONADOS A ideia deste trabalho surgiu após a visualização do vídeo MarI/O – Machine Learning for Video Games [10] no qual o autor desenvolveu uma inteligência artificial para o jogo super mario, utilizando aprendizagem de máquina, redes neurais artificiais e algoritmo genético. A ideia do autor surgiu baseada em [11], um estudo que aborda a técnica de redes neurais unida com algoritmo genético. O vídeo mostra o resultado do algortimo, no qual IA conseguiu completar o nível sem morrer e mostra também alguns processos de aprendizagem, onde o personagem tentou passar o nível varias vezes e não conseguiu. O autor de [12] fez uma pesquisa sobre inteligência artificial em jogos eletrônicos, desde o inicio da indústria, ele mostra técnicas como algoritmos determinísticos e padrão de movimento, máquinas de estado, sistema baseado em regras, algoritmos de busca e algoritmos genéticos. Em [13] são apresentadas diversas técnicas de IA aplicada em jogos eletrônicos, além de demonstrar a importância da IA em jogos. O autor conclui o trabalho falando que a tendência para os algoritmos são de técnicas não determinísticas, onde a técnica aprende com os seus erros e se adapta ao jogador humano. 21 4 MATERIAIS E MÉTODOS 4.1 Método Proposto A primeira etapa é descobrir quais algoritmos são mais utilizados para o estilo de jogo escolhido. Em seguida é necessário estudar as características dos algoritmos como a ordem de complexidade de tempo e espaço para cada um. Com estes dados já será possível definir pela teoria quais são os melhores em casos gerais, sendo assim eles serão submetidos à simulação do jogo. Após passar por diversas simulações, espera-se obter os algoritmos que consigam passar de nível e entre eles qual teve o melhor desempenho para o estilo de jogo proposto. Cada jogo de plataforma tem suas regras básicas e outras criadas pelo desenvolvedor, por exemplo, se o personagem pode atirar ou não, a quantidade de pulos que o personagem pode fazer ou o modo de matar os inimigos; por isso é necessário descrever quais são as regras do jogo. Inputs existentes para o jogador: ∙ Andar para direta ∙ Andar para esquerda ∙ Pular ∙ Descer rapidamente ∙ Fazer nada (ficar parado) Movimentos possíveis: são as combinações possíveis dos inputs existentes ∙ Andar para direita ∙ Andar para esquerda ∙ Pular ∙ Pular andando para direita ou para esquerda. ∙ Descer rapidamente ∙ Descer rapidamente andando para direita ou para esquerda ∙ Fazer nada (ficar parado) 22 Obstáculos ∙ Espinho estático: obstáculo que fica parado, se o personagem toca-lo irá morrer. ∙ Inimigo 01: anda de um lado para o outro, se o personagem pular em cima dele o inimigo morre, se o jogador tocá-lo de qualquer outra forma, o personagem morre. ∙ Inimigo 02: anda de um lado para o outro, se o personagem toca-lo irá morrer. Objetos estáticos: objetos que compõem a cena. ∙ Caixas de metal: objeto onde o personagem pode andar por cima ou tocá-lo de qualquer outra forma. ∙ Caixas de madeira marrom: se o personagem pular em cima a caixa quebra e ele ganha um pequeno impulso para cima. ∙ Caixas de madeira verde: se o personagem bater em baixo dela a caixa quebra e ele ganha um pequeno impulso para baixo. ∙ Cogumelos: se o personagem pular em cima dele irá ganhar um impulso para cima. ∙ Final de nível: é o objetivo de jogo, ao chegar neste ponto o personagem completa o nível. 4.2 Funcionamento das Inteligências Artificiais Os algoritmos escolhidos inicialmente foram de busca heurística, busca em largura e busca em profundidade por serem técnicas comuns e que conseguem chegar ao resultado esperado. Para todas as buscas utilizaremos os seguintes critérios: Cada nível da arvore de busca representa o tempo percorrido em jogo, ou seja, o nível 1 representa o inicio do jogo, no nível 2 todos os nós estarão no segundo tempo de jogo. O tempo pode se dividir em segundos ou frames. Cada nó da árvore possui a posição que o jogador está, a posição e o tempo de jogo formam juntos um único estado. As arestas da árvore são as jogadas possíveis, que geram um novo estado na árvore. 4.2.1 Busca heurística Esta IA irá executar todos os movimentos possíveis do personagem a cada intervalo de tempo. Após executar todos os movimentos, ela irá salvar no banco de dados qual o melhor movimento para cumprir o seu objetivo de passar de nível; na próxima iteração ela 23 irá executar todos os movimentos salvos no banco e repetirá a ação para achar o melhor movimento a seguir. Para achar o melhor movimento a IA vai seguir os seguintes critérios: ∙ Se um movimento leva a morte é descartado. ∙ Se um movimento leva a um lugar ruim é descartado. Os lugares ruins são previamente escolhidos no jogo para a IA poder detectá-los. ∙ Se o movimento leva a um lugar mais perto do objetivo, então é priorizado. São consideradas falhas: Se a escolha de “lugares ruins” for errada irá prejudicar na tomada de decisão. Portanto é preciso que o aplicador da técnica conheça muito bem o jogo, caso o contrário as chances da técnica falhar são grandes. 4.2.2 Busca em profundidade As vantagens da busca em profundidade sobre a busca heurística são por não precisar ter conhecimento prévio do problema, sendo assim ela pode ser executada diretamente sobre o jogo sem alterações. Segundo [1], a busca em profundidade tem uma complexidade muito elevada O(𝑏𝑑 ), por outro lado, ela explora todas as possibilidades, e tende a obter um resultado melhor. Para o problema proposto, será feita a busca mais a direita da árvore primeiro, pois sabe-se que o final do jogo está à direita do personagem, sendo assim a técnica pode conseguir completar o nível mais rapidamente. Mas, para conseguir o melhor modo de completar o nível com todos os benefícios, ou seja, pegando todos os itens e não morrendo, a técnica terá que passar por toda a árvore de busca. - cada caminho que obtenha êxito em completar o nível será salvo no banco de dados com todas as ações e a pontuação feita, assim ao final poderá ser feita uma comparação de resultados, e ser feita a consideração do que são resultados bons e resultados ótimos. 24 REFERÊNCIAS [1] NORVING, S. R. P. Articial Intelligence A Modern Approach. 3. ed. [S.l.]: Pearson, 1995. [2] CORREA, T. D. P. B. D. A evolução das técnicas de inteligência artificial. SBGAMES, 2012. [3] OSóRIO GUSTAVO PESSIN, S. F. V. N. F. Inteligência artificial para jogos: Agentes especiais com permissão para matar... e raciocinar! SBGAMES, 2007. [4] FELINTO, J. WoodPecker World. <https://play.google.com/store/apps/details?id= com.jonas.felinto>,Woodpecker World. [5] RICH, E. Artificial Intelligence. 2. ed. [S.l.]: McGraw-Hill Publishing Co., 1991. [6] NIGRIN, A. Neural networks for pattern recognittion. American Psychological Association (APA), 1993. [7] NINTENDO. Nintendo’s Oficial Home for Mario. 2014. <http://http: //www.mario.nintendo.com/> Nintendo. [8] CAPCOM. Mega Man Legacy Collection. 2015. <http://www.megaman.capcom. com/> Capcom. [9] DOG, N. 30 years Naughty Dog. <http://www.naughtydog.com/timeline/>,Naughty Dog. [10] SETHBLING. MarI/O - Machine Learning for Video Games. <https://www. youtube.com/watch?v=qv6UVOQ0F44>, MarI/O. [11] STANLEY, K. O.; MIIKKULAINEN, R. Evolving neural networks through augmenting topologies. Evolutionary computation, MIT Press, v. 10, n. 2, p. 99–127, 2002. [12] KISHIMOTO, A. Inteligência artificial em jogos eletrônicos. Academic research about Artificial Intelligence for games, 2004. [13] FUGITA, E. Algortimos de IA para jogos. [S.l.], 2005. Disponível em: <http://www.cin.ufpe.br/~tsr/tcc-Eduardo_Fujita-2005.pdf>.