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