UNIVERSIDADE DE SÃO PAULO
Transcrição
UNIVERSIDADE DE SÃO PAULO
UNIVERSIDADE DE SÃO PAULO Instituto de Ciências Matemáticas e de Computação Projeto e implementação de um jogo de Futebol 3d com uso de software livre Thiago Campos Viana São Carlos - SP 1 Projeto e implementação de um jogo de Futebol 3d com uso de software livre Thiago Campos Viana Orientador: Profº Fernando Santos Osório Monografia preliminar de conclusão de curso apresentada ao Instituto de Ciências Matemáticas e de Computação – ICMC-USP - para obtenção do título de Bacharel em Informática. Área de Concentração: Desenvolvimento de Jogos USP – São Carlos Junho de 2009 2 "Fi-lo porque qui-lo. Lê-lo-á quem suportá-lo". Jânio Quadros i Dedicatória A minha mãe Aluísia, que sempre me incentivou a continuar estudando. ii Agradecimentos A USP, que me ofereceu uma ótima infra-estrutura e me acolheu como uma mãe, me oferecendo alojamento e bolsa alimentação quando não tinha como me manter em São Carlos. Ao pessoal do NUMA, Núcleo de Manufatora Avançada, da USP, em especial o Profº Henrique Rozenfeld, o Profº Daniel Amaral e a Sayuri Tahara, aluna de pós-doutorado, por terem contribuído com a minha formação ao me escolherem como aluno de iniciação científica. Ao CNPq pela bolsa de iniciação científica. A empresa MZO por me contratar como programador e contribuir com minha estabilidade financeira. Ao professor Fernando Santos Osório por ter-me orientado durante o desenvolvimento deste projeto. A minha esposa, Kelly, por existir. iii Resumo O presente projeto consiste no planejamento e desenvolvimento de um jogo de futebol 3D seguindo os principais padrões relacionados ao desenvolvimento de software orientado a objetos utilizando apenas ferramentas e bibliotecas não-comerciais (software livre). O projeto tem como meta despertar o interesse brasileiro para o desenvolvimento de jogos esportivos fornecendo ao final do projeto todo o código fonte e documentação sob licença LGPL. iv Sumário LISTA DE ABREVIATURAS ............................................................................... VIII LISTA DE GRÁFICOS ............................................................................................. IX LISTA DE FIGURAS .................................................................................................. X CAPÍTULO 1: INTRODUÇÃO .................................................................................. 1 1.1. CONTEXTUALIZAÇÃO E MOTIVAÇÃO ..................................................................... 1 1.2. OBJETIVOS ............................................................................................................. 3 1.3. ORGANIZAÇÃO DO TRABALHO .............................................................................. 3 CAPÍTULO 2: REVISÃO BIBLIOGRÁFICA .......................................................... 5 2.1. CONSIDERAÇÕES INICIAIS ...................................................................................... 5 2.2. DESENVOLVIMENTO DE JOGOS ............................................................................... 5 2.3. GÊNEROS DE JOGOS ELETRÔNICOS ......................................................................... 6 2.3.1. Jogos de ação ................................................................................................. 7 2.3.2. Jogos de estratégia......................................................................................... 8 2.3.3. Role-Playing Games ...................................................................................... 8 2.3.4. Simuladores de esportes................................................................................. 9 2.3.5. Simuladores de veículos ................................................................................. 9 2.3.6. Quebra cabeças............................................................................................ 10 2.4. PROGRAMAÇÃO DE JOGOS ................................................................................... 10 2.4.1. C++.............................................................................................................. 11 v 2.4.2. UML ............................................................................................................. 11 2.4.3. A biblioteca gráfica Ogre 3d ....................................................................... 11 2.4.4. Modeladores 3d............................................................................................ 11 2.4.5. Engenharia de software ............................................................................... 12 2.4.6. Inteligência Artificial ................................................................................... 12 2.5. CONSIDERAÇÕES FINAIS ...................................................................................... 13 CAPÍTULO 3: DESENVOLVIMENTO DO TRABALHO ................................... 13 3.1. CONSIDERAÇÕES INICIAIS .................................................................................... 13 3.2. PROJETO .............................................................................................................. 13 3.3. DESCRIÇÃO DAS ATIVIDADES REALIZADAS ......................................................... 14 3.3.1. Pesquisa bibliográfica ................................................................................. 14 3.3.2. Estudos sobre desenvolvimento de jogos ..................................................... 14 3.3.3. Design do Jogo............................................................................................. 14 3.3.4. Captura de requisitos ................................................................................... 16 3.3.5. Planejamento da arquitetura ....................................................................... 16 3.3.6. Planejamento do estilo de codificação ........................................................ 16 3.3.7. Planejamento de testes ................................................................................. 16 3.3.8. Desenvolvimento dos modelos em 3d........................................................... 16 3.3.9. Estudo da linguagem C++ ........................................................................... 16 3.3.10. Estudo da biblioteca gráfica Ogre 3d ........................................................ 17 vi 3.3.11. Estudo da biblioteca física Ode ................................................................. 17 3.3.12. Pesquisas sobre inteligência artificial em jogos........................................ 17 3.3.13. Codificação ................................................................................................ 17 3.3.14. Fase de testes e correções de bugs ............................................................ 20 3.3.15. Lançamento da versão inicial .................................................................... 20 3.3.16. Manutenção ................................................................................................ 21 3.4. RESULTADOS OBTIDOS ........................................................................................ 21 3.5. CONSIDERAÇÕES FINAIS ...................................................................................... 23 CAPÍTULO 4: CONCLUSÃO .................................................................................. 24 4.1. ASPECTOS GERAIS ............................................................................................... 24 4.2. CONTRIBUIÇÕES .................................................................................................. 24 4.3. TRABALHOS FUTUROS ......................................................................................... 24 REFERÊNCIAS .......................................................................................................... 25 vii Lista de Abreviaturas 3D: Three-dimensional space. AI: Artificial Intelligence. EA: Electronic Arts. FIFA: Fédération Internationale de Football Association. GCC: GNU Compiler Collection. GNU: GNU's Not Unix. LGPL: GNU Lesser General Public License. MinGW: Minimalist GNU for Windows. NPC: Non-Player Character. Ode: Open Dynamics Engine. Ogre: Object-Oriented Graphics Rendering Engine. RPG: Role-Playing Game. SVN: Subversion. UML: Unified Modeling Language. viii Lista de Gráficos Gráfico 1 - Tempo de desenvolvimento de alguns softwares com reuso de código. Fonte( http://www.elis.ugent.be/squeeze++/performance.html ). ................................................. 2 Gráfico 2 - Crescimento da indústria de jogos. Fonte( http://www.gamasutra.com/phpbin/news_index.php?story=15259 ). .................................................................................. 6 ix Lista de Figuras Figura 1 - Super Mario World, Sonic 2 e Frogger...................................................................... 7 Figura 2 - Final Fantasy Tatics e Chess Masters 9000 ............................................................... 8 Figura 3 - Warcraft III e Age of Empires 3 ................................................................................ 8 Figura 4 - Final Fantasy VI e Secret of Mana ............................................................................ 9 Figura 5 - Fifa 09 e Pes 09.......................................................................................................... 9 Figura 6 - Need for Speed e Microsoft Flight Simulator.......................................................... 10 Figura 7 - Tetris ........................................................................................................................ 10 Figura 8- Tela do blender ......................................................................................................... 12 Figura 9 - Visão geral de um jogo de futebol ........................................................................... 15 Figura 10 - Classes do jogo Simple Soccer (BUCKLAND, 2005) .......................................... 18 Figura 11 - Design da AI do jogo (BUCKLAND, 2005) ......................................................... 19 Figura 12 - Divisão do campo em áreas (BUCKLAND, 2005) ............................................... 20 Figura 13 - Tela do jogo desenvolvido ..................................................................................... 22 x CAPÍTULO 1: INTRODUÇÃO 1.1. Contextualização e Motivação O planejamento e desenvolvimento de jogos é uma área que pode envolver o trabalho de várias pessoas de ramos diferentes, tais como o trabalho de um designer gráfico para desenvolver os modelos e animações, o de um compositor para os efeitos sonoros e músicas, e até mesmo o de um escritor para a história. Entende-se por desenvolvimento de jogos a área que tem como finalidade a criação de jogos eletrônicos. Como se observa em alguns jogos modernos, como o FIFA 2009, da EA, existe ali o trabalho de diversos profissionais. Dentre esses presentes, em toda equipe de desenvolvimento de jogos sempre existe algum da área de computação. Dentre as possíveis atividades para um profissional da área de computação estão a programação e a engenharia de software, que define uma metodologia para o desenvolvimento do jogo, as quais são absolutamente importantes para o sucesso de qualquer jogo. Mesmo projetos de jogos com uma equipe de profissionais bem qualificados podem falhar se não seguirem uma metodologia de desenvolvimento adequada. Por falha entendese o cancelamento do projeto ou um projeto que não gerou lucros para a empresa. Entre as possíveis causas do fracasso de um projeto estão: não cumprimento dos prazos, estouro do orçamento e baixa qualidade do produto final. Um projeto de sucesso deve seguir uma boa metodologia, ou seja, uma metodologia que já teve sua eficácia comprovada em situações semelhantes ao ambiente do projeto a ser desenvolvido. Existem inúmeras metodologias para o desenvolvimento de jogos, uma das metodologias que se mostrou mais adequada ao ambiente deste projeto é a proposta por Eric Bethke em seu livro Game Development and Production ( BETHKE, 2003 ), o qual apresenta uma versão modificada do Processo Unificado de Desenvolvimento de Software mais voltada ao desenvolvimento de jogos. Além de uma boa metodologia, é recomendado o reuso de tecnologias existentes. Para isso é necessário integrar módulos e bibliotecas que já foram desenvolvidos no projeto em questão tendo como objetivo economizar tempo de desenvolvimento de algo que já está pronto. De fato, muitos projetos estão fadados ao 1 fracasso se seus desenvolvedores decidirem fazer tudo do zero, ou seja, sem reaproveitar algo existente. A maioria dos projetos de sucesso se beneficia do uso de bibliotecas de códigos, ou seja, um conjunto de códigos que atendem um determinado propósito. De fato, o reuso de código diminui o tempo de desenvolvimento, ver gráfico 1, o que contribui para a entrega dos projetos dentro do prazo estabelecido. A maioria das boas bibliotecas para desenvolvimento de jogos, ou engines, não são open source, nem mesmo gratuitas, porém existem algumas bibliotecas open source de boa qualidade. Dominar o uso de bibliotecas open source pode tornar projetos de baixo orçamento economicamente viáveis. Entre as bibliotecas disponíveis que ajudam o desenvolvimento de jogos, existe a Ogre 3d (JUNKER, 2006 ), que é uma biblioteca gráfica open source com recursos de qualidade equiparáveis a bibliotecas fechadas de última geração. Gráfico 1 - Tempo de desenvolvimento de alguns softwares com reuso de código. Fonte( http://www.elis.ugent.be/squeeze++/performance.html ). 2 1.2. Objetivos O presente projeto consiste no planejamento e desenvolvimento de um jogo de futebol 3D seguindo os principais padrões relacionados ao desenvolvimento de software orientado a objetos utilizando apenas ferramentas e bibliotecas não-comerciais (software livre). O projeto tem como meta despertar o interesse brasileiro para o desenvolvimento de jogos esportivos fornecendo ao final do projeto todo o código fonte e documentação sob licença LGPL. Espera-se que, a partir do jogo desenvolvido, seja possível desenvolver outros que apresentem os elementos básicos encontrados nos outros simuladores do gênero e, acima de tudo, seja capaz de simular uma partida de futebol. O principal resultado será a especificação e desenvolvimento de um protótipo de jogo de futebol 3D. O projeto seguirá o modelo de desenvolvimento de jogos proposto no livro Game Development and Production ( BETHKE, 2003 ) do autor Erik Bethke, o qual apresenta uma versão modificada do Processo Unificado de Desenvolvimento de Software mais voltada ao desenvolvimento de jogos. Para o desenvolvimento do jogo serão usadas bibliotecas (engines) de programação de jogos (Ogre3D e ODE) e ferramentas de modelagem 3D (Blender) a fim de facilitar o desenvolvimento dos componentes do jogo. O projeto do jogo consiste em criar primeiramente o cenário (campo de futebol), depois os agentes (jogadores), a física do jogo (bola, chutes, colisões) e por fim os mecanismos de interação e controle (agentes e usuários) dos componentes presentes em uma partida de futebol. 1.3. Organização do Trabalho Esta monografia é dividida em quatro capítulos. O capítulo um faz uma introdução ao projeto desenvolvido, nele é definida a área de projeto, o problema abordado e as possíveis contribuições do projeto. O capítulo dois apresenta os conceitos e terminologias básicas da área do projeto, assim como o levantamento bibliográfico necessário para a 3 realização do trabalho. O capítulo três traz os detalhes sobre o projeto. No capítulo quatro é feita uma conclusão a respeito do trabalho desenvolvido. 4 CAPÍTULO 2: REVISÃO BIBLIOGRÁFICA 2.1. Considerações Iniciais Este capítulo apresenta os conceitos e terminologias da área de desenvolvimento de jogos assim como os principais materiais consultados para a realização deste projeto. 2.2. Desenvolvimento de jogos A área de desenvolvimento de jogos abordada neste trabalho é uma área multidisciplinar que trata do planejamento e desenvolvimento de jogos eletrônicos. Entende-se por jogos uma forma de entretenimento onde os participantes, ou jogadores, podem realizar um conjunto de ações para atingir um objetivo pré-estabelecido. Essa forma de entretenimento surgiu da necessidade do homem se preparar, ou seja, estar pronto com antecedência, para as diversas situações da vida que representavam perigo a sua sobrevivência. Assim, nossos ancestrais, ao mesmo tempo em que se divertiam fazendo disputas físicas obedecendo a certo conjunto de regras, tendo como objetivo sobrepujar o adversário, eles também se preparavam para as diversas situações que poderiam surgir no momento de uma caça ( KOSTER, 2005 ). Atualmente não estamos sujeitos a ações de predadores tão intensas como nossos ancestrais, porém os jogos continuam a existir e a preparar o homem. Nos últimos tempos surgiu uma forma peculiar de jogos, os jogos eletrônicos, que se apóiam em equipamentos eletrônicos para entreter e ensinar as pessoas. Assim a área de desenvolvimento de jogos eletrônicos é responsável por definir as regras e o ambiente de um jogo e criá-lo utilizando equipamentos eletrônicos. O livro A Theory of Fun For Game Design escrito por Raph Koster ( KOSTER, 2005 ) explica com detalhes o que são os jogos, como eles nos ensinam, como funciona o nosso cérebro em relação aos jogos, porque eles são divertidos e faz uma breve futurologia sobre jogos. O autor, Raph Koster, participou do desenvolvimento de vários jogos de 5 sucesso, sendo líder criativo e líder de design do Ultima Online e do Ultima Online: The Second Age, além de diretor criativo do jogo Star Wars Galaxies. Os jogos eletrônicos também despertam o interesse das pessoas não só pelo seu aspecto educacional ou pelo lazer que estes proporcionam, mas também pela economia que o mercado de jogos eletrônicos movimenta. Movimentando fortunas da ordem de bilhões de dólares por ano, como mostra gráfico 2, o mercado de jogos desperta o interesse tanto de fabricantes de softwares quanto de hardware. Atualmente muitas pessoas compram um computador apenas para poder jogar um jogo popular na esfera social na qual essa pessoa está inserida. Assim, pesquisas envolvendo jogos tornaram-se coisa séria nos últimos anos, pois muitos desejam uma parte dos bilhões de dólares para si, porém ela não vem sem o domínio e compreensão dessa área, conforme pode ser visto no gráfico 2. Gráfico 2 - Crescimento da indústria de jogos. Fonte( http://www.gamasutra.com/php-bin/news_index.php?story=15259 ). 2.3. Gêneros de jogos eletrônicos Os jogos eletrônicos podem ser classificados tendo como base os elementos presentes em seu gameplay e o ambiente desse jogo. Por gameplay entende-se o conjunto 6 de ações que um usuário pode realizar durante o jogo e o contexto dessas ações. Por ambiente, entende-se cenário, o design das fases, os personagens, história, música e todos os elementos que cerca o personagem do usuário no jogo. Essa divisão em categorias de jogos é útil para jogadores e desenvolvedores. Se por um lado, saber quais os elementos presentes em um jogo ajuda o jogador na escolha de um novo jogo, por outro lado, ajuda os desenvolvedores a manter o foco de seus projetos em um determinado público e em determinados elementos de gameplay. O livro Andrew Rollings and Ernest Adams on Game Design (ROLLINGS & ADAMS, 2003) dedica um capítulo inteiro para cada um dos tipos de jogos. Andrew Rollings, autor deste livro também, é autor de outro livro, não menos importante, Game Architecture and Design (ROLLINGS & ADAMS, 2003), e é consultor técnico na indústria de jogos. Ernest Adams já trabalhou em diversos jogos e foi produtor de áudio/vídeo do jogo Madden NFL Football. Esta seção apresenta descrições dos principais gêneros de jogos eletrônicos apresentados no livro. 2.3.1. Jogos de ação Jogos de ação focam os reflexos e a coordenação entre mão e visão sobre pressão. Eles podem ser divididos entre shooters e não-shooters. Os shooters tem como enfoque a habilidade do usuário em acertar objetos em movimento, alguns exemplos são: SpaceInvaders, Half-Life e Doom. Os não shooters tem como enfoque a habilidade de desviar de obstáculos, coletar itens e chegar a um determinado objetivo no menor tempo possível, exemplos destes são: Super Mario, Sonic e Frogger. Figura 1 - Super Mario World, Sonic 2 e Frogger 7 2.3.2. Jogos de estratégia Jogos de estratégia têm suas origens nos jogos de tabuleiros. Esse gênero de jogo tem como enfoque o uso do raciocínio lógico e as disputas entre usuários ou entre usuários e computador. Os jogos dessa categoria podem ser subdivididos em dois grupos, os jogos de estratégias baseados em turnos e os de tempo-real. Enquanto os baseados em turno permitem ao jogador realizar suas ações apenas quando chega a sua vez de jogar, os de tempo-real, por sua vez, não possuem essa restrição. Alguns exemplos de jogos de estratégia baseados em turnos são: Final Fantasy Tatics e Chess Masters 9000. Alguns exemplos de jogos de estratégia de tempo real são: Warcraft III e Age of Empires. Figura 2 - Final Fantasy Tatics e Chess Masters 9000 Figura 3 - Warcraft III e Age of Empires 3 2.3.3. Role-Playing Games Os role-playing games, ou RPGs, ou jogos de interpretação de papéis, como o próprio nome sugere, são jogos com enfoque na habilidade do usuário em interpretar papéis. Nesse tipo de jogo os usuários devem conversar com NPCs, cumprir tarefas e tomar decisões tendo como base as histórias envolvendo seus personagens. Alguns exemplos de RPGs são: Final Fantasy VI e Secret of Mana. 8 Figura 4 - Final Fantasy VI e Secret of Mana 2.3.4. Simuladores de esportes Simuladores de esportes são jogos que tem como base as regras de esportes que existem na vida real, tais como futebol e basquetebol. Eles pertencem a um pequeno grupo de gêneros de jogos que permitem uma comparação direta com o mundo real. Como exemplos, pode-se citar o Fifa 2009 e o Pro Evolution Soccer 2009. Figura 5 - Fifa 09 e Pes 09 2.3.5. Simuladores de veículos Os jogos simuladores de veículos tentam transmitir a sensação de dirigir um determinado veículo. Alguns exemplos desse tipo de jogo são o Need for Speed e o Microsoft Flight Simulator 2002. 9 Figura 6 - Need for Speed e Microsoft Flight Simulator 2.3.6. Quebra cabeças Apesar desse tipo de jogo focar o raciocínio lógico como os de estratégia, os jogadores geralmente competem apenas contra o tempo e por pontos e não contra um adversário. Um exemplo de jogo quebra cabeça é o Tetris. Figura 7 - Tetris 2.4. Programação de jogos A área de programação de jogos é uma subárea da de desenvolvimento de jogos. O programador de jogos é o responsável por, através de uma linguagem de programação, criar um software do tipo jogo eletrônico. Além de saber programar, é desejável que ele saiba integrar o trabalho de outros profissionais, tais como o modelos 3d desenvolvidos por um artista gráfico, em seu programa e também conheça UML, engenharia de software e inteligência artificial. 10 2.4.1. C++ A linguagem C++ é uma linguagem que pode ser utilizada para o desenvolvimento de jogos com gráficos tridimensionais de última geração. Trata-se de uma linguagem orientada a objetos, ou seja, a programação é feita em função de objetos e relações entre esses objetos. Ela é fundamentada na linguagem C, a qual é procedural. O livro C++ Primer (LIPPMAN, 1998), de Stanley Lippman, é recomendado para quem está interessado em aprender a desenvolver programas em C++, outro livro recomendado é o C++ FAQs (CLINE, LOMOW & GIROU, 1998), o qual traz as respostas para as questões perguntadas com mais freqüência por profissionais no site USERNET. 2.4.2. UML UML é a abreviação para Unified Modeling Language, como o próprio nome sugere, trata-se de uma linguagem de modelagem. A UML em si não é um método, porém a maioria dos métodos utiliza a UML e sua notação gráfica. O livro UML Distilled (FOWLER, 1999) por Martin Fowler faz uma breve introdução a UML. 2.4.3. A biblioteca gráfica Ogre 3d Ogre 3d é uma biblioteca já bastante estável, flexível, independente de plataforma, estável e poderosa que é utilizada em aplicações com gráficos tridimensionais criados em tempo real. Para uma introdução ao Ogre 3d, existe o livro Pro Ogre 3d Programming (JUNKER, 2006), do autor Gregory Junker. 2.4.4. Modeladores 3d Modeladores 3d são programas que auxiliam a criação de modelos 3d. O blender 3d é um exemplo de modelador 3d open source. No próprio site do blender, blender.org, são encontradas várias informações sobre as funções de um modelador 3d. 11 Figura 8- Tela do blender 2.4.5. Engenharia de software A engenharia de software e a área responsável por criar metodologias para garantir o sucesso de projetos envolvendo o desenvolvimento de software. Por sucesso, entende-se projetos que são terminados no prazo, dentro do orçamento e de qualidade. A engenharia de software trata do planejamento de todo o processo de desenvolvimento de softwares, e como jogos eletrônicos são um tipo específico de software, o conhecimento dessa área é fundamental para o sucesso do desenvolvimento de um jogo. O livro Software Engineering and Computer Games (RUCKER, 2002 ), de Rudy Rucker, explica com detalhes o que é engenharia de software e sua relação com jogos eletrônicos. 2.4.6. Inteligência Artificial A inteligência artificial em jogos é a área responsável por criar o comportamento de todos os elementos do jogo que não são controlados pelos usuários, incluindo os personagens que irão competir contra os usuários. Em um jogo de futebol, essa área seria responsável por controlar os jogadores do time adversário ao do usuário, tendo como meta imitar o comportamento de um humano controlando o time adversário, criando assim, um desafio agradável ao usuário. Neste projeto, muito do que é encontrado no livro Programming Game By Example ( BUCKLAND, 2005 ), do autor Mat Buckland, foi de grande ajuda. 12 2.5. Considerações Finais Neste capítulo foram expostos os principais tópicos relacionados à área de desenvolvimento de jogos e os principais livros relacionados a cada uma deles. O estudo desses tópicos é de fundamental importância para um conhecimento mais profundo da área, e foram importantes para o desenvolvimento do trabalho, o qual foca mais na parte de programação. O próximo capítulo detalha como se deu o desenvolvimento do trabalho. CAPÍTULO 3: DESENVOLVIMENTO DO TRABALHO 3.1. Considerações Iniciais Neste capítulo são descritos os processos de desenvolvimento do trabalho. A seção 3.2 descreve o projeto que foi desenvolvido. A seção 3.3 contém todos os detalhes das atividades realizadas. A seção 3.4 entra em detalhes sobre os resultados obtidos. Por fim, na seção 3.5 é feita uma conclusão sobre o projeto. 3.2. Projeto O presente projeto tem como objetivo o desenvolvimento de um jogo de futebol 3d utilizando a biblioteca gráfica Ogre 3d tendo como metodologia o processo de criação de jogos descrito no livro Game Development and Production ( BETHKE, 2003 ) e o código do jogo Simple Soccer ( BUCKLAND, 2005 ). A seção 3.3 explica com detalhes o trabalho desenvolvido. 13 3.3. Descrição das Atividades Realizadas 3.3.1. Pesquisa bibliográfica Nessa etapa fez-se uma pesquisa bibliográfica inicial, a qual serviu como base para todo o projeto. Foram selecionados os principais livros da área. 3.3.2. Estudos sobre desenvolvimento de jogos Após a pesquisa bibliográfica inicial, foi necessário o estudo sobre desenvolvimento de jogos. Nesta etapa foram estudadas as peculiaridades dessa área para planejar melhor o desenvolvimento do jogo. 3.3.3. Design do Jogo Na fase design de jogo foi definido o jogo a ser desenvolvido. Nela foram definidos os principais mecanismos do jogo, ou seja, seu gameplay. Nessa fase foi proposta uma visão geral do jogo, ou seja, uma descrição do funcionamento do jogo, seus gráficos, a interação do usuário com o jogo, os menus e o fluxo do jogo. Também foram desenvolvidos, nesta fase, diagramas utilizando a notação de máquinas de estados finitos mostrando, entre outras coisas, uma visão geral do fluxo de ações desejáveis do jogo, como mostra o exemplo da figura 9. Esses diagramas mostram todos os possíveis estados de um objeto existente no jogo, incluindo o jogo em si, e os eventos que ocasionam as mudanças de estado e qual o novo estado de um objeto após o evento que ocasiona a mudança de estado. 14 Figura 9 - Visão geral de um jogo de futebol 15 3.3.4. Captura de requisitos Na fase de captura de requisitos, foram especificados os requisitos do jogo a ser desenvolvido. Os requisitos especificados nesta fase serviriam como base para a fase de desenvolvimento. Nesta fase foi definido o escopo do projeto, as funções do jogo, as características dos usuários. Também foram definidas as restrições do jogo. 3.3.5. Planejamento da arquitetura Nesta etapa do desenvolvimento foi definida a estrutura do programa, suas classes e a interação entre classes, assim como o fluxo de dados. Também foram definidos os possíveis casos de uso para o sistema. 3.3.6. Planejamento do estilo de codificação Nesta etapa foram definidos os padrões de codificação. Os comentários, os nomes das classes, atributos e métodos durante a etapa de programação deveriam seguir os padrões definidos nesta etapa. 3.3.7. Planejamento de testes Nesta etapa foram definidos os possíveis testes para o jogo desenvolvido. 3.3.8. Desenvolvimento dos modelos em 3d Nesta etapa foram desenvolvidos os modelos em 3d, como o enfoque do projeto não é a modelagem 3d, todos os jogadores, e a bola, foram representados por simples esferas, e o campo e o resto por simples planos. 3.3.9. Estudo da linguagem C++ Nessa etapa foi estudada a linguagem de programação C++. Foi visto a composição de um programa escrito em C++, como funciona as classes, os tipos de dados, as principais bibliotecas da linguagem, os condicionais e outros pontos peculiares a linguagem C++. 16 3.3.10. Estudo da biblioteca gráfica Ogre 3d Na etapa de estudo da biblioteca gráfica Ogre 3d foram estudadas as funções das principais classes dessa biblioteca e como usar a biblioteca para criar jogos tridimensionais. 3.3.11. Estudo da biblioteca física Ode Durante a etapa de estudo da biblioteca Ogre 3d foi constatada a necessidade de estudar uma biblioteca física, a qual é responsável pelo gerenciamento de colisões entre os objetos do jogo. A biblioteca escolhida foi a Ode, devido a sua facilidade de integração com a biblioteca Ogre 3d e a boa avaliação que esta recebeu da comunidade de programação de jogos em geral. 3.3.12. Pesquisas sobre inteligência artificial em jogos Nesta etapa, foram feitas pesquisas sobre as principais técnicas utilizadas para a criação da inteligência artificial em jogos. 3.3.13. Codificação Nesta, foi iniciada a programação do jogo. Infelizmente, foi constatada a impossibilidade de se criar um jogo de futebol com todos os detalhes especificados nas fases anteriores em um projeto de uma única pessoa, assim fez-se uma simplificação de todo o projeto. Por fim, chegou-se a conclusão de que o melhor a ser feito seria a adaptação do jogo de futebol intitulado Simple Soccer presente no livro Programming Game AI by Example (BUCKLAND, 2005) para uma versão tridimensional utilizando a Ogre 3d e a partir dessa adaptação realizar melhorias, acrescentando os demais recursos de modo iterativo e incremental. Até o presente momento, essa é a fase na qual se encontra o projeto. Assim, de acordo com o livro de Mat Buckland (BUCKLAND, 2005), as classes foram criadas seguindo o respectivo diagrama da figura 10 e o design da AI seguiu o diagrama da figura 11. 17 Figura 10 - Classes do jogo Simple Soccer (BUCKLAND, 2005) 18 Figura 11 - Design da AI do jogo (BUCKLAND, 2005) A AI desenvolvida tem como base o campo, sendo que este é dividido 18 partes, como mostra a figura 12. A partir dessa divisão, foram escolhidas as posições dos jogadores e como eles movimentam quando estão na defesa e no ataque. Essa divisão é muito importante, pois os jogadores movem-se tendo-a como base. Quando um time está 19 com a bola, os jogadores vão para certas áreas e assumem a posição de ataque, quando na defesa, eles vão para outras áreas assumindo a posição de defesa. Figura 12 - Divisão do campo em áreas (BUCKLAND, 2005) A classe SoccerTeam tem quatro ponteiros para jogadores chaves: aquele que está mais próximo a bola, o jogador que está com a posse da bola, o jogador de suporte e o jogador que irá receber o passo. Durante a execução do programa, cada time calcula e seleciona esses jogadores, isso facilita a seleção de ações para jogadores individualmente baseando-se em consultas na classe SoccerTeam em busca de informações sobre quem são esses jogadores. 3.3.14. Fase de testes e correções de bugs Esta é uma etapa prevista pela metodologia adotada, porém ainda não foi realizada. 3.3.15. Lançamento da versão inicial A versão inicial do jogo está prevista para junho de 2009, nesta versão, seriam implementados apenas os recursos básicos, isso é, os jogadores poderiam chutar a bola, fazer passes, chutar ao gol e fazer gols. Nessa versão inicial também teria a presença de um 20 goleiro, porém não haveria laterais, nem regra de impedimentos, juiz e tudo mais um pouco mais complicado de se implementar. Para esta versão, foi previsto o controle dos jogadores apenas pelo computador, ou seja, a versão inicial não permite que os usuários controlem os jogadores devido ao pouco tempo disponível para a implementação desse recurso. Embora seja o recurso fundamental para se chamar o programa de jogo, escolheu-se focar no desenvolvimento da AI, que foi considerado mais importante em termos de pesquisas, para permitir que os jogadores, de ambos os times, se comportassem de forma inteligente e, assim, no futuro quando os usuários fossem capazes de controlar os jogadores, o jogo já estaria com uma base bem sólida no tocante ao comportamento dos jogadores, tanto adversários quanto membros do próprio time. 3.3.16. Manutenção Na fase de manutenção seriam feitas as melhorias, ou seja, seriam acrescentadas algumas funcionalidades, gráficos melhores, e outras coisas. Esta fase está prevista para o projeto de graduação II. 3.4. Resultados Obtidos Durante o projeto, decidiu-se que todo o código ficaria disponível no Google Codes, code.google.com, com o título do projeto como OgreSoccer ( http://code.google.com/p/ogresoccer ). O código está disponível para todas as pessoas que possuem um programa SVN. O site Google Codes é um site da empresa Google que hospeda projetos gratuitamente, ele possibilita o controle de versão do projeto e o acesso, para leitura, por clientes SVN ao código de qualquer projeto. A alteração do código é controlada pelo administrador do projeto. Assim, o código resultante do projeto está disponível neste site. O jogo OgreSoccer é semelhante ao Simple Soccer (BUCKLAND, 2005 ) escrito por Mat Buckland, tendo como diferencia os gráficos em 3d e a integração com as bibliotecas Ogre 3d e a Ode. Apesar dos recursos da biblioteca Ogre 3d serem 21 subutilizados nessa aplicação, isto não impossibilita que futuras versões do projeto se beneficiem deles. O jogo é composto por dois times, um com jogadores azuis e goleiro roxo, e outro com jogadores vermelhos e goleiro amarelo, uma bola branca, um plano representando o campo e quatro paredes, figura 13. O gol não está representado na figura, porém quando a bola toca na parede no lugar que deveria estar o gol, o gol é marcado. Figura 13 - Tela do jogo desenvolvido Como o código do projeto foi escrito no ambiente de desenvolvimento do programa Code::Blocks com o compilador MingW, que tem como base o GCC, GNU Compiler Collection, ocorreram vários problemas na adaptação do código do Simple Soccer ( BUCKLAND, 2005 ), o qual foi desenvolvido para ser compilado com o Visual C++ da 22 Microsoft. Esta adaptação foi necessária para tornar o código independente de plataforma, pois o GCC é um compilador open source, assim como a Ogre 3d, já o Visual C++ e seu compilador não. Outro problema foi adaptar todo o código para o ambiente 3d e utilizar a biblioteca Ogre 3d, foi necessário reescrever o código a maior parte do código. 3.5. Considerações Finais O desenvolvimento de jogos esportivos deve ter como enfoque, antes de tudo, a inteligência artificial. Seja para o controle dos jogadores isoladamente, seja para o controle dos jogadores em função do próprio time ou do time adversário, ela se mostra importante. 23 CAPÍTULO 4: CONCLUSÃO 4.1. Aspectos Gerais O desenvolvimento do presente projeto teve muitas reviravoltas no que diz respeito aos requisitos do jogo a ser desenvolvido. Em um primeiro momento estabeleceu-se que o jogo deveria ter todas as funcionalidades de um jogo de futebol atual, porém essa visão mostrou-se imatura devido ao fato de o projeto possuir apenas um programador, assim, foi decidido que para esse projeto já seria satisfatório ter um jogo de futebol em 3d bem simples, porém funcionando, assim cortou-se a maioria das funcionalidades sonhadas no inicio do projeto. Durante o desenvolvimento, muito foi aprendido sobre desenvolvimento de jogos especialmente no tocante a programação de jogos, visto que o autor possui um background como programador web, especializado em php e que nunca havia programado em C++. Assim o projeto contribui também para o aprendizado de uma nova linguagem de programação para o autor. 4.2. Contribuições Este trabalho contribui com a atualização do jogo Simple Soccer do livro Programming Game AI by Example (BUCKLAND, 2005) para o ambiente 3d e com integração do mesmo com a biblioteca gráfica Ogre 3d e a biblioteca física Ode. Também pode ser constatado com o desenvolvimento desse projeto, que jogos de um programador apenas devem ser bastante modestos em relação a sua versão inicial. 4.3. Trabalhos Futuros Como pode ser observado, muitas melhorias devem ser feitas no jogo, assim, espera-se que no futuro sejam melhorados os gráficos, aproveitando melhor os recursos da biblioteca Ogre 3d, a inteligência artificial do jogo e o sistema do jogo. Tudo isso em uma possível versão 2.0. 24 REFERÊNCIAS BETHKE, Eric. Game development and production. Plano, Texas: Wordware Publishing, Inc., 2003. 414 p. BUCKLAND, Mat. Programming Game AI by example. Plano, Texas: Wordware Publishing, Inc., 2005. 495 p. CLINE, Marshall, LOMOW, Greg, GIROU, Mike. C++ FAQs. 2 ed. Reading, Massachussetts. Addison Wesley Longman, Inc., 1998. 624 p. FOWLER, Martin, SCOTT, Kendall. UML Distilled: A Brief Guide to the Standard Object Modeling Language. 2 ed. Reading, Massachussetts. Addison Wesley Longman, Inc., 1999. 224 p. JUNKER, Gregory. Pro Ogre 3d Programming: Leverage the power of Modern Real-Time Hardware-Accelerated 3d Graphics with the Best-in-Class 3d Graphics Library. New York, NY: Springer-Verlag New York, Inc., 2006. 288 p. KOSTER, Raph. A Theory of Fun for Game Design. Scottsdale, Arizona: Paraglyph Press, Inc, 2005. 256 p. LIPPMAN, Stanley B., LAJOIE, Josée. C++ Primer. 3 ed. Reading, Massachussetts. Addison Wesley Longman, Inc., 1998. 1264 p. ROLLINGS, Andrew, ADAMS, Ernest. Andrew Rollings and Ernest Adams on Game Design. Indianapolis, Indiana: New Riders Publishing, 2003. 648 p. ROLLINGS, Andrew, MORRIS, Dave. Game Architecture and Design: A new edition. Indianapolis, Indiana: New Riders Publishing, 2004. 930 p. RUCKER, Rudy. Software Engineering and Computer Games. Reading, Massachussetts. Addison Wesley Longman, Inc., 2002. 544 p. 25