Você está na página 1de 117

1

UNIVERSIDADE FEDERAL DE ITAJUB UNIFEI


INSTITUTO DE CINCIAS - ICI DEPARTAMENTO DE MATEMTICA E COMPUTAO DMC PROJETO FINAL DE GRADUAO

DESENVOLVIMENTO DE JOGOS DE COMPUTADOR

MAIRLO HIDEYOSHI GUIBO CARNEIRO DA LUZ

Itajub MG

2004

UNIVERSIDADE FEDERAL DE ITAJUB UNIFEI


INSTITUTO DE CINCIAS - ICI DEPARTAMENTO DE MATEMTICA E COMPUTAO DMC
PROJETO FINAL DE GRADUAO

DESENVOLVIMENTO DE JOGOS DE COMPUTADOR

Trabalho organizado por MAIRLO HIDEYOSHI GUIBO CARNEIRO DA LUZ


Monografia apresentada ao Departamento de Matemtica e Computao da Universidade Federal de Itajub como parte dos requisitos para obteno do Grau de Bacharel em Cincia da Computao.

ORIENTADOR: Siles Paulino de Toledo CO-ORIENTADOR: Alexandre Carlos Brando Ramos UNIFEI 11/2004

Luz, Mairlo Hideyoshi Guibo Carneiro da

Desenvolvimento de Jogos de Computador

Monografia apresentada ao Departamento de Matemtica e Computao da Universidade Federal de Itajub, para concluso do Curso de Bacharelado em Cincia da Computao.

Orientador: Prof. Dr. Siles Paulino de Toledo Co-Orientador: Prof. Dr. Alexandre Carlos Brando Ramos

1.Jogos 2.DirectX 3.Inteligncia Artificial 4.Game Design 5.Flocking 6.QuadTree 7.Programao C++

AGRADECIMENTOS

A Deus. Aos meus pais Amauri e Jlia. A meu irmo Marlon e meu tio Hiromassa. Aos Professores Siles e Alexandre, pelas lies e orientaes. Aos Professores do Curso de Cincia da Computao, pelas lies e pela amizade, e com quem compartilhei uma maravilhosa jornada acadmica.

SUMRIO

CAPTULO 1 INTRODUO 1.1 O QUE UM JOGO? 1.2 TIPOS DE JOGOS 1.3 HISTRIA DOS JOGOS 1.4 MERCADO DE JOGOS 1.4.1 MERCADO MUNDIAL 1.4.2 MERCADO BRASILEIRO 1.5 TRABALHOS RELACIONADOS 1.6 OBJETIVO DO TRABALHO 1.7 APRESENTAO DA TESE 1.8 BIBLIOGRAFIA REFERENTE AO CAPTULO 1 CAPTULO 2 ESTRUTURA DO DESENVOLVIMENTO 2.1 ESQUELETO DE DESENVOLVIMENTO 2.2 BIBLIOGRAFIA REFERENTE AO CAPTULO 2 CAPTULO 3 GAME DESIGN 3.1 O QUE GAME DESIGN? 3.2 QUAL A IMPORTNCIA DO GAME DESIGN? 3.3 CONCEITUAO DO JOGO 3.3.1 CRIANDO A IDIA DO JOGO 3.3.2 OS ELEMENTOS DE UM JOGO 3.4 O MUNDO E A FANTASIA DO JOGO 3.4.1 IMERSO E A SUSPENSO DA DESCONVICO 3.4.2 A IMPORTNCIA DA HARMONIA 3.4.3 A DIMENSO FSICA 3.4.4 A DIMENSO TEMPORAL 3.4.5 A DIMENSO TICA 3.5 ESTRIA 3.6 DESENVOLVIMENTO DO PERSONAGEM 3.6.1 DESIGN DE PERSONAGENS DIRIGIDOS ARTE 3.6.2 DESIGN DE PERSONAGENS DIRIGIDOS ESTRIA 3.6.3 ESTERITIPOS DE PERSONAGENS 3.7 CRIANDO A EXPERINCIA DO JOGADOR 3.7.1 CRIANDO A INTERFACE HOMEM-COMPUTADOR 3.7.1.1 Disposio da interface 3.7.1.2 Elementos para uma interface do usurio simples 3.8 BALANCEAMENTO DO JOGO 3.8.1 BALANCEAMENTO ESTTICO 3.8.2 BALANCEAMENTO DINMICO 3.8.3 CRIANDO SISTEMAS BALANCEADOS 3.9 BIBLIOGRAFIA REFERENTE AO CAPTULO 3

1 1 2 6 7 7 8 9 9 9 10 12 12 13 14 14 15 16 17 18 21 22 22 22 23 24 25 28 28 30 31 32 33 33 34 37 37 38 39 40

CAPTULO 4 INTELIGNCIA ARTIFICIAL 4.2 TCNICAS MAIS COMUNS DE IA UTILIZADAS EM JOGOS 4.3 IA DO DEMO 4.3.1 MQUINAS DE ESTADOS 4.3.2 ALGORITMO GENTICO 4.3.3 SCRIPTING 4.3.4 ALGORITMO DE FUGA E ATAQUE DO PSSARO MUTANTE 4.4 BIBLIOGRAFIA REFERENTE AO CAPTULO 4 CAPTULO 5 PROGRAMAO 5.1 APIS PARA A PROGRAMAO 5.2 ESTRUTURA DOS JOGOS 5.2.1 CDIGO-FONTE DE EXEMPLO 5.3 TCNICAS UTILIZADAS NO DEMO 5.3.1 MAPAS DE ALTITUDE 5.3.1.1 Gerando a geometria do terreno 5.3.1.2 Acessando o vetor terreno 5.3.2 BILLBOARD 5.3.2.1 Criao das texturas 5.3.2.2 Algoritmo do billboard 5.4 BIBLIOGRAFIA REFERENTE AO CAPTULO 5 CAPTULO 6 CONCLUSES 6.1 GAME DESIGN 6.2 INTELIGNCIA ARTIFICIAL 6.3 PROGRAMAO 6.4 PROPOSTAS FUTURAS 6.4.1 FLOCKING 6.4.2 IMPLEMENTAO DA REDE 6.4.3 ALGORITMO DE QUADTREE 6.5 BIBLIOGRAFIA REFERENTE AO CAPTULO 6 ANEXOS ANEXO A: DOCUMENTAO DA IDIA DO DEMO ANEXO B: IMAGENS EM TONS DE CINZA E O FORMATO RAW ANEXO C: HARDWARE E SOFTWARES NECESSRIOS ANEXO D: DOCUMENTAO DO CDIGO-FONTE DO DEMO

41 41 44 44 46 47 48 49 50 50 52 54 56 56 57 59 60 60 62 64 65 65 66 67 68 68 69 70 70 71 72 76 78 82

LISTA DAS IMAGENS


Figura 1 Street Fighter....................................................................................................................................... 2 Figura 2 Warcraft 3............................................................................................................................................ 3 Figura 3 Winning Eleven ................................................................................................................................... 4 Figura 4 Erinia.................................................................................................................................................... 5 Figura 5 SpaceWar! ........................................................................................................................................... 6 Figura 6 Estrutura do Desenvolvimento de Jogos ......................................................................................... 12 Figura 7 Jogo de Damas................................................................................................................................... 14 Figura 8 McDonalds ......................................................................................................................................... 15 Figura 9 O Senhor dos Anis e Spider-Man................................................................................................... 17 Figura 10 Winning Eleven ............................................................................................................................... 19 Figura 11 Pac-Man ........................................................................................................................................... 19 Figura 12 Super Mario Bros............................................................................................................................ 20 Figura 13 The Need For Speed Underground 2............................................................................................. 21 Figura 14 Tetris ................................................................................................................................................ 23 Figura 15 GTA.................................................................................................................................................. 25 Figura 16 Profundidade nas estrias da srie Final Fantasy........................................................................ 26 Figura 17 Pac-Man ........................................................................................................................................... 29 Figura 18 Lara Croft........................................................................................................................................ 29 Figura 19 Personagem Engraadinha............................................................................................................. 30 Figura 20 Personagens da srie Final Fantasy............................................................................................... 31 Figura 21 - Outlive .............................................................................................................................................. 33 Figura 22 reas mais Utilizadas para Interfaceamento................................................................................ 34 Figura 23 Doom 3 ............................................................................................................................................. 42 Figura 24 The Sims........................................................................................................................................... 44 Figura 25 Mquina de Estados da IA do Pssaro Mutante .......................................................................... 45 Figura 26 Estrutura do Cdigo de um Jogo................................................................................................... 52 Figura 27 Mapa de Altitude............................................................................................................................. 57 Figura 28 Conceitos para a Criao de Terrenos 3D .................................................................................... 58 Figura 29 Textura de uma rvore .................................................................................................................. 61 Figura 30 Canal Alfa de uma Textura............................................................................................................ 62 Figura 31 Shigeru Miyamoto, Will Wright e Sid Meier................................................................................ 65 Figura 32 Birds Nightmare ............................................................................................................................ 69 Figura 33 Variao dos Tons de Cinza ........................................................................................................... 76

RESUMO

Trata-se de uma introduo ao desenvolvimento de jogos para computador, seus vrios gneros e breve discusso sobre o estgio atual de seu mercado no Brasil e no Mundo. So abordadas a Estrutura de Desenvolvimento de Jogos, a desmistificao de alguns conceitos sobre o Game Design e a sua importncia no mundo virtual. Fala da Inteligncia Artificial aplicada aos jogos, juntamente com a descrio das diversas tcnicas utilizadas e um desbravamento da Inteligncia Artificial implementada no demo, que acompanha a obra. So introduzidos os conceitos necessrios para a implementao do esqueleto de um jogo e esmiuadas duas tcnicas utilizadas no demo. Em seguida, so apresentadas as concluses do autor referentes aos diversos tpicos abordados e sugestes para trabalhos futuros, com uma breve introduo sobre os temas sugeridos. Ao final, h o detalhamento do processo de desenvolvimento do demo, que acompanha a monografia, bem como uma pequena explicao sobre imagens em tons de cinza e o formato RAW, a especificao do hardware e dos softwares necessrios para o desenvolvimento de jogos e a documentao do cdigo-fonte do demo.

ABSTRACT

Its an introduction to the computers game development, its genres and a brief discussion about its actual markets stage in Brazil and in the World. The Structure of Games Development, the demystification of some concepts on the Game Design and its importance in the virtual world are boarded. It speaks about the Artificial Intelligence applied to games, together with a description of the diverse used techniques and a taming of the Artificial Intelligence implemented in the demo, that folloies this workmanship. The concepts necessary for the implementation of the games skeleton are introduced and two techniques used in the demo are minced. Soon after, the authors conclusions about the diverse boarded topics and suggestions for future works are presented, with a brief introduction on the suggested subjects. To end, there is the detailing of the demos development process, that folloies this monograph, as well a little explanation about grayscale images and the RAW format, the hardwares and softwares specification needed to the games development, and the documentation of demos source code.

CAPTULO 1 INTRODUO

1.1 O que um Jogo?

Para o desejado entendimento de jogos e da etapa de design dos jogos, necessrio o estabelecimento de certos conceitos. Um dos conceitos mais primordiais nesta fase inicial seria a definio do que seria um jogo. Primeiro, um jogo um sistema formal, fechado, que subjetivamente representa um subconjunto da realidade. Por fechado, quer dizer que o jogo completo e auto-suficiente quanto a sua estrutura. O modelo do mundo criado pelo jogo internamente completo; no necessria a referncia a agentes de fora do jogo. Alguns jogos com um mau design falham em encontrar esse requisito. Alguns jogos produzem conflitos entre as regras, por permitirem o desenvolvimento de situaes onde as regras no se aplicam. O jogador precisa ento estender as regras para cobrir a situao na qual ele se encontra. Essa situao sempre produz argumentos. Um design de um jogo correto impede essa possibilidade; ele fechado porque as regras cobrem todas as contingncias encontradas no jogo. Por formal, quer dizer apenas que o jogo tem regras explcitas. H jogos informais na qual as regras so declaradas de maneira livre ou deliberadamente vagas. Tais jogos so rapidamente removidos dos que tem mais popularidade quanto ao game play. O termo sistema frequentemente usado em abuso, mas neste caso sua aplicao muito apropriada. Um jogo uma coleo de partes, que interagem entre si, geralmente de maneiras complexas. Isso um sistema. (CRAWFORD, 1982, P. 7).

1.2 Tipos de Jogos

Para um bom projeto de um jogo, desejvel um conhecimento quanto aos diversos gneros de jogos disponveis. Dentre eles, podemos destacar os seguintes: (a) Jogos de Ao: representam uma grande faixa de estilos

de jogos, podendo estes tanto serem encontrados com grficos 3D, quanto com grficos 2D. Geralmente eles so divididos em dois subgneros: aqueles em que se atira e aqueles em que no se atira. As principais habilidades que este tipo de jogo explora no jogador so o tempo de reao e a coordenao entre a viso e as mos do jogador em situaes de presso. Fazem parte desse gnero jogos de luta, como Street Fighter, que pode ser visto na Figura 1, jogos de tiro, como Doom III, jogos tipo labirinto, como Pac-Man, Mario, dentre outros tipos de jogos;

Figura 1 Street Fighter

(b)

Jogos de Estratgia: jogos baseados nos jogos de

tabuleiro. A grande maioria dos jogos deste gnero so lanados para PC, por sua grande capacidade de iterao entre usurio e jogo. Dividem-se em duas formas principais: baseado em turnos e em tempo real. Dentro desse

gnero destacam-se ttulos como Civilization, Warcraft, Outlive, dentre outros. Na Figura 2, pode ser vista uma imagem do jogo Warcraft 3;

Figura 2 Warcraft 3

(c)

Jogos de RPG: assim como os jogos de estratgia, os

RPGs formam um gnero de jogo que tambm foi derivado dos jogos de papel e caneta. Geralmente os RPGs possuem duas caractersticas que os distinguem dos demais gneros: Personagens de jogo configurveis, que melhoram no decorrer do jogo, com o aumento da experincia; Estrias muito bem definidas e que desenvolvem no decorrer do jogo. A parte da estria uma parte muito singular desse gnero. Nela, o jogador interage, de maneira que ele acaba se tornando uma parte muito real da mesma. Fazem parte desse gnero jogos do estilo Final Fantasy, Dragon Quest, Diablo, Erinia, dentre outros; (d) Jogos de Esportes: ao contrrio dos outros gneros, onde

o mundo em que a estria se desenvolve pouco conhecida pelos jogadores, nos jogos esportivos o mundo bastante conhecido. Por exemplo, muitas pessoas conhecem como o futebol profissional e as suas regras. Entretanto, isso no quer dizer que os jogos desse gnero so extremamente realistas.

Exemplos de jogos desse gnero incluem Winning Eleven, Fifa Soccer, NHL, FutSim etc. Na Figura 3, tem-se um screenshot do jogo Winning Eleven;

Figura 3 Winning Eleven

(e)

Jogos de Simulao de Veculos: simuladores de veculos

tentam criar a sensao de dirigir ou pilotar um veculo, real ou imaginrio. No caso de veculos reais, o principal ponto a ser levado em considerao a aproximao da realidade. Os jogadores que iro jogar este tipo de jogo querem ter a experincia mais prxima possvel de qual seria a sensao na realidade. Jogos como The Need For Speed Underground, Nascar, Flight Simulator, dentre outros, fazem parte desse gnero. (f) Jogos de Construes e Gerenciamento de Simulaes:

neste gnero de jogo o jogador no tem que enfrentar um inimigo, mas construir algo dentro de um determinado contexto e fazer o seu gerenciamento. Quanto melhor o jogador entender e controlar o processo de gerenciamento, maior ser o seu sucesso na empreitada desse gnero. Sim City, Capitalism so os jogos mais famosos desse gnero;

(g)

Jogos de Aventura: ao contrrio dos demais gneros, um

jogo de aventura no uma simulao ou uma competio. Ele uma estria interativa sobre um determinado personagem que controlado pelo jogador. Apesar do gnero ter se alterado muito no decorrer dos anos, existem certas qualidades que caracterizam esse gnero: explorao, coleo ou manipulao de objetos, soluo de quebra-cabeas e a nfase reduzida quanto ao combate ou aos elementos de ao. Podemos citar jogos como The Legend of Zelda, Grim Fandango, Gabriel Knight etc. como do gnero; (h) Jogos de Vida Artificial: estes jogos envolvem uma

modelagem do processo biolgico, geralmente para simular os ciclos de vida de seres vivos, podendo simular a vida de pessoas, animais, monstros etc. The Sims um jogo desse gnero;

Figura 4 Erinia

(i)

Jogos On-line: nos ltimos anos, os jogos on-line

deixaram de ser apenas uma minscula frao do comrcio de entretenimento interativo, para se tornar a maior frao desse mercado. Atualmente esse gnero tem crescido bastante para o lado dos MMOs, Multiplayer Massive Online, que so os jogos que se podem jogar somente via rede, acessando o servidor central do jogo e interagindo com outros

jogadores. Neste gnero, as trapaas no jogo devem ser evitadas ao mximo. Futsim e Erinia so dois MMOs desenvolvidos no Brasil. Na Figura 4, vse uma imagem do jogo Erinia.

1.3 Histria dos Jogos

Em 1958, Willy Higinbothan criou um prottipo de um jogo de tnis que fazia uso de um osciloscpio como display. Embora seja considerada uma das primeiras tentativas de desenvolver um jogo eletrnico, pouco lembrado pelos amantes de clssicos. O jogo mais lembrado pelos amantes o SpaceWar!, da Figura 5, criado por Steve Russel durante a sua graduao em engenharia no MIT (Massachussets Institute of Technology).

Figura 5 SpaceWar!

Depois, no decorrer dos anos, foram criados vrios aparelhos, que utilizavam a televiso como um display para tornar os jogos mais interativos. Dentre os inmeros, podemos citar o Odyssey, que foi o primeiro, o Atari 2600, o Master System, o Nintendo, o Mega Drive, o Famicom, o Neo Geo, o Sega CD, o PlayStation 1 e 2, o Nintendo 64, o Dreamcast, o XBox e o Gamecube.

Nesse intervalo, tambm aparecem vrios videogames portteis, como o GameBoy, o Super GameBoy, GameBoy Color, o Neo Geo Pocket, o GameBoy Advanced, o N-Gage. E no final de 2004, a briga pelo mercado de portteis comeou a pegar fogo, com a Sony anunciando que ir entrar nesse mercado, com o PSP, mercado esse dominado pelo Nintendo, com o GameBoy. Nisso a Nintendo contra-ataca, com o lanamento do Nintendo DS, que tem duas telas, sendo uma delas sensvel ao toque. J no mercado de videogames, o PlayStation 2 detm a liderana absoluta , seguido por Xbox e GameCube. No decorrer da histria, verifica-se que o que faz um determinado videogame lder do mercado a qualidade dos jogos que se encontram a disposio dos jogadores, bem como a variedade dos mesmos.

1.4 Mercado de Jogos

1.4.1 Mercado mundial

Atualmente o mercado de jogos no mundo se encontra em franca expanso, sendo que, segundo (BUENO, 2004), a previso de crescimento do mercado para os prximos anos a seguinte: Mercado de jogos para Celular: mdia de crescimento anual de 34%; Mercado de jogos para PC: ficar estabilizado at o final de 2005, comeo de 2006, quando dever comear a haver recesso;

Mercado de jogos para Consoles: dever ficar estvel at o final de 2005, quando dever chegar a nova gerao de videogames, resultando em um aumento anual na ordem de 11%.

1.4.2 Mercado brasileiro

J no mercado brasileiro, a situao a seguinte: Mercado de jogos para Celular: deve crescer bastante, seguindo o ritmo mundial de crescimento acelerado. Tem surgido bastante empresas, principalmente na regio do Paran, em Campinas e em Pernambuco para o desenvolvimento de jogos para celulares nacionais; Mercado de jogos para PC: a cada ano que se passa o capital arrecadado com as vendas est caindo, sendo que nos ltimos anos a receita anual gira em torno de R$ 60 milhes, pouco para um mercado que j chegou a girar R$ 500 milhes por ano. No entanto, empresas brasileiras tm surgido para vender jogos ao mercado externo; Mercado de jogos para Consoles: comrcio legal de consoles inexistente no Brasil e, devido ao alto ndice de pirataria, no h previso de vendas legais no pas. Quanto ao desenvolvimento de jogos, j existem duas empresas que dispe de licenas para o desenvolvimento de jogos para o Xbox.

1.5 Trabalhos Relacionados

(SANTOS, 2002) SANTOS, Giliard Lopes dos, Inteligncia Artificial em Jogos 3D. 2002. Monografia apresentada ao Departamento de Cincia da Computao da Universidade Federal Fluminense em agosto de 2002.

(DINZIO, 1999) DINZIO, Clailson Soares. Inteligncia Artificial em Jogos de Tiro em Primeira Pessoa. 1999.

1.6 Objetivo do Trabalho

Este trabalho tem por objetivo fazer um levantamento do processo de desenvolvimento de jogos de computador, desde a etapa de criao at a etapa de implementao. Para tal, alm do embasamento terico, tambm criado um demo de um jogo de tiro, que acompanha a monografia.

1.7 Apresentao da Tese

No captulo 2 (dois) apresenta-se a estrutura para o desenvolvimento de um jogo, bem como uma explicao sucinta sobre cada etapa. No captulo 3 (trs) h uma breve introduo ao que seja o game design, etapa na qual o jogo desenvolvido, passando por esquemas que ajudam na criao de estrias e personagens.

10

J no captulo 4 (quatro) fala-se um pouco sobre as diversas tcnicas utilizadas na inteligncia artificial, bem como feita a explicao da IA utilizada no demo. Quanto ao captulo 5 (cinco), so apresentadas as diversas opes para a implementao de jogos, alm de serem explicadas algumas das tcnicas utilizadas na implementao do demo. E no captulo 6 (seis) temos as concluses referentes ao trabalho desenvolvido, alm de sugestes para trabalhos futuros. No anexo A, a idia do demo expressa. No anexo B explicado o formato RAW, incluindo imagens em tons de cinza. Finalizando, o anexo C lista o hardware e os softwares necessrios para o desenvolvimento de jogos de computador, enquanto que no anexo D explica-se a funcionalidade dos mtodos das classes do demo.

1.8 Bibliografia Referente ao Captulo 1

(BANANAGAMES, 2004) BANANAGAMES, capturado no dia 25/08/2004, Dirio, On-line, Disponvel na Internet www.bananagames.com.br

(BUENO, 2004) BUENO, Glauco DAlessandro. Das salas de criao s prateleiras do varejo. Campinas, Unicamp, 11 set. 2004. Palestra Ministrada aos Congressistas da GameTech 2004, pelo Gerente Geral da Amrica do Sul da ATARI Brasil Ltda.

11

(CRAWFORD, 1982) CRAWFORD, Cris; The Art of Computer Game Design. 1982. Capturado em dezembro 2003. Online. Disponvel na Internet http://www.vancouver.wsu.edu/fac/peabody/gamebook/Coverpage.html.

(ROLLINGS; ADAMS, 2003) ROLLINGS, Andrew; ADAMS, Ernest. Andrew Rollings and Ernest Adams on Game Design. 1 edio. Nova Iorque: New Riders, Maio de 2003. 622 pginas.

(UOL, 2004) UOL, capturado no dia 25/08/2004, Dirio, On-line, Disponvel na Internet

www.uol.com.br/jogos

12

CAPTULO 2 ESTRUTURA DO DESENVOLVIMENTO

2.1 Esqueleto de Desenvolvimento

O desenvolvimento de jogos segue vrias etapas, conforme pode ser visto na Figura 6.

Figura 6 Estrutura do Desenvolvimento de Jogos

Onde o Game Design seria a etapa onde o jogo seria criado, juntamente com a sua estria, os personagens, o mundo que esses personagens interagiriam entre si etc. J no Rascunho dos Objetos e Cenrios seriam feitos rascunhos dos objetos, dos cenrios, dos personagens, das moradias etc., para auxiliar os modeladores na hora da modelagem.

13

Na Modelagem, os modeladores e as pessoas responsveis pelas texturas criam os modelos e as texturas que sero utilizadas no jogo. Enquanto isso na Engenharia de Software feita a modelagem do sistema, geralmente por partes, ao contrrio dos sistemas de banco de dados, onde a modelagem feita por completo antes do incio da sua implementao. E na Programao o jogo desenvolvido. Aqui feita a programao da lgica do jogo, bem como a inteligncia artificial, a insero do udio etc. Vale lembrar que tanto os Rascunhos e a Modelagem so feitos em paralelo Engenharia de Software e a Programao. No decorrer dessa monografia, ser dada uma maior nfase sobre as etapas de Game Design e Programao.

2.2 Bibliografia Referente ao Captulo 2

(CLUA, 2004) CLUA, Esteban Walter Gonzalez. Ferramentas necessrias para desenvolvimento de jogos. Campinas, Unicamp, 11 set. 2004. Palestra Ministrada aos Congressistas da GameTech 2004, pelo Representante do Departamento de Informtica da Puc-Rio.

14

CAPTULO 3 GAME DESIGN

Quando as crianas brincam de jogos de tabuleiros, muitas vezes elas negociam as alteraes das regras desses jogos de modo a torn-los mais atraentes. Um bom exemplo o jogo de damas. Essa participao natural de jogar um jogo nos encoraja a pensar sobre e, s vezes, at alterar as regras do mesmo, isto , seu design.

Figura 7 Jogo de Damas

Mas algumas pessoas querem alterar mais coisas, alm das regras. Eles querem criar o jogo inteiro. Eles tm idias de como sero as regras, os personagens, o mundo, os desafios etc. destes jogos. disso que ser falado nesse captulo.

3.1 O que Game Design?

Game Design um processo de: Imaginar um jogo; Definir o modo como ele funcionar; Descrever os elementos que criam um jogo (conceitual, funcional, artstico e outros);

15

Transmitir essas informaes para o time que construir o jogo.

3.2 Qual a Importncia do Game Design?

O Game Design, pelo menos para computadores e consoles, um campo muito recente ainda, e h ainda muito a ser descoberto. A indstria fonogrfica e a publicitria sabem muito mais sobre como invocar uma atmosfera interessante que qualquer game designer e, mais importante, eles sabem como aplicar as tcnicas de uma maneira bem efetiva. Um exemplo disso pode ser visto no McDonalds, onde as cores que eles utilizam so predominantemente o amarelo e o vermelho. Psiclogos dizem que a cor amarela influencia na percepo de fome, enquanto que o vermelho aumenta a ansiedade e a necessidade de correr. O resultado, segundo os psiclogos, que as pessoas pedem mais comida e as comem mais rpido. As razes so que o vermelho lembra sangue, significando perigo, e o amarelo uma cor predominante nas comidas. (MORRIS aput ROLLINGS, ADAMS, P. 06)

Figura 8 McDonalds

16

Praticamente todas as pessoas que jogam algum jogo acreditam que podem ser um bom game designer. A habilidade de fazer o design de um jogo , para se dizer, imperceptvel. Muitas vezes parece que qualquer pessoa est apta a fazer isso. O Game Design no pode ser reduzido a apenas escrever uma estria simples, criar 1 ou 2 documentos e dizer aos programadores o que fazer. a mesma coisa que dizer que qualquer pessoa que tiver um martelo pode criar um violo. Um bom design de um jogo conseqncia de muita habilidade do game designer. Pode-se verificar em revistas de jogos o quanto um jogo perde pontos por um mau design. Jogos podem parecer tecnicamente soberbos e terem grficos maravilhosos, mas se a jogabilidade no agradar, ele perde muitos pontos e vendas frente aos jornalistas e, principalmente, aos jogadores. Apesar do design de um jogo ser um processo criativo que requer a habilidade de sonhar e imaginar maravilhosos mundos populados pelas mais diversas e estranhas criaturas, existem muitos princpios prticos que devem ser analisados. Quando se conhece bem as tcnicas do game design, o game designer pode, ento, usar a sua imaginao e o seu intelecto para trabalhar naquilo que bastante importante para um jogo, a jogabilidade.

3.3 Conceituao do Jogo

a primeira parte do game design. Nesta etapa onde se cria e refina a idia do jogo. Ao final desta etapa no ser necessrio que se saiba todos os detalhes de como o jogo funcionar, mas necessrio um claro entendimento sobre como ser o jogo.

17

3.3.1 Criando a idia do jogo

Idias de jogos vm de quase todos os lugares. Estimulando-se a criatividade consegue-se bastantes resultados prticos.. Das coisas mais simples do dia-a-dia podem surgir idias para grandes jogos. Muitas idias de jogos vm dos sonhos. No dos sonhos que acontecem quando se est dormindo, mas sim daqueles que acontecem em momentos de divagao. A mente comea a se remoer, imaginando mundos, personagens e situaes que fazem parte de seu desejo. Mundos que se deseja viver. Personagens que se almeja conhecer e, at mesmo, viver. Situaes que podem ser que nunca sejam vivenciadas porque so impossveis, como voar ou lutar contra monstros mutantes, ou aquelas que vivem no seu subconsciente e que se almeja vivenciar. Idias tambm podem surgir de livros, filmes, programas de televiso ou de outros meios de entretenimento. Jogos como Spider-Man, O Senhor Dos Anis, dentre outros, que se encontram na Figura 9, seguem essa linha.

Figura 9 O Senhor dos Anis e Spider-Man

Tambm podem surgir idias de outros jogos. Muitas vezes as pessoas se perguntam, no decorrer de uma partida de um jogo, se determinada ao no poderia ser feita de um modo diferente ou se alguma coisa poderia ter uma dificuldade diferente. Neste caso,

18

no basta apenas jogar o jogo. necessrio que se preste ateno enquanto joga-se. E, principalmente, que se faam anotaes sobre todas as observaes feitas, desde coisas que poderiam mudar a at coisas que esto funcionando de uma maneira que lhe agrada. No processo de escolha da idia do jogo, deve-se levar em conta tambm que, se for um jogo comercial, a idia dele no deve agradar apenas um jogador. No caso, o game designer. Ela deve agradar a maior faixa de jogadores possveis. O principal propsito de um jogo prover entretenimento para outras pessoas. Algumas das primeiras perguntas que um publisher far ao game designer para saber se deve ou no promover o jogo sero:Por que algum vai querer jogar esse jogo? e O que far com que algum compre esse jogo ao invs de outro?.

3.3.2 Os elementos de um jogo

Enquanto filmes, peas, livros e televiso so todos formas de entretenimento passivo, onde a pessoa no espera participar da interao dos fatos, os jogos so exatamente o contrrio. As pessoas que participam de um jogo esperam serem entretidas atravs da participao ativa no mesmo. Por isso, jogos so muito mais complicados de serem feitos. As pessoas amam o sentimento de envolvimento e de poder que os jogos provem. Um jogo acontece num universo artificial que governado por regras. So essas regras que definem as aes e movimentos que os jogadores podem e o que eles no podem fazer no decorrer do jogo. Definir as regras do jogo uma parte chave do game design. Existem jogos onde as regras j esto definidas, como o caso do futebol. Nestes casos as regras no precisam ser definidas, apenas aplicadas. Um bom exemplo o jogo Winning Eleven, da Figura 10.

19

Figura 10 Winning Eleven

As regras tambm definiro os desafios que os jogadores tero que enfrentam para vencer o jogo e ento dever ser definida tambm uma regra que definir a condio de vitria do jogador. Por condio de vitria entende-se o estado na qual um ou mais jogadores podem se encontram e que os definem como ganhadores. Outra coisa que deve ser definida o mundo que o jogador interagir. Por exemplo, um jogo de futebol tem um mundo definido, que o campo de futebol. Ser discutido um pouco mais sobre isso num tpico adiante. Deve-se ter uma idia tambm do modelo de interao entre o jogador para com o mundo. Aqui feita a escolha para saber se o jogador poder influenciar apenas sobre uma rea local, como eu algum jogo no estilo aventura, ou poder influenciar vrias partes do mundo, como o caso do Pac-Man, visto na Figura 11.

Figura 11 Pac-Man

20

Depois vem a perspectiva a ser utilizada no jogo. Existem vrias. Dentre elas, podemos destacar: top-down, isomtrica, primeira pessoa, terceira pessoa e sidescrolling. A perspectiva em side-scrolling pode ser encontrada na Figura 12, no jogo Super Mario Bros.

Figura 12 Super Mario Bros.

E, depois, deve-se ter em mente o quo real dever ser o jogo. Por exemplo, no Flight Simulator, da Microsoft, quanto maior o realismo, melhor. O objetivo desse simulador de vo ser o mais realista possvel. J no caso de jogos do estilo Mario, da Nintendo, o jogador pode cair de alturas inimaginveis e ainda assim continuar vivo. Essa uma das escolhas que o game designer deve ter em mente na hora de criar o jogo. Finalizando, no momento da concepo, importante ter uma noo e saber sintetizar em uma frase qual a estria do jogador. Por exemplo: Rodrigo Guedes, atirador da tropa de elite do exrcito brasileiro, tentar salvar a terra da manifestao de uma nova variao de um vrus letal para a raa humana, exterminando pssaros mutantes que hospedam esse vrus e que atacam os seres humanos uma sntese da estria do demo que acompanha esta monografia.

21

3.4 O Mundo e a Fantasia do Jogo

O mundo de um jogo um universo artificial, um lugar imaginrio. Todo jogo, no importando o seu tamanho, acontece em um mundo. Muitos jogos tm um mundo fsico ou, pelo menos, uma manifestao visvel do mundo: um conjunto de cartas, um tabuleiro etc. Mesmo o jogo da velha contm um mundo: um pequeno entrelaado de retas que governado por regras e uma condio de vitria. Na Figura 13 vemos o mundo do jogo The Need for Speed Underground 2.

Figura 13 The Need For Speed Underground 2

A fantasia um componente fictcio dos jogos. Por exemplo, no xadrez, apesar do tabuleiro e do movimento das peas serem apenas uma idia abstrata, as peas possuem nomes que remontam aos tempos medievais, recriando um mundo blico em eras remotas. Existem jogos cuja fantasia desnecessria, como o prprio xadrez, mas h outros em que, sem a fantasia, no teriam razo de existir ou seriam jogos diferentes. Uma regra geral que pode ser levada em considerao que, quanto mais um jogo depende dos seus mecanismos centrais para entreter, menos a fantasia importa.

22

3.4.1 Imerso e a suspenso da desconvico

Uma palavra chave que pode resumir a experincia de se ler um livro ou ver um filme a suspenso da desconvico. Suspenso da desconvico um estado mental na qual a pessoa pode se encontrar, por um perodo de tempo, onde ela acredita que tudo que est acontecendo faz parte da realidade. E isso tambm se aplica a jogos. Quanto melhor a iluso que transcende um jogo, mais imerso no jogo o jogador se encontrar. E esse um dos principais objetivos de um bom game design.

3.4.2 A importncia da harmonia

Bons jogos e mundos passam a sensao de harmonia, isto , um sentimento de que todas as partes do jogo pertencem a um nico contexto. A harmonia essencial num mundo de um bom jogo. A cada deciso tomada referente ao game design, deve ser perguntado se aquela idia pertence ao contexto do mundo, se a harmonia no ser quebrada. No recomendada a insero de idias simplesmente porque elas paream ser legais ou porque estejam na moda.

3.4.3 A dimenso fsica

A maioria dos jogos so implementados em algum tipo de espao fsico, onde o jogador pode interagir. Algumas decises devem ser tomadas com relao a dimenso fsica de um jogo: Dimenses: uma das primeiras perguntas que deve ser feita refere-se a quantas dimenses deve ter o jogo. Se ele deve ser 2D, 3D ou at

23

mesmo 4D, sendo que, neste caso, existiria um mundo paralelo, onde as regras que regulariam esse mundo seriam diferentes das do outro mundo. Na Figura 14 temos o Tetris, que um jogo 2D;

Figura 14 Tetris

Escala: por escala entende-se o tamanho do espao fsico, assim como o tamanho relativo dos objetos. Em jogos com um estilo mais infantil, a escala nem sempre se aproxima da realidade, enquanto que, em jogos adultos, recomendado que a escala fique o mais prximo possvel da realidade; Limites: como computadores tm um espao finito, o mundo fsico tambm deve ter limites. Deve-se tomar cuidado ao escolher os limites do mundo para no quebrar a suspenso da desconvico do jogador.

3.4.4 A dimenso temporal

Ela define o modo com o tempo tratado no mundo e os modos como ele difere em relao ao mundo real.

24

Em muitos jogos, o conceito da passagem do tempo no includo. Tudo acontece como se tudo estivesse acontecendo num mesmo momento. O cenrio no escurece, no ocorrem trocas de estaes etc. Para se fazer a incluso da dimenso temporal, pode-se implementar: Tempo Varivel: o tempo passa de uma maneira mais rpida que a realidade e, quando os eventos no so importantes como, por exemplo, quando o personagem vai dormir, o tempo real que decorre insignificante; Tempo Anmalo: ocorre quando o tempo necessrio para o crescimento de uma rvore, por exemplo, o mesmo da poda da mesma, ou seja, o tempo transcorre de maneiras diferentes para as diversas atividades do jogo; Deixando o jogador ajustar o tempo: em jogos de esportes, por exemplo, um jogo de futebol, dificilmente um jogador gostaria de jogar 45 minutos cada tempo. Ento, cabe ao jogo permitir que o jogador escolha o tempo real que dever transcorrer na passagem de um tempo de 45 minutos.

3.4.5 A dimenso tica

A dimenso tica define o que certo e o que errado no contexto do jogo. Em um primeiro momento, essa dimenso pode parecer meio inapropriada para o contexto, mas em jogos que trazem uma fantasia, tambm h um sistema tico que define como deve se comportar o jogador.

25

No jogo deve haver uma anlise sobre sua dimenso tica. Por exemplo, no jogo ser permitido que se matem cidados inocentes ou somente terroristas? Haver penalizaes caso o jogador desrespeite alguma dessas regras? O objetivo do jogo fere alguma regra tica da sociedade? No demo que acompanha essa monografia, por exemplo, a idia inicial era de se matar pssaros, mas como essa era uma idia conflitante com a tica reinante na sociedade, os pssaros foram transformados em pssaros mutantes. Matar pssaros mutantes no uma idia to conflitante perante a sociedade. Um outro bom exemplo o jogo GTA, da Figura 15. Em sua primeira verso, o jogador ganhava pontos ao atropelar pessoas idosas, grvidas etc.

Figura 15 GTA

3.5 Estria

Jogos de computador geralmente tm algum tipo de estria anexada a eles. O aprofundamento e a importncia da estria no jogo dependem muito do tipo de jogo a ser desenvolvido. Por exemplo, em jogos ao estilo Space Invaders a estria requer apenas uma linha:ETs esto invadindo a terra e s existe uma pessoa capaz de acabar com eles: o jogador, enquanto que, em jogos ao estilo Grim Fandango, Final Fantasy, a estria bem detalhada e envolvente, to elaboradas quanto livros e/ou novelas.

26

Figura 16 Profundidade nas estrias da srie Final Fantasy

Segundo o livro A Practical Guide to the Hero Journey, de Christopher Vogler, a jornada de um heri segue os seguintes passos (VOGLER aput ROLLINGS, ADAMS, P. 95): O Mundo: o jogador apresentado ao heri e ao mundo fsico. A sua apresentao pode ocorrer de duas maneiras, sendo que na primeira os eventos que acontecero ao heri so explicados ao jogador e, na segunda, eventos do passado que colidem com eventos presentes so apresentados ao jogador; O Chamado: ocorre algum evento convocando o heri a sair de seu mundo para entrar em um mundo especial, onde as aventuras o esperam; A Recusa da Chamada: aqui o heri luta contra a vontade de continuar em seu mundo seguro e a enfrentar os perigos e as aventuras do mundo externo, colocando em risco a sua vida. Em jogos, geralmente o heri no recusa a chamada; O Encontro com o Mentor: geralmente o mentor aparece na forma de uma pessoa velha e sua funo situar o heri quanto a sua localizao e situao, provendo tambm dicas e sugestes para que o jogador se familiarize mais rpido ao jogo;

27

Atravessando o Primeiro Obstculo: onde ocorre a mudana do mundo do personagem para o mundo das aventuras. Para entrar no mundo das aventuras, o heri deve estar pronto psicologicamente e cheio de coragem para enfrentar o desconhecido. Depois que o heri enfrentou seus medos, ele entra definitivamente no mundo do jogo; Testes, Aliados e Inimigos: a parte mais longa de uma estria, onde o heri far testes, aprendendo sobre o chamado bem e o mal do mundo e tambm conhecer aliados e inimigos que faro parte do desenvolvimento da estria; A Aproximao Caverna mais Profunda: aps vrios testes, o heri se aproxima da parte mais esperada da estria. utilizado para conduzir o heri aprovao, que ocorrer mais a frente; A Aprovao: o ltimo teste: lutar contra o chefe final. No decorrer da estria o heri deve ter passado por vrios testes difceis, mas este o maior de todos. nele que ser definido o futuro da humanidade. A Recompensa: depois que o chefe final derrotado, o heri recebe a recompensa. Geralmente nessa parte que a estria termina, e o desfecho da estria contado ao jogador; A Estrada da Volta: em alguns jogos, aps o recebimento da recompensa, o heri se prepara para voltar da aventura a seu mundo. Mas como o jogador mudou muito no decorrer da estria, pode ser difcil, se no impossvel, o jogador poder voltar a reintegrar o seu mundo;

28

A Ressurreio: com todas (ou quase todas) as respostas das questes que surgiram na estria sendo respondidas, aqui onde as dvidas restantes so respondidas; O Retorno com a Recompensa: agora que a estria acabou, o heri volta para o seu mundo e retoma a sua vida normal. O jogador ver o heri aproveitar os benefcios de sua recompensa. Uma forma muito comum de se terminar com um novo comeo. Dessa forma, o jogador fica se perguntando O que ser que acontece depois?, deixando uma brecha para uma continuao.

3.6 Desenvolvimento do Personagem

Foi-se o tempo em que os Personagens dos jogos eram meros blocos de pixels. Com a melhoria dos hardwares disponveis, a questo da personalizao dos personagens se tornou muito importante. Atualmente o desenvolvimento de Personagens se d de duas maneiras: o personagem criado baseado na arte ou baseando na estria.

3.6.1 Design de Personagens dirigidos Arte

Muitos personagens so criados basicamente na aparncia visual. Por exemplo, o Pac-Man, visto na Figura 17, foi inspirado numa pizza sem um pedao. A herona Lara Croft, da Figura 18, foi criada baseando-se na garota dos sonhos do artista.

29

Figura 17 Pac-Man

Personagens que foram desenvolvidos de fontes puramente artsticas tendem a ser mais superficiais do que aqueles baseados nas estrias. E em muitos jogos no h a necessidade de personagens bem desenvolvidos. Neste caso muito melhor criar um personagem sem personalidade e deixar a cargo do jogador criar essa personalidade. Muitos desses personagens so criados com propsitos bem definidos, apelando-se para aparncias: Mais sexys: a forma do corpo exagerada, aumentando-se os seios e os quadris das personagens femininas, diminuindo a barriga, de modo a abrigar apenas os rgos essenciais, dando a essas personagens um maior apelo sexual, conforme pode ser visto na Figura 18, da Lara Croft;

Figura 18 Lara Croft

30

Mais engraadinhos: a cabea no proporcional ao corpo, assim como os olhos, mais ou menos ao estilo dos animes japoneses. Na Figura 19 temos um exemplo de uma personagem engraadinha.

Figura 19 Personagem Engraadinha

3.6.2 Design de Personagens dirigidos Estria

O melhor jeito de se criar um personagem bem definido criar uma estria e, com base na estria, desenvolver as caractersticas e a personalidade do personagem antes de se considerar a sua aparncia. Geralmente os artistas preferem trabalhar com descries detalhadas, o que permite a eles entender e visualizar melhor o personagem. Para se criar personagens de grande apelo, trs regras de ouro devem ser seguidas: O personagem precisa intrigar o jogador; O personagem precisa cativar o jogador, fazendo com que o jogador goste dele; O personagem precisa mudar e crescer de acordo com a sua experincia no decorrer do jogo.

31

Pode-se verificar que essas regras so seguidas risca nos jogos da srie Final Fantasy. Alguns desses personagens podem ser vistos na Figura 20.

Figura 20 Personagens da srie Final Fantasy

3.6.3 Esteritipos de Personagens

Existem vrios esteritipos de personagens nas estrias. Alguns dos mais utilizados so: O Heri: tradicionalmente, ele o centro da estria. Na literatura, o heri o personagem com um ou mais problemas, que busca resolver esses problemas no decorrer da estria. O mais importante quanto ao heri garantir que os jogadores se identifiquem com ele. O heri precisa ter qualidades que o jogador simpatize e aprecie; Mentor: o personagem que guia o jogador na jornada. Nem sempre ele guia para o melhor caminho; Alto Suficiente: o heri como ele aspira ser. a forma ideal do heri. Em muitos jogos o objetivo do jogo transformar o heri na sua forma alto suficiente; Aliados: so personagens colocados no jogo para ajudar o heri. Eles podem ajudar o heri tanto a desvendar mistrios, como a completar tarefas;

32

Guardies: sua funo evitar que o heri progrida; Malandros: so personagens neutros, cuja maior felicidade causar danos ao heri. Eles podem tanto ajudar o heri, quanto o inimigo; Sombra: , provavelmente, o segundo personagem mais importante da estria, depois do heri. o ltimo demnio, o grande adversrio do heri.

3.7 Criando a Experincia do Jogador

Um jogo muito mais do que apenas a soma de suas regras. Ele deve interagir com o jogador de modo a imergi-lo no mundo do jogo. A partir do primeiro momento que o jogador entra no jogo, tudo aquilo que ele v, ouve, e sente deve convenc-lo de que a nica coisa que existe o jogo. E isso que a experincia do usurio: uma combinao das trs reas distintas do design o elemento visual, o elemento auditivo e o elemento interativo. O Elemento Interativo: o modo como o jogador interage com o jogo. mais relacionado com os aspectos funcionais da interface do usurio; O Elemento Visual: todo o impacto da arte e como ela se combina para apresentar o mundo ao jogador; O Elemento Auditivo: apesar da parte do udio no parecer to importante quanto os outros 2 elementos, ela to importante quanto. Vrios jogos ficam inviveis de se jogar sem o som.

33

3.7.1 Criando a Interface Homem-Computador

Desenvolvendo uma boa interface para o usurio no apenas deix-la bonita e com um som legal quando se interage com os botes. O mais importante disponibilizar ao jogador a melhor forma de interao para com o mundo do jogo. Quando se estiver desenvolvendo uma interface, deve-se pensar sempre em tornar a interface rpida e mais eficiente quanto ao acesso aos recursos, como foi feito no jogo Outlive, na Figura 21.

Figura 21 - Outlive

A funcionalidade da interface do usurio a considerao mais importante a ser levada em conta. Afinal, que jogador utilizar seu tempo para jogar um jogo bonito se ele no puder reconhecer qual boto responsvel pelo comeo do jogo? Antes de se implementar uma interface em computador, recomenda-se fazer um esboo no papel e verificar se a interface funciona.

3.7.1.1 Disposio da interface

A disposio da interface varia muito de jogo para jogo, mas as partes mais utilizadas para dispor a interface de um jogo so: a lateral esquerda do cenrio, uma tira bem

34

fina na parte superior e a parte inferior da tela, como pode ser visto na Figura 22. (ROLLINGS; ADAMS, 2003 pg. 169)

Figura 22 reas mais Utilizadas para Interfaceamento

3.7.1.2 Elementos para uma interface do usurio simples

A funo primria de uma interface do usurio interagir com o usurio. Funo essa que pode ser dividida em duas tarefas principais: aceitar os comandos do jogador e informar ao jogador seu estado atual, bem como mostrar as opes disponveis no formato grfico mais simples possvel. O que a interface no deve fazer distrair o jogador do jogo, desordenar a tela, confundir o jogador com informaes estranhas ou desnecessrias ou ofuscar informaes vitais. No uso de textos, no aconselhado o uso de TEXTOS GRAFADOS COM TODAS AS LETRAS EM MAISCULAS, nem com todas as letras em minsculo. Aconselha-se utilizar uma mistura, utilizando-se letras maisculas no incio das frases e letras minsculas no restante das palavras. J no caso dos cones, no se deve utilizar cones que tenham uma conotao mais local. O melhor utilizar um cone reconhecido mundialmente para o uso na interface.

35

Recomenda-se utilizar bastantes cones, pois estes facilitam o entendimento do contexto da situao. Simplifique ao mximo as opes disponveis ao jogador. Quando for disponibilizar opes ao jogador na forma de cones, crie botes com esses cones e disponhaos na tela, de modo a criar um menu com largura igual a profundidade, onde a largura a quantidade de opes de nvel superior disponvel e a profundidade corresponde a quantidade de opes abaixo do menu de maior nvel. A seguir algumas dicas de como desenvolver uma boa interface: Seja Consistente: o jogador apenas executar seqncias

consistentes de aes em situaes similares. Portanto a terminologia utilizada nos menus e nas telas do jogo devem ser idnticas. O uso de cores, fontes e a disposio na tela devem ser consistentes e logicamente conectados nas diversas sees do jogo; Permita aos jogadores experientes o uso de atalhos: disponibilize teclas especiais, comandos secretos e outras funcionalidades que permitam que se jogue mais rapidamente; D bons feedbacks: Para todas as aes do usurio, o jogo deve responder de alguma maneira imediatamente; Crie a interface para oferecer tarefas definidas: as seqncias das aes que o jogador pode executar devem estar organizadas em grupos conceituais de pequenas sub-tarefas, cada uma bem-definida, com comeo, meio e fim. Ao fim de cada tarefa, deve-se informar ao jogador que a tarefa foi findada;

36

No permitir que o jogador faa erros bobos e permitir que o jogador recupere-se de erros pequenos: o jogador no deve ser capaz de fazer erros srios simplesmente por ter clicado ou digitado algo errado. Todas as entradas do jogador devem ser verificadas. Se o jogador criar um erro de entrada que no possa ser tratado pelo jogo, deve-se permitir ao jogador a recuperao ao estado anterior; Permitir fcil reverso das aes: caso o jogador faa um erro bobo, permitir ao jogador rever a ao, a menos que isso afete o balano do jogo; Lembrar que o jogador quem est no controle: o jogador quer sentir que comanda o jogo, pelo menos com relao ao heri. No crie eventos randmicos e incontrolveis, ou seqncias tediosas ou difceis de serem realizadas. E sempre que possvel, deve-se utilizar representaes visuais ao invs de nmeros ou frases, quando for dar o feedback do estado atual do jogo para o jogador. recomendada a utilizao de sons que correspondam a aes ou eventos que ocorram no mundo do jogo por exemplo, o tiro de uma arma quando se dispara, o grito de um monstro quando ele vai atacar o heri etc. Com a melhoria das capacidades de reproduo de sons pelo computador, o som tambm se tornou um grande responsvel pelo feedback ao jogador. E no pode ser esquecido que o uso de msicas de fundo aumenta a imerso do jogador. So elas que do o tom de tenso na disputa da ltima volta da corrida, ou na luta contra o chefe final do jogo.

37

3.8 Balanceamento do Jogo

Um jogo balanceado aquele onde o principal fator determinante do sucesso ou no do jogador o nvel de habilidade do jogador no jogo, ou seja, um jogador bom deve ter maior sucesso que um iniciante, a menos que acontea algo de anormal. Tradicionalmente, o balanceamento do jogo tem sido mais um processo de tentativa e erro. Joga-se e depois conserta. H diversas maneiras de implementar o balanceamento do jogo. Em particular, existem duas classes de balanceamento que sero discutidas: balanceamento esttico e dinmico.

3.8.1 Balanceamento esttico

Balanceamento esttico se refere ao balanceamento das regras do jogo e como elas interagiro entre si. Um exemplo concreto seria os diferentes valores das foras das unidades num jogo de estratgia. No balanceamento esttico, dever-se evitar o surgimento de estratgias dominantes, que so estratgias que so as melhores de serem escolhidas sob quaisquer circunstncias. Estratgias dominantes fortes so aquelas que garantem a vitria, enquanto as estratgias dominantes fracas garantem que o jogador no perca. Uma estratgia dominante forte nunca desejada, mas deve-se tomar cuidado ao retirar algumas estratgias dominantes fracas s vezes elas podem ter seu valor. Dando aos jogadores, incluindo ao computador, as mesmas condies de incio e habilidades disponveis, uma das maneiras mais simples de se balancear um jogo.

38

Essa ttica se chama simetria. O Desafio Sebrae utiliza da simetria ao final de cada etapa para balancear o jogo. Outra coisa que pode ser feita , ao mesmo tempo que se d um maior poder de fogo ao usurio, aplicar o mesmo raciocnio ao seu adversrio. Por exemplo, se o jogador conseguir uma arma que tire mais dano dos monstros, um pouco depois se deve utilizar monstros mais fortes para atacar o jogador.

3.8.2 Balanceamento dinmico

O game designer deve tambm se preocupar em manter o balanceamento no decorrer do desenvolvimento do jogo. O balanceamento dinmico considera como o balanceamento muda no decorrer do tempo e com a interao do jogador. Um jogo deve, inicialmente, estar balanceado estaticamente. Depois, o balanceamento dinmico deve ser mantido. O sucesso ou a falha do game designer no gerenciamento do balanceamento do jogo define como ser o jogo. H vrios modos de o jogador interagir com o balanceamento dinmico. Os 3 (trs) modelos seguintes de interao esto disponveis: Restaurar o Balano: a tarefa do jogador restaurar o balano do jogo para um ponto de equilbrio. Um exemplo o quebra-cabea, onde as vrias peas comeam desorganizadas e a condio de vitria o jogador trazer o jogo de volta ao seu estado balanceado, ou seja, montar o quebra-cabea; Mantendo o Balano: o objetivo do jogo manter o balanceamento do jogo, cujo oponente tenta desbalancear o jogo. Neste caso, no

39

existe uma condio de vitria. Uma hora o jogador ir perder. Esse o caso do Tetris; Destruindo o Balano: o oposto do primeiro modelo. Aqui o jogador deve destruir o balano. Um jogo que exemplifica bastante esse modelo o jogo Outlive, da Continuum.

3.8.3 Criando sistemas balanceados

As seguintes regras podem ajudar no desenvolvimento de jogos balanceados: Prover um Desafio Consistente: a dificuldade do jogo deve escalar de acordo com o progresso do jogador. O fim deve ter sempre uma dificuldade maior que o comeo e o meio do jogo; Prover uma Percepo de uma Experincia Justa: o jogador no deve sentir que est competindo com um jogador (no caso o computador) desleal, que trapaceia. Ele deve achar que as condies de luta devem ser iguais; Evitar a Estagnao: a estagnao acontece quando um jogador est num determinado ponto do jogo e no sabe o que fazer. Isso acontece bastante em jogos no estilo Doom; Evitar as Trivialidades: o jogador no deseja que ele tenha que tomar decises triviais quando ele se encontra em nveis mais altos. Ele deseja ter que tomar decises que estimulem o seu crebro; Fixar o Nvel de Dificuldade: tradicionalmente no so todos os jogos que disponibilizam vrios nveis de dificuldade, mas essa

40

disposio que atrair um maior contingente de pessoas a jogarem o jogo, j que ele atender aos diversos nveis de habilidade dos jogadores.

3.9 Bibliografia Referente ao Captulo 3

(RAMOS, 2004) RAMOS, Alexandre Carlos Brando. Notas de aula da matria CCO-27. 2004. Itajub. Disponvel em www.ici.unifei.edu.br/ramos

(ROLLINGS; ADAMS, 2003) ROLLINGS, Andrew; ADAMS, Ernest. Andrew Rollings and Ernest Adams on Game Design. 1 edio. Nova Iorque: New Riders, Maio de 2003. 622 pginas.

41

CAPTULO 4 INTELIGNCIA ARTIFICIAL

Esta parte dedicada ao tpico de Inteligncia Artificial em jogos, uma rea do game design que est sendo levada cada vez mais a srio pelos desenvolvedores e produtores de jogos. Houve um grande crescimento de interesses nos ltimos anos tanto por parte dos desenvolvedores de jogos, quanto dos jogadores, a fim de usar melhores tcnicas de IA nos jogos. Por isso, neste captulo ser explicado um pouco sobre essas tcnicas de IA.

4.1 O que ?

Inteligncia Artificial um ramo da cincia que se destina a ajudar mquinas a achar solues para problemas complexos de uma maneira mais humana possvel. Isto geralmente implica no emprstimo de caractersticas da inteligncia humana e as aplicando na forma de algoritmos em um computador de uma maneira amigvel. Uma aproximao mais ou menos flexvel ou eficiente pode ser conseguida dependendo dos requisitos estabelecidos, que influenciaro do quo artificial dever parecer o comportamento da inteligncia. (IA DEPOT, 2004)

4.2 Tcnicas Mais Comuns de IA utilizadas em Jogos

Em jogos, utilizam-se vrias tcnicas de IA. Dentre as mais utilizadas, podemos citar:

42

Mquinas de Estado Finito: geralmente se referem a um modelo simples da IA usado nos jogos. MEF consiste de n estados, cada um com suas prprias caractersticas. A IA ento decide para qual estado ir para governar o comportamento a ser adotado. Um exemplo de MEF so os engines da IA de jogos do estilo First Person Shooter (FPS) se um jogador estiver visvel, ir para o estado de ataque, se o jogador no estiver no campo de viso, trocar para o estado de procura do jogador ou para o estado de ficar parado. MEFs so muito fceis de serem implementadas, e provem Inteligncia Artificial funcionveis para jogos simples (GENERATION5, 2004). Na Figura 23, temos um exemplo de um jogo de FPS, o Doom 3, que utiliza essa tcnica de IA;

Figura 23 Doom 3

Algoritmos de Path-Finding: so algoritmos utilizados no clculo do menor caminho entre dois pontos, fazendo os clculos para desviar de possveis obstculos, inimigos etc. encontrados no decorrer do caminho. Existem vrios algoritmos representantes dessa categoria, mas os algoritmos mais famosos so o BFS (Best First

43

Search) e os algoritmos que manipulam grafos, tais como o de Dijkstra e o A* (A Estrela); Scripting: uma tcnica bastante utilizada em jogos. Nela podem ser feitas programaes das mais variadas reas referentes ao jogo, exceo da renderizao 3D. bastante utilizada na rea de IA. Scripting nada mais do que criar um pseudo-compilador, onde os comandos escritos em um arquivo texto so interpretados em tempo de execuo, diminuindo o tempo de desenvolvimento causado pela compilao de um jogo. As linguagens script Lua e Python so as mais utilizadas pelas empresas comerciais; Algoritmos Genticos: so algoritmos que pegam emprestado a caracterstica da gentica dos seres vivos, baseando-se nos genes, que carregam caractersticas dos seres vivos, para que estes, quando praticam a reproduo, desenvolvam seres mais aptos a enfrentar o meio ambiente. O mesmo acontece com esses algoritmos, onde as caractersticas dos seres controlados pela IA do jogo possam ser combinados, de modo a formar seres mais eficazes de oferecerem maiores desafios aos jogadores; A-Life: a parte referente aos algoritmos que simulam o desenvolvimento da vida dos seres vivos, tanto dos animais, quanto dos homens da maneira mais natural possvel. Um bom exemplo na rea de jogos o jogo chamado The Sims, que pode ser visto na Figura 24, onde so feitas simulaes da vida de seres vivos que, neste caso, so seres humanos;

44

Figura 24 The Sims

Redes Neurais: elas se estruturam baseadas no modelo neural do crebro do ser humano. So utilizadas para o reconhecimento de padres e podem sempre estar adquirindo novos conhecimentos. Em jogos ainda so pouco utilizadas.

4.3 IA do Demo

No demo desenvolvido juntamente com essa monografia, a IA foi criada programando-se a utilizao das tcnicas explicadas abaixo.

4.3.1 Mquinas de Estados

No caso da IA do pssaro mutante, utilizou-se a mquina de estados finitos por sua fcil implementao e por ela se encaixar devidamente no resultado pretendido para o demo desenvolvido juntamente com essa monografia.

45

Figura 25 Mquina de Estados da IA do Pssaro Mutante

Como pode ser visto na Figura 25, o pssaro mutante pode se encontrar em 4 estados: PARADO: o pssaro mutante fica voando, mas ele no muda de lugar. Ele se mantm neste estado mesmo que leve um tiro do jogador e o jogador se encontre fora de seu campo de viso; BUSCA: o pssaro mutante busca o jogador dentro de seu campo de viso, a fim de atac-lo; ATAQUE: o pssaro mutante ataca o jogador, indo na direo que o jogador se encontra; FUGA: o pssaro mutante foge do jogador, indo na direo exatamente contrria a posio que se encontra o jogador.

46

No jogo, o pssaro mutante verificar a quantidade de pontos de vida que ele possui. Caso ele tenha menos pontos de vida que o limiar definido pelo nvel que o usurio se encontra, o pssaro mutante fugir do usurio at que ele encontre no limite do cenrio. Chegando a esse limite, so adicionados 100 pontos de vida ao pssaro mutante que, a partir desse momento est novamente apto a atacar novamente o jogador. No caso do pssaro mutante ter mais pontos que o limiar, ele verificar se o jogador se encontra dentro de seu campo de viso. Se ele se encontrar, o pssaro mutante o atacar. Caso contrrio, ele voltar para o estado de parado. Ao final desse ciclo, o pssaro mutante volta ao estado de parado novamente e refaz todo esse caminho pela mquina de estados. Vale ressaltar que essa mquina de estados somente ser vlida caso o pssaro mutante se encontre vivo, ou seja, seus pontos de vida sejam maiores que 0 (zero).

4.3.2 Algoritmo gentico

A IA do pssaro mutante fundamentada em 3 (trs) atributos membros de sua classe: Limiar: o limiar que definir se o pssaro mutante atacar o jogador. Caso o nmero de pontos de vida do pssaro mutante for menor que esse limiar, ele fugir do jogador, caso contrrio, ele pode tanto ficar voando no mesmo lugar ou atacar o jogador; Velocidade: define a velocidade do pssaro durante o vo. Quanto maior o nvel do jogo, maior ser a velocidade do pssaro. Tomouse o cuidado para que o pssaro mutante nunca tenha uma

47

velocidade maior que a do jogador, que de 40 (quarenta), nos diversos nveis do jogo; Distncia: define o campo de viso que o pssaro mutante ter para atacar o jogador. Os valores deste atributo foram verificados para que a distncia nunca ultrapasse o tamanho do cenrio. Todos esses atributos para os diversos nveis do jogo so definidos no cdigo-fonte do jogo. J para a utilizao de algoritmos genticos, colocou-se um atributo em cada pssaro com o tempo de vida de cada um, sendo possvel assim utilizar esse dado para que seja feita a escolha dos pssaros que mais viveram e criar novos pssaros dinamicamente com base nos dados dos atributos desses pssaros, que foram os mais preparados. Lgico que, no decorrer da criao desses novos pssaros mutantes, pode-se criar mutaes desses dados, acrescentando-se valores aleatrios para os atributos dos pssaros explicados acima.

4.3.3 Scripting

Ao contrrio do que muitos acreditam, para se fazer scripting no necessariamente obrigatrio o uso de uma linguagem script, como Lua ou Python. Um arquivo INI do Windows, por exemplo, um arquivo script. Na programao de jogos, os programadores podem criar suas prprias linguagens de scripting, assim como utilizar um arquivo com uma estrutura parecida com o do arquivo INI do Windows para a implementao de scripting. Por isso, no cdigo-fonte do jogo, retira-se os parmetros dos atributos dos pssaros mutantes de cada nvel e transfere-se para um arquivo texto, onde os dados podero ser alterados livremente, de maneira que no seria mais necessria a recompilao do cdigo-

48

fonte toda vez que os valores dos atributos de um determinado nvel fossem alterados. Dessa maneira, muito tempo ser economizado na fase de testes do demo, quando seriam escolhidos os melhores valores para cada atributo nos nveis utilizados pelo demo.

4.3.4 Algoritmo de fuga e ataque do pssaro mutante

Para que o pssaro mutante pudesse interagir com o jogador, foram criados mtodos que criavam o vetor direo que o pssaro deveria seguir para atacar e fugir do jogador. O pseudo-cdigo dos mtodos referentes ao ataque e fuga dos pssaros mutantes com relao ao jogador so mostrados a seguir: Mtodo perseguir ( posicaoDoJogador, altitudeDoTerreno ) { Se o pssaro est vivo Faa destinoDoPassaro = posicaoDoJogador posicaoDoPassaro; Normalizar(destinoDoPassaro); posicaoDoPassaro += destinoDoPassaro * velocidadeDoPassaro; fim do Se } Mtodo fugir ( posicaoDoJogador, altitudeDoTerreno ) { Se o pssaro est vivo Faa destinoDoPassaro = posicaoDoJogador posicaoDoPassaro; Normalizar(destinoDoPassaro); posicaoDoPassaro -= destinoDoPassaro * velocidadeDoPassaro; fim do Se }

49

4.4 Bibliografia Referente ao Captulo 4

(AMIT, 2004) AMITS A* PAGES, capturado no dia 01/11/2004, On-line, Disponvel na Internet http://theory.stanford.edu/~amitp/

(GENERATION5, 2004) GENERATION5, capturado no dia 01/11/2004, On-line, Disponvel na Internet http://www.generation5.org

(IA DEPOT, 2004) IA DEPOT, capturado no dia 01/11/2004, On-line, Disponvel na Internet http://ai-depot.com

(TOLEDO, 2003) TOLEDO, Siles Paulino de. Apostila de Introduo Inteligncia Artificial da Matria de IAA-01. 2003. Itajub. Disponvel em www.siles.unifei.edu.br

50

CAPTULO 5 PROGRAMAO

5.1 APIs para a Programao

Para se programar um jogo, pode-se utilizar praticamente todas as linguagens de programao, mas a linguagem mais utilizada no desenvolvimento de jogos comerciais a linguagem C/C++. Juntamente com o C/C++, utiliza-se uma API grfica. As mais utilizadas no momento so o OpenGL e o Direct3D. O OpenGL uma API gratuita e bastante leve, disponibilizada pela Silicon Graphics. Ela mais utilizada no ensinamento de conceitos de Computao Grfica, por ser mais simples e de implementao mais fcil. J o Direct3D faz parte do pacote DirectX, sendo tambm uma API gratuita e desenvolvida pela Microsoft. a API mais utilizada para o desenvolvimento de jogos por ter atualizaes mais constantes, bem como fazer parte do pacote DirectX, que oferece suporte redes, exibio de vdeos, execuo de udio, dentre outras coisas. Mesclava-se tambm o uso do OpenGL com as demais bibliotecas do DirectX, para o desenvolvimento de jogos, mas atualmente essa uma opo muito rara. Atualmente utilizada o Direct3D juntamente com as demais bibliotecas do DirectX para o desenvolvimento de jogos. Entre os jogos feitos utilizando-se OpenGL com as bibliotecas do DirectX, podemos citar Worms 3D e Final Fantasy 7. J utilizando-se DirectX, temos The Need For Speed Underground, Max Payne 1 e 2, Outlive etc.

51

J no caso de projetos de pesquisa sobre jogos 3D no ambiente acadmico, utiliza-se bastante Java com a biblioteca JOGL, que nada mais do que o uso do OpenGL para a linguagem Java. A biblioteca Java3D tambm bastante utilizada para esse fim. Apesar dessa escolha acadmica, excetuando-se os jogos para celular, o aconselhvel a utilizao da linguagem C/C++ para jogos comerciais, devido a sua maior velocidade de execuo e pelo fato das bibliotecas da linguagem Java ainda no explorarem todos os recursos das placas 3D atuais. No caso de celulares, para a programao de jogos, utiliza-se mais a linguagem Java, por conta de sua portabilidade, facilitando o desenvolvimento de um mesmo jogo para os diversos modelos de celulares. Neste caso utilizado o J2ME, Java 2 Micro Edition, que uma API Java voltada para micro-aplicativos que rodam em microprocessadores. Atualmente utiliza-se o J2ME MIDP 2.0 para a programao de jogos para celular. Alguns jogos para celular so feitos utilizando-se C/C++, mas esses jogos so aqueles jogos mais trabalhados, que demoram mais para serem feitos e so feitos exclusivamente para um modelo de celular, como o caso dos jogos do N-Gage, da Nokia. Para o desenvolvimento do jogo que acompanha essa monografia foi feita a escolha da API DirectX, bem como o uso da linguagem de programao C/C++, por sua maior atualizao com relao aos recursos disponibilizados e pela maior velocidade de execuo do arquivo executvel gerado.

52

5.2 Estrutura dos Jogos

A estrutura dos jogos extremamente complexa. Na verdade, muitas vezes os jogos podem ser muito mais complexos que grandes programas comerciais. Para se programar um jogo, deve-se aprender um novo modo de programao voltada para aplicaes de tempo real e simulaes, em detrimento da programao seqencial, dirigida a eventos, mais comuns em programas comerciais. O algoritmo de um jogo , basicamente, um loop contnuo, em que so feitos os clculos referentes a IA, a renderizao das imagens na tela, a uma taxa de 30 ou mais quadros por segundo.

Figura 26 Estrutura do Cdigo de um Jogo

53

Conforme pode ser visto na Figura 26, um jogo possui as seguintes partes: (a) Inicializao

Nesta parte, so efetuadas as operaes padro de qualquer programa, como alocao de memria, leitura de dados do disco, inicializao das variveis etc. (b) Loop do jogo

Aqui o loop contnuo onde o motor do jogo executado. aqui que as aes do usurio so processadas at que o mesmo saia do jogo. (c) Entrada de dados do jogador

J nesta fase, as entradas do jogador so processadas ou guardadas em algum buffer para depois serem utilizadas pela IA ou pela lgica do jogo. (d) Lgica do Jogo

nesta seo que se encontra a maior parte do cdigo do jogo. Pode ser encontrado aqui o processamento da lgica do jogo, da inteligncia artificial e da simulao da fsica, sendo os resultados utilizados para a renderizao do prximo quadro que ser exibido na tela. (e) Renderizao do Prximo Quadro

Nesta parte feita a coleta das entradas do jogador e dos resultados provenientes da execuo da IA e da lgica do jogo para ser criado o prximo quadro a ser exibido. Geralmente, essa imagem desenhada em um buffer que no o mesmo da tela. Depois, ela copiada rapidamente para a rea de memria que representa o que est sendo mostrado na tela. (f) Sincronia da Exibio dos Quadros

Dependendo do computador e do quadro que dever ser renderizado na tela, o tempo necessrio para o processamento dos dados para a realizao do mesmo pode variar muito. Por isso, o nmero de quadros do jogo ser muito varivel. Neste caso, existem dois

54

caminhos a serem seguidos: criar algum mtodo de espera ou fazer com que as entradas do usurio sejam aplicadas de maneira proporcional ao tempo necessrio para a renderizao do quadro. (g) Limpeza

Aqui o fim do jogo. Isso significa que o usurio quer sair e voltar para o sistema operacional. Mas, antes disso, necessria a desalocao dos dados e do fechamento dos arquivos que estavam sendo utilizados.

5.2.1 Cdigo-fonte de exemplo

#define GAME_INIT 0 #define GAME_MENU 1 #define GAME_COMECANDO 2 #define GAME_EXECUTANDO 3 #define GAME_SAINDO 4 // variveis globais int estado_jogo = GAME_INIT; //controla o estado do jogo int erro = 0; //usada para reconhecimento de erros // funo main void main() { while (estado_jogo!=GAME_SAINDO) { //faz a verificao do estado em que o loop do jogo se encontra switch(estado_jogo) { case GAME_INIT: // o jogo est sendo inicializado // feita a alocao de memria e dos recursos Inicializacao(); // move para o estado de menu estado_jogo = GAME_MENU; break; case GAME_MENU: // o jogo est no modo de menu

55

// recebe a escolha do usurio, depois da interao com o menu estado_jogo = Menu(); break; case GAME_COMECANDO: // o jogo vai ser executado // um estado opcional, utilizado para preparar o jogo // para ser rodado PreparacaoParaExecutar(); // muda para o estado de execuo estado_jogo = GAME_EXECUTANDO; break; case GAME_EXECUTANDO: // o jogo est rodando // esta seo contm o loop da lgica do jogo LimpaTela(); //se o usurio decidir sair do jogo, aqui que a varivel //estado_jogo alterada RecebeEntradaUsuario(); //executa a lgica do jogo ExecutaLogicaIA(); ExecutaLogicaFisica(); //renderiza o prximo frame RenderizaProximoFrame(); //espera o tempo necessrio para a execuo de um determinado //nmero de frames Espera(); break; case GAME_SAINDO: // o usurio est saindo do jogo //faz a desalocao da memria alocada //e dos recursos utilizados DesalocaMemoria(); LiberaRecursos(); break; default: break; } // fim do switch } // fim do while

56

// retorna o erro return(erro); } // fim do main

5.3 Tcnicas Utilizadas no Demo

No decorrer do desenvolvimento do demo, foram utilizadas vrias tcnicas utilizadas na produo de jogos comerciais. Dentre essas, neste tpico sero explicadas duas tcnicas utilizadas. So elas: mapas de altitude e billboard.

5.3.1 Mapas de altitude

Para se criar terrenos 3D, so criadas malhas de pontos, que formam tringulos, onde estes formaro os terrenos 3D. Para criar estes terrenos, utiliza-se mapas de altitude, que descrevem as colinas e os vales do terreno. Um mapa de altitude um vetor onde cada elemento especifica a altitude de um vrtice do terreno. Para se armazenar esses mapas de altitude em disco, geralmente, so criados arquivos de imagens em tons de cinza, onde os locais cujos valores so mais escuros representam as altitudes mais baixas, enquanto que os valores mais claros representam as pores mais altas do terreno, como pode ser visto na Figura 27.

57

Figura 27 Mapa de Altitude

No caso do demo que foi desenvolvido com o jogo, utilizou-se o formato RAW, devido a sua estrutura, onde os valores dos pixels so gravados um aps o outro e sem cabealho. Depois esses dados so lidos e gravados num vetor, para utilizao posterior.

5.3.1.1 Gerando a geometria do terreno

Para se gerar a geometria do terreno, aps j ter sido feita a leitura do mapa de altitude, alguns conceitos devem ser adquiridos. A Figura 28 nos ajuda na compreenso deles:

58

Figura 28 Conceitos para a Criao de Terrenos 3D

A largura do terreno o tamanho dele com relao ao eixo X do espao, enquanto que a profundidade o tamanho do mesmo com relao ao eixo Z. J o espao entre as clulas a distncia espacial entre cada ponto que forma o terreno. Como pode ser visto tambm, a posio inicial do espao cartesiano se encontra no centro do terreno. Por isso, o limite superior esquerdo se encontra na posio ( -largura/2, profundidade/2 ) e o limite inferior direito est em ( largura/2, -profundidade/2 ). O nmero de clulas por linha igual ao nmero de vrtices por linha menos 1 (um). O mesmo vale para o nmero de clulas por coluna. J o nmero de vrtices do terreno igual ao nmero de vrtices por linha * nmero de vrtices por coluna. Com base nesses conceitos, cria-se a geometria do terreno. O algoritmo abaixo exemplifica isso: Estrutura VerticeTerreno { X, Y, Z; };

59

Mtodo GeraGeometriaTerreno() { Criar vetor Terreno com tamanho igual ao nmero de vrtices do terreno usando a estrutura VerticeTerreno; //Calcular os limites superior esquerdo e inferior direito comecoX = - largura / 2; comecoZ = profundidade / 2; fimX = largura / 2; fimZ = profundidade / 2; i = 0; Para ( z = comecoZ; z >= fimZ; z-= espacoEntreCelulas ) Faa j = 0; Para ( x = comecoX; x <= fimX; x+= espacoEntreCelulas ) Faa ndice = i * numVerticesPorLinha + j; VerticeTerreno VerticeTemp; VerticeTemp.X = x; VerticeTemp.Y = mapaDeAltitude[ ndice ]; VerticeTemp.Z = z; terreno[ ndice ] = VerticeTemp; j = j + 1; Fim Para i = i + 1; Fim Para }

5.3.1.2 Acessando o vetor terreno

Depois, para acessar o mapa do terreno, basta utilizar o algoritmo abaixo: Mtodo AcessaTerreno( linha, coluna ): retorna Altitude { Retorna terreno[ linha * numeroVerticesPorLinha + coluna ]; }

60

E de posse da estrutura VerticeTerreno retornada pelo mtodo, pode-se verificar o altitude daquela posio no terreno, bem como renderizar o terreno 3D.

5.3.2 Billboard

Quando se cria cenrios 3D, um jogo pode ganhar um pouco em performance, renderizando objetos 2D no lugar de objetos 3D. Esta a idia bsica por trs da tcnica chamada billboard. Aplicaes podem criar e renderizar este tipo de billboard definindo-se um retngulo slido e aplicando uma textura sobre ele. A idia base criar texturas 2D que tenham a aparncia de serem 3D e rotacion-las de acordo com o campo de viso do jogador. No importa se a imagem dos objetos no retangular. Alm disso, pores do billboard podem ser transparentes. A tcnica de billboard bastante utilizada em jogos para renderizar imagens de rvores, arbustos e nuvens. O billboard trabalha melhor com objetos simtricos, especialmente objetos que so simtricos ao longo do seu eixo vertical. Alm do mais, bom que a altura do jogador no seja muito grande, j que, se o jogador vir o billboard de cima, lhe parecer que o objeto 2D ao invs de 3D.

5.3.2.1 Criao das texturas

Durante o desenvolvimento das texturas a serem utilizadas no billboard, deve-se ter em mente o conceito de canal alfa. Canal alfa um valor entre 0 (zero) a 1 (um) inclusive, com preciso de nmero flutuante, associado ao valor da colorao de um pixel,

61

que define o nvel de transparncia daquele pixel. No caso do canal alfa ser 1 (um), a cor do pixel ser totalmente opaca, enquanto que, no caso dele ser 0 (zero), a cor ser totalmente transparente. Valores intermedirios resultaro em cores no totalmente opacas, nem totalmente transparentes. De posse deste conceito, cria-se uma textura, como pode ser visto na Figura 29.

Figura 29 Textura de uma rvore

Findada a textura, cria-se uma nova textura representando o canal alfa da textura anterior, como pode ser verificado na Figura 30, onde a cor preta representa o valor 0 (zero), a cor branca o valor 1 (um) e as cores intermedirias valores entre 0 (zero) e 1 (um).

62

Figura 30 Canal Alfa de uma Textura

E, com apoio da ferramenta DirectX Texture Tool, que acompanha o DirectX SDK, mescla-se as duas figuras, formando um arquivo com uma extenso DDS, que conter a textura e, aliado a cada pixel da textura, o seu respectivo canal alfa. Deste modo, quando a textura for utilizada, nos pontos onde o seu canal alfa diferir de 1 (um), ocorrer a transparncia, aumentando o realismo do cenrio.

5.3.2.2 Algoritmo do billboard

Inicialmente, habilita-se os estados de renderizao a serem utilizados. Dentre esses estados, os necessrios para o uso desta tcnica so o blending e o teste alpha, de modo que, com esses estados habilitados, o canal alpha poder ser utilizado para recriar a transparncia, dando maior veracidade ao cenrio. Depois, o vetor que contm as posies das rvores deve ser ordenado, de modo a colocar as rvores mais prximas do campo de viso do jogador nas posies finais do vetor. Isso deve ser feito porque, quando as texturas das rvores forem desenhadas, para a

63

renderizao da transparncia das rvores, a API do Direct3D verifica o que est desenhado atrs daquela rvore e o redesenha, caso o teste alpha d negativo. Ento, renderiza-se as rvores e desabilita-se os estados de renderizao utilizados. Portanto, para a implementao do billboard, deve-se seguir o algoritmo abaixo: Mtodo RenderizaArvores( direcaoVisaoJogador, posicaoJogador ) { SetaEstadosRenderizacao(); Se o VetorDasArvores foi criado Faa OrdenaVetor( VetorDasArvores, posicaoDoJogador ); Se a direcaoVisaoJogador.X > 0 Faa RotacioneY( -arcotangente( direcaoVisaoJogador.Z/ direcaoVisaoJogador.X) + PI/2 ); Seno RotacioneY( -arcotangente( direcaoVisaoJogador.Z/ direcaoVisaoJogador.X) - PI/2 ); Fim Se RenderizaAsArvores( VetorDasArvores ); Fim Se DesabilitaEstadosRenderizacao(); }

No se esquecendo que as funes destacadas fazem parte da API utilizada, devendo estas rotacionar o campo de viso do jogador com relao ao eixo Y.

64

5.4 Bibliografia Referente ao Captulo 5

(CARNIEL; TEIXEIRA, 2003) CARNIEL, Juliano; TEIXEIRA, Clvis. Apostila de J2ME, verso 1.0. Capturado no dia 01/11/2004. On-line. Disponvel em http://portaljava.com/home/tutoriais/Tutorial_J2ME.pdf.

(LAMOTHE, 1999) LAMOTHE, Andr. Tricks of the Windows Game Programming Guru, Fundamentals of 2D and 3D Game Programming. 1 edio. Indianpolis: SAM, outubro de 1999. 1005 pginas.

(LOURENO, 2004) LOURENO, Dalsio Csar Abreu. Criao de udio para Jogos com DirectX udio. Itajub: Departamento de Matemtica e Computao, 2004. 42 pginas.

(LUNA, 2003) LUNA, Frank D. Introduction to 3D Game Programming With DirectX 9.0. 1 edio. Plano:Wordware Publishing Inc, junho de 2003. 388 pginas.

(MICROSOFT, 2002) MICROSOFT. DirectX Documentation for C++. Arquivo de Ajuda do SDK do DirectX.

(VALE, Jos Luciano Viana do, 2004) VALE, Jos Luciano Viana do. BREW, o caminho para o desenvolvedor. Campinas,

Unicamp, 11 set. 2004. Palestra Ministrada aos Congressistas da GameTech 2004, pela QUALCOMM Servios de Telecomunicaes.

65

CAPTULO 6 CONCLUSES

6.1 Game Design

O processo de game design uma das reas que mais so responsveis pelo sucesso ou no de um determinado jogo. Jogos cujo design no tiveram a devida ateno, geralmente, esto destinados ao fracasso. Os games designers que mais se dedicarem ao estudo das diversas tcnicas de criao de personagens e de estrias tero maiores chances de criar jogos de sucesso. Boas interfaces e bom balanceamento dos jogos tambm so capazes de diferenciar um jogo revolucionrio de um que fracassar. Mesmo que o jogo seja o mesmo, mas se a interface e o balanceamento forem diferentes, aquele que tiver mais pontos nestes dois quesitos est destino a ter um maior sucesso. Nada substitui a experincia de um bom game designer. No toa que, o simples fato de nomes de profissionais como Shigeru Miyamoto, Will Wright, Brian Reynolds, Sid Meier e Dani Berry figurarem no Staff de desenvolvimento de um jogo, suficiente para criar uma expectativa muito grande com relao ao lanamento do mesmo. Na Figura 31 podemos ver alguns deles.

Figura 31 Shigeru Miyamoto, Will Wright e Sid Meier

66

Uma boa sugesto a aqueles que querem ser bons game designer jogar bastante. Mas no s jogar para se divertir, mas sim jogar prestando ateno na funcionalidade da interface, na eficcia da IA etc.

6.2 Inteligncia Artificial

A IA uma das reas mais complicadas no desenvolvimento de jogos. Primeiramente porque existem muitos poucos livros na rea e, depois, porque a teoria encontrada na internet nem sempre muito boa. Por isso, os cdigos-fontes encontrados no so facilmente entendidos. Dificilmente se encontra engines de IA, j que a IA de cada jogo deve reagir das mais diversas maneiras aos acontecimentos. Portanto, na rea de IA, deve-se implementar tudo. Tambm uma rea muito perigosa para o programador de IA, j que, por mais que ele deseje criar a IA mais perfeita do mundo, ele deve levar em conta que o jogador tambm tem o sentimento de poder vencer essa IA. Por isso, se o programador criar um IA muito difcil, ele estar desestimulando os jogadores a continuarem a jogar o jogo, perdendose assim bastantes jogadores, que deixam de comprar o jogo por ele ser muito difcil. E, ao mesmo tempo em que o jogo no deve ser muito difcil, ele tambm no pode ser muito fcil, pelo mesmo motivo, que o desestimulo o jogador. Por isso muito complicado fazer esse balanceamento na IA.

67

6.3 Programao

O uso da Orientao ao Objeto primordial no desenvolvimento de jogos. A orientao ao objeto garante muito a legibilidade do cdigo, assim como a sua reutilizao, o que muito til em um ambiente onde vrios programadores participaro do processo de criao do jogo. Na hora de fazer a modelagem do jogo, desaconselhvel criar uma modelagem completa do jogo antes do incio de sua implementao. Como o jogo um produto que no tem uma sada padro, como o caso dos relatrios dos sistemas de banco de dados, essa modelagem mudar bastante no decorrer da implementao, atrasando bastante o desenvolvimento do produto, devido as constantes alteraes nos documentos da modelagem. Neste caso, o aconselhvel que a modelagem seja feita juntamente com o desenvolvimento do jogo, sempre um passo a frente do desenvolvimento. Os programadores devem sempre modelar ou ter acesso modelagem daquilo que ser criado, antes da sua implementao. Desse modo, a implementao sai mais rpido e o programador no vai ficar com a sensao de que o cdigo-fonte est uma baguna. Ele vai ter toda a estrutura daquilo que ser implementado em sua cabea, agilizando assim o desenvolvimento. Quanto maior a fragmentao do cdigo-fonte para com os dados do jogo melhor, j que isso poupa bastante tempo de compilao. Se possveis, textos explicativos, dados referentes a IA, mapas de cenrios etc. devem ficar em arquivos fora do cdigo-fonte, para facilitar a portabilidade do jogo para outras lnguas, a adio de novos cenrios, melhorias na IA do jogo etc.

68

6.4 Propostas Futuras

Para trabalhos futuros, visando dar continuidade a este projeto final de graduao, sugere-se as melhorias explicadas nos tpicos a seguir, onde cada tpico conta tambm com uma pequena explicao sobre o que significa cada melhoria.

6.4.1 Flocking

Para se aumentar a imerso do jogador, deve-se melhorar a IA do jogo, fazendo com que no seja passada a impresso ao jogador que tudo aquilo que ele est vendo artificial. Para isso, um algoritmo que pode ser implementado na melhoria comportamental dos pssaros seria o Flocking. Flocking um algoritmo que faz a gerncia do comportamento de grupos. Ele muito utilizado para controlar o comportamento de peixes, de aves e at de bots em jogos do tipo FPS. Muitos jogos comerciais o utilizam, dentre os quais podemos citar Unreal (Epic) e Half-Life (Sierra). O algoritmo de Flocking est baseado em 4 (quatro) regras que devem ser seguidas: Separao: deve haver a tentativa de evitar coliso com os outros membros do grupo; Alinhamento: deve-se alinhar com relao direo mdia dos seus companheiros de grupo; Coeso: o movimento deve ocorrer de acordo com o posicionamento dos demais membros do grupo;

69

Desvios: deve-se andar evitando a coliso com obstculos locais e inimigos. O algoritmo de flocking um algoritmo que no necessita do estado anterior para que seja feita a prxima deciso. Por isso ele muito utilizado. Ele no necessita de muita memria. E o algoritmo de flocking tambm estar evitando que aconteam cenas como as da Figura 32, onde vrios pssaros se encontram no mesmo local fsico.

Figura 32 Birds Nightmare

6.4.2 Implementao da rede

Atualmente a opo de jogar no modo multiplayer uma das reas que tem dado um maior vigor aos jogos, j que esta opo permite que haja uma competio entre amigos e tambm se jogue contra pessoas desconhecidas, sempre alimentando o sentimento de competio entre os jogadores, que d a graa ao jogo aps o jogador j ter terminado o modo single player. Por isso, sugere-se a implementao de um modo multiplayer, onde 2 jogadores podem jogar via rede, utilizando-se 2 computadores.

70

Para se programar o suporte rede, conhecimentos em DirectPlay e programao multithreading so mais do que necessrios, alm de conhecimentos sobre o funcionamento de redes.

6.4.3 Algoritmo de quadtree

Fica aqui a sugesto de se implementar um algoritmo de QuadTree ou outro existente para o gerenciamento do cenrio, a fim de prover ao jogador um mundo maior de interao. A idia do algoritmo de QuadTree a de dividir o cenrio em 4 (quatro) retngulos de dimenses o mais semelhantes possveis, de modo a verificar se aqueles retngulos se encontram no campo de viso do jogador. Se eles no se encontrarem, eles no so renderizados. J no caso de algum dos retngulos se encontrar no campo de viso do jogador, ele novamente dividido em outros 4 (quatro) retngulos e o teste feito novamente sobre esses retngulos. E esse teste acontecer recursivamente at que o tamanho do retngulo chegue a um tamanho mnimo definido pelo programador. Ao final desses passos, se o retngulo se encontrar no campo de viso do jogador, ento ele renderizado.

6.5 Bibliografia Referente ao Captulo 6

(DeLoura, Mark. 2001) DeLoura, Mark. GAME PROGRAMMING GEMS 1. 1 edio. Agosto de 2000. CHARLES RIVER MEDIA. 614 pginas.

71

ANEXOS

72

ANEXO A: DOCUMENTAO DA IDIA DO DEMO

Para a realizao do Game Design do demo que acompanha esta monografia, o autor criou um grupo de estudos formado por integrantes do curso de Cincia da Computao da Universidade Federal de Itajub, juntamente com pessoas de outras localizaes que estavam interessadas em aprender mais sobre o desenvolvimento de jogos 3D. Aps a criao do grupo de estudos, comeou-se a discutir como deveria ser o enredo do jogo. Aps muita discusso, chegou-se a seguinte idia:

O jogador interagiria com um mundo campestre, com bosques, rios, montanhas etc.; O objetivo do jogo seria matar pssaros mutantes; Seria exibido apenas a arma carregada pelo jogador; O interfaceamento do jogador para com o jogo seria feito pelo teclado e o mouse, onde o mouse seria responsvel pela alterao do campo visual do jogador, alm de servir para dar o comando de atirar, e o teclado serviria para os demais comandos, como andar pelo cenrio e recarregar a arma; Os pssaros mutantes mortos poderiam ser trocados em postos de troca por dinheiro, que poderia ser utilizado na compra de itens e novas armas.

Tambm existiria um modo multiplayer, onde at quatro jogadores poderiam jogar no mesmo cenrio, baseado nas seguintes regras:

73

Se um jogador atirar no outro jogador, nada aconteceria; O jogador poderia encontrar pedras no caminho, sendo que essas pedras poderiam ser jogadas contra outros jogadores, de modo a atordo-los e ganhar uma pequena vantagem na caa de algum pssaro mutante; No caso de levar uma pedrada, o jogador que foi atingido ouviria algum rindo da cara dele e, ao olhar para a pessoa que atirou a pedra nele, avistaria bales sobre a pessoa com desenhos provocantes. No entanto, apesar do estilo do jogo parecer bem atrativo aos membros do grupo, ainda faltava algo: por que o caador iria matar tantos pssaros mutantes assim? Qual seria a sua motivao para tal chacina? Depois de muito pensar e de um brainstorm entre o autor e seu pai, surgiu a seguinte estria, que daria a motivao necessria ao caador:

"Num futuro prximo, numa poca em que todos os povos vivem em paz, os homens clamam cada vez por mais conhecimento. Eles querem saber mais sobre a vida e o seu funcionamento. E para tal, realizam vrios experimentos em animais. At que, em um desses experimentos, foi injetada em um grupo de pssaros uma substncia de testes. Essa substncia sofreu uma mutao dentro dos pssaros, se transformando num vrus letal para os seres humanos, e que, ao mesmo tempo, deixava os pssaros bem agressivos e poderia ser passado para os seres humanos caso estes fossem atacados". "Infelizmente, esses pssaros so soltos na natureza antes que a existncia desse vrus seja descoberta. Eles se reproduzem e se firmam em certas regies do mundo. Pouco tempo depois, esse vrus comea a se manifestar e faz com que os pssaros fiquem agressivos e ataquem os seres humanos. Num primeiro momento nada acontece a esses

74

humanos e, por isso, nada descoberto. At o momento em que comeam a morrer vrias pessoas, pessoas estas que haviam sido atacadas pelos pssaros. Com base na coincidncia das mortes, feita a caa e o estudo de alguns desses espcimes e descobre-se o vrus, mais tarde chamado de ITABRANOVBUENEV pelos cientistas. Ele tem um efeito letal sobre os seres humanos, mas se manifesta de forma curiosa. Inicialmente, a pessoa se sente mais forte e seus sentidos melhoram, para depois ir perdendo os sentidos gradativamente, at que a pessoa morre. Tambm se descobriu que esse vrus no mata os pssaros e que ele pode ser transmitido entre os seres humanos pela respirao. Com o passar do tempo as aves transformam-se em pssaros mutantes e atacavam os humanos". "Os pases do G-9, entre eles o Brasil, se renem e no querem que essa doena se alastre pelo mundo. Por isso, decidem contratar caadores pelo mundo todo e lhes oferecem uma recompensa pela eliminao dos pssaros. E a, que comea a jornada. O caador deve eliminar todos os focos desses pssaros mutantes pelo mundo. Ao todo so 5 lugares, onde o caador dever matar os pssaros mutantes e salvar a humanidade."

Aps a apresentao dessa estria, o grupo acreditou que havia sido criada a motivao necessria aos jogadores do modo single player. No caso do modo multiplayer, haveria a seguinte adio a estria:

O G-9 pagar uma grande recompensa (podendo ser um item) para o caador que matar mais pssaros, obrigando os caadores a brigarem entre si tambm para conseguirem ser o "HUNTER ONE", ttulo que ser dado pelo G-9 ao caador mais eficiente. E, aps o trmino da elaborao da estria, o grupo tambm achou boa a incluso das seguintes novidades na jogabilidade do jogo:

75

E se o caador no matar o pssaro mutante, depois que pssaro mutante sasse da fase, ele recuperaria 100 (cem) pontos de energia. Caso o caador tivesse matado pssaros mutantes em uma determinada regio e ferido outros, que tivessem se recuperado, outros poderiam aparecer; O nome das 5 regies(fases) seriam: MALACACHETA, EAGLE'S NEST, SOLITUTES NIGHTMARE, BURADIRODIM E

MAKIAEVE; O nome do jogo seria Birds Nightmare. Depois de finalizada essa pequena fase de Game Design, decidiu-se pela implementao de um demo jogvel, onde coube ao autor a codificao em C/C++ e DirectX da lgica, do grfico e da IA do demo, e a outros membros do grupo a modelagem de objetos 3D e a programao e edio do udio. Para o desenvolvimento do demo, foi utilizada a prototipagem.

76

ANEXO B: IMAGENS EM TONS DE CINZA E O FORMATO RAW

Imagens em tons de cinza so imagens cuja colorao varia entre os vrios tons de cinza. Nos arquivos da imagem, as cores so representadas por valores que variam entre 0 e 255, sendo que o valor 0 representa o preto, o valor 255 representa o branco e os valores intermedirios representam valores em tons de cinza proporcionais, como pode ser visto na Figura 33.

Figura 33 Variao dos Tons de Cinza

Os arquivos RAW guardam imagens em tons de cinza, sem a incluso de um cabealho. Isso facilita bastante a sua leitura. E nesse formato, os valores da colorao dos pixels so gravados de maneira binria. Como foi explicado na Seo 5.3.1, na construo do terreno do jogo, o mapa de altitude foi gravado em um arquivo .raw. Esse arquivo se chama altura.raw. Para fazer a alterao desse arquivo, basta utilizar qualquer editor de imagem que oferea suporte ao formato .raw. Juntamente com o arquivo altura.raw, compe tambm o terreno os arquivos acesso.raw e objetos.raw. O arquivo acesso.raw possui os locais do terreno onde o jogador, no modo terrestre, ter acesso e o arquivo objetos.raw possui o objeto que dever existir em determinada posio no terreno.

77

No caso dos objetos, os valores aceitos so: 1, 2, 3 e 4 para rvores utilizando BillBoard, 11 para pedra, 12 para uma lata de coca-cola e 21 para um modelo 3D de uma rvore. Para facilitar na criao dos arquivos de acesso e de objetos, foram criados 3 utilitrios, que se encontram na pasta Programas. A seguir, encontra-se uma breve explicao sobre esses utilitrios: ConverteObjetoRawTxt: converte um arquivo chamado

objeto.raw, que dever estar no diretrio local, para um arquivo texto chamado obj.txt, que conter todos os valores das cores do arquivo objeto.raw, de modo a facilitar na edio desse arquivo de objetos; CriaObjetoRaw: converte o arquivo obj.txt no arquivo objeto.raw, para este ltimo ser utilizado no terreno; CriaAcessoRaw: a partir dos arquivos altura.raw e objeto.raw, cria de maneira automtica o arquivo acesso.raw, no permitindo que o jogador sai do cenrio, nem que ele possa andar por locais imprprios, como sobre a gua, alm de no permitir que se atravesse o modelo 3D da rvore.

78

ANEXO C: HARDWARE E SOFTWARES NECESSRIOS

Antes de definir qual o hardware necessrio para o desenvolvimento de um jogo, necessrio fazer um estudo sobre qual ser o pblico alvo do jogo. Se o pblico alvo for o chamado CASUAL, que jogar de vez em quando e que possui um computador de baixo desempenho, com uma placa 3D da primeira gerao, o desenvolvedor dever dispor de uma mquina de baixo desempenho para testes, alm de um computador de mdio desempenho para o desenvolvimento do jogo. J no caso do pblico alvo for o chamado HARDCORE, aquele que adora ficar jogando e que possui uma mquina de ltimo tipo ou prxima disso, com uma placa 3D da terceira gerao e uma placa de som com 5 ou 6 canais de sada, o desenvolvedor dever ter computadores de alto e mdio desempenho para o desenvolvimento, alm de computadores de baixo desempenho, com placa 3D da 1 e 2 gerao, para se processar os testes tanto nestes computadores de baixo desempenho, como nos de mdio e alto desempenho. Isto se faz necessrio para conseguir atingir a maior quantidade de compradores para o jogo, j que permite que sejam efetuados testes para a disponibilizao de recursos extras para aqueles que tiverem melhorem computadores e, ao mesmo tempo, garante que os jogadores que tiverem um hardware menos poderoso possam jogar tambm, mas com menos recursos. E no caso do hardware dos modeladores e criadores de texturas, recomendase um computador de mdio/alto desempenho em todos os casos, j que o processo de se criar modelos 3D requer grande poder de processamento. Segue abaixo as configuraes recomendadas para cada pblico alvo:

79

Pblico Alvo: CASUAL;

Micro Hipottico do jogador: Pentium 200MHz, 32 MB de RAM, HD 2GB, Placa de Vdeo 3D da primeira gerao off-board (GeForce, Voodoo etc.), placa de som com sada para 2 canais, placa de rede 10/100 Mbits/s, leitor de CD-ROM, joystick com 4 botes, teclado e mouse;

Micro de Desenvolvimento: Pentium III 800 MHz ou Athlon 800Mhz, 128 MB de RAM, HD 20GB, Placa de Vdeo 3D da segunda gerao off-board (GeForce 3, ATI Radeon 8500 etc.), placa de som com sada para 2 canais, placa de rede 10/100 Mbits/s, gravador de CDROM, joystick com 4 botes, teclado e mouse;

Micros para Testes: tanto o micro hipottico do jogador, quanto o micro de desenvolvimento;

Micro para Modelagem 3D: Pentium 4 2.600 MHz ou Athlon XP 2.600MHz, 512 MB de RAM (recomendado 768 MB), HD 80GB, Placa de Vdeo 3D da terceira gerao off-board (GeForce 4, ATI Radeon 9500 etc.), gravador de CD-ROM, teclado e mouse.

Pblico Alvo: HARDCORE;

Micro Hipottico do jogador: Pentium 4 1.800 MHz ou Athlon XP 1.800MHz, 256 MB de RAM, HD 20GB, Placa de Vdeo 3D da terceira gerao off-board (GeForce 4, ATI Radeon

80

9500 etc.), placa de som com sada para 6 canais, placa de rede 10/100 Mbits/s, gravador de CD-ROM, joystick com 8 botes, teclado e mouse;

Micro de Desenvolvimento: Pentium 4 2.800 MHz ou Athlon XP 2.800MHz, 512 MB de RAM, HD 80GB, Placa de Vdeo 3D da terceira gerao off-board (GeForce 4, ATI Radeon 9500 etc.), placa de som com sada para 6 canais, placa de rede 10/100 Mbits/s, gravador de CD-ROM, joystick com 8 botes, teclado e mouse;

Micros para Testes: tanto o micro hipottico do jogador, quanto o micro de desenvolvimento, alm de micros inferiores, com clock de processamento em torno de 600 MHz ou equivalente, 64 MB de RAM, HD 10GB, Placa de Vdeo da segunda gerao offboard (GeForce 3, ATI Radeon 8500 etc.), placa de som com sada para 2 canais e demais perifricos;

Micro para Modelagem 3D: Pentium 4 2.600 MHz ou Athlon XP 2.600MHz, 512 MB de RAM (recomendado 768 MB), HD 80GB, Placa de Vdeo 3D da terceira gerao off-board (GeForce 4, ATI Radeon 9500 etc.), gravador de CD-ROM, teclado e mouse.

J na parte do software, temos que: Para a fase de programao, necessita-se de um compilador C/C++, juntamente com o SDK do DirectX para C/C++, que pode ser baixado gratuitamente pelo site da Microsoft; Para a fase de modelagem 3D e criao de texturas, faz-se necessrio um editor de imagens e um modelador 3D.

81

Tomando-se como base os hardwares listados anteriormente, aconselha-se o uso dos seguintes softwares:

Programao: Visual C++ .NET ou DevCPP, com o SDK da verso 9.0c do DirectX; Modelagem e Texturizao: 3DStudio Max 5.0 ou superior e Photoshop 6.0 ou superior.

82

ANEXO D: DOCUMENTAO DO CDIGO-FONTE DO DEMO

Neste anexo ser feita uma breve documentao das classes do demo do jogo Birds Nightmare, para que estudos futuros possam ser realizados de uma maneira mais simples.

ARMA

Arma( IDirect3DDevice9 *device, Mesh *meshe, D3DXMATRIX mundo, CSomPtr somTiro, CSomPtr somRecarga, CSomPtr somSemBala, int numTiros, int dano, int tirosConsecutivos );

Construtor da classe, onde: - device o dispositivo de renderizao do Direct3D; - meshe um objeto do tipo Mesh que contm o modelo 3D da arma; - mundo a matriz de translao da arma com relao ao campo de viso do jogador; - somTiro o ponteiro CSomPtr do som do tiro da arma; - somRecarga o ponteiro CSomPtr do som do tiro de recarga da arma; - somSemBala o ponteiro CSomPtr do som do tiro da arma, quando a mesma se encontra sem munio; - numTiros a quantidade mxima de munio que a arma pode carregar; - dano o dano de cada tiro daquela arma; - tirosConsecutivos a quantidade de projteis disparados a cada tiro.

83

Arma(

IDirect3DDevice9 mundo,

*device, CSomPtr

char

*diretorio, CSomPtr

char

*nomeDoArquivo, CSomPtr

D3DXMATRIX

somTiro,

somRecarga,

somSemBala, int numTiros, int dano, int tirosConsecutivos );

Construtor da classe, onde: - device o dispositivo de renderizao do Direct3D; - diretrio o diretrio onde o meshe da arma se encontra; - nomeDoArquivo o nome do arquivo com o meshe a ser importado; - mundo a matriz de translao da arma com relao ao campo de viso do jogador; - somTiro o ponteiro CSomPtr do som do tiro da arma; - somRecarga o ponteiro CSomPtr do som do tiro de recarga da arma; - somSemBala o ponteiro CSomPtr do som do tiro da arma, quando a mesma se encontra sem munio; - numTiros a quantidade mxima de munio que a arma pode carregar; - dano o dano de cada tiro daquela arma; - tirosConsecutivos a quantidade de projteis disparados a cada tiro.

~Arma(); Destrutor da classe.

void desenha( D3DXVECTOR3 pos, D3DXVECTOR3 dir ); Desenha a arma, onde: - pos a posio do jogador; - dir a direo do campo de viso do jogador.

84

int recarrega( int numTiros, bool som ); Recarrega a arma, onde: - numTiros a quantidade de tiros disponveis; - som uma varivel boleana para decidir se o som da recarga dever ser tocado ou no.

bool atira( bool espera ); D um tiro com a arma, onde: - espera define se deve-se esperar pelo trmino da execuo do som do tiro ou no para atirar novamente.

bool atirou(); Verifica se a arma foi disparada.

int retornaDano(); Retorna o dano daquela arma.

ARVORE

Arvore( IDirect3DDevice9 *device, char *nomeTextura );

Contrutor da classe, onde: - device o dispositivo de renderizao do Direct3D; - nomeTextura o nome da textura a ser utilizada como rvore.

85

~Arvore(); Destrutor da classe.

void desenha(); Mtodo para imprimir a rvore.

CMERA

Camera(); Construtor da classe;

~Camera(); Destrutor da classe;

void retornaPos( D3DXVECTOR3 *pos ); Retorna o vetor posio da cmera, onde: - pos o vetor de 3 posies onde ser retornado a posio.

void retornaUp( D3DXVECTOR3 *up ); Retorna o vetor up da cmera, onde: - up o vetor de 3 posies onde ser retornado o vetor up.

void retornaLook( D3DXVECTOR3 *look ); Retorna o vetor look da cmera, onde: - look o vetor de 3 posies onde ser retornado o vetor look.

86

void retornaRight( D3DXVECTOR3 *right ); Retorna o vetor right da cmera, onde: - right o vetor de 3 posies onde ser retornado o vetor right.

void retornaView( D3DXMATRIX *V ); Retorna a matriz View da cmera, onde: - V a matriz 3x3 onde ser retornada a matriz View.

void setaPos( D3DXVECTOR3 pos ); Seta a posio da cmera, onde: - pos o vetor de 3 posies onde ser enviado o vetor posio.

void andaLateral( float unidades ); Faz a camera andar lateralmente, onde: - unidades a quantidade de unidades a serem andadas.

void andaFrontal( float unidades ); Faz a camera andar de maneira frontal, onde: - unidades a quantidade de unidades a serem andadas.

void olhaLado(float angle); Faz a camera se mover lateralmente, onde: - angle o ngulo de rotao.

87

bool olhaCima(float angle); Faz a camera se mover para cima e baixo, onde: - angle o ngulo de rotao.

void voa( float unidades ); Faz a camera voar, onde: - unidades a quantidade de unidades a serem voadas.

ESCRITA

Escrita( IDirect3DDevice9 *device, int tamanho ); Construtor, onde; - device o dispositivo de renderizao do Direct3D; - tamanho o tamanho da letra.

~Escrita(); Destrutor.

void escrevexy( int x, int y, char *texto ); Escreve um texto 2D na tela, onde: - x a coordenada X da tela; - y a coordenada Y da tela; - texto o texto a ser escrito na tela.

88

void escreve( char *texto ); Escreve um texto 2D na tela, onde: - texto o texto a ser escrito na tela.

void escrevexyz3D( float x, float y, float z ); Escreve um texto 3D do mundo, onde: - x a coordenada X do mundo; - y a coordenada Y do mundo; - z a coordenada Z do mundo;

void escreve3D(); Escreve um texto 3D do mundo.

void setaPosicao( float x, float y, float z ); Seta a posio do texto a ser escrito, onde: - x a coordenada X do mundo ou da tela; - y a coordenada Y do mundo ou da tela; - z a coordenada Z do mundo;

void setaCor( int r, int g, int b ); Seta a cor do Texto, onde: - r o fator de vermelho; - g o fator de verde; - b o fator de azul;

89

void inicializaTexto3D( char *texto ); Cria o meshe do texto 3D, onde: - texto o texto que se deseja criar o meshe.

FPS

FPS( IDirect3DDevice9 *device, int largura, int altura ); Construtor, onde: - device o dispositivo de renderizao do Direct3D; - largura a largura da caixa na qual a taxa de FPS ser mostrada; - altura a altura da caixa na qual a taxa de FPS ser mostrada.

~FPS(); Destrutor.

void imprime(); Imprime a taxa de frames por segundo.

void addTempo( float tempo ); Adiciona o tempo decorrido para se fazer o clculo da taxa de FPS, onde: - tempo o tempo a ser utilizada para o clculo da taxa de FPS.

90

GERENCIAARVORETEXTURA

GerenciaArvoreTex( IDirect3DDevice9 *device ); Construtor, onde; - device o dispositivo de renderizao do Direct3D.

~GerenciaArvoreTex(); Destrutor.

bool insereArvore( char *caminhoDoArquivo ); Insere uma rvore no gerenciador de rvores, onde: - caminhoDoArquivo o caminho onde se encontra a textura da rvore a ser inserida.

void deletaArvore( int index ); Deleta a textura da rvore, onde: - index a posio da textura da rvore que ser deletada.

void criaVetorPosicaoArvore( int x, int y, int largura, int profundidade, int espaco, vector<int> altitudes, vector<int> objetos ); Cria o vetor com as posies das rvores, onde: - x o nmero de vrtices por coluna do cenrio; - y o nmero de vrtices por linha do cenrio; - largura a largura do cenrio; - profundidade a profundidade do cenrio;

91

- altitudes o mapa de altitude; - objetos o mapa que contm os objetos do cenrio.

void desenhaArvores( D3DXVECTOR3 dir, D3DXVECTOR3 pos ); Desenha as rvores do gerenciador, onde: - dir a direo para a qual elas devem estar apontadas; - pos a posio do jogador.

void preRenderizacao(); Seta os estados de renderizao.

void posRenderizacao(); Desabilita os estados de renderizao utilizados no processo.

GERENCIALUZ

GerenciaLuz( IDirect3DDevice9 *device ); Construtor, onde; - device o dispositivo de renderizao do Direct3D.

~GerenciaLuz(); Destrutor.

92

int insereLuz( int tipo, D3DXCOLOR cor, D3DXVECTOR3 dir, D3DXVECTOR3 pos ); Insere uma luz no gerenciador, onde: - tipo o tipo de luz. Neste caso s aceita o valor LUZ_SPOT. - cor a cor da luz; - dir a direo que ela deve apontar; - pos a posio que ele deve ser colocada.

int insereLuz( int tipo, D3DXCOLOR cor, D3DXVECTOR3 vet ); Insere uma luz no gerenciador, onde: - tipo o tipo de luz. Neste caso, aceita os valores LUZ_DIRECIONAL E LUZ_PONTO; - cor a cor da luz; - vet o vetor que, no caso de ser luz direcional, um vetor que representa a direo, enquanto que, se for luz pontual, indica a posio da luz.

void deletaLuz( int index ); Apaga a luz do gerenciador, onde: - index o ndice da luz no vetor.

void ligaLuz( int index ); Liga a luz, onde: - index a posio da luz no vetor.

93

void apagaLuz( int index ); Apaga a luz do cenrio, onde: - index o ndice da luz no vetor.

void interruptor( int index ); Liga/Desliga a luz do cenrio, onde: - index o ndice da luz no vetor.

void ligarLuzes(); Liga todas as luzes do cenrio.

void desligarLuzes(); Desliga todas as luzes do cenrio.

GERENCIAMESHES

GerenciaMeshes( IDirect3DDevice9 *device ); Construtor, onde; - device o dispositivo de renderizao do Direct3D.

~GerenciaMeshes(); Destrutor.

int insereMesh( int tipo, char *diretorio, char *nomeDoArquivo ); Insere um meshe no gerenciador, onde:

94

- tipo o tipo do meshe, aceitando os valores MESH_ARVORE, MESH_ARMA e MESH_OBJETOS; - diretrio o diretrio dentro do diretrio Meshes que se encontra o meshe; - nomeDoArquivo o nome do arquivo a ser importado.

void deletaMesh( int tipo, int index ); Deleta um meshe do gerenciador, onde: - tipo o tipo do meshe, aceitando os valores MESH_ARVORE, MESH_ARMA e MESH_OBJETOS; - index o ndice do meshe no gerenciador.

void desenha( int tipo, int index, D3DXMATRIX mundo ); Desenha o meshe, onde: - tipo o tipo do meshe, aceitando os valores MESH_ARVORE, MESH_ARMA e MESH_OBJETOS; - index o ndice do meshe no gerenciador; - mundo a matriz que posiciona o objeto no cenrio.

GERENCIAPASSAROS

GerenciaPassaro( IDirect3DDevice9 *device, Terreno *terreno, RECT limites, int numPassaros, int numPassarosLista ); Construtor, onde; - device o dispositivo de renderizao do Direct3D; - terreno o terreno do cenrio;

95

- limites delimita os limites do cenrio; - numPassaros o nmero de pssaros para serem gerenciados; - numPassarosLista o nmero de pssaros que devem atacar ao mesmo tempo, mas no implementado.

~GerenciaPassaro(); Destrutor.

void setaNivel( int nivel ); Seta o nvel dos pssaros, onde: - nvel o nvel a ser setado.

void atirou( d3d :: Raio *raio, int pontos ); Verifica se o tiro acertou os pssaros, onde: - raio o raio que representa o tiro dado; - pontos a quantidade de pontos que os pssaros perdero se forem acertados.

void desenhaPassaros( D3DXVECTOR3 destino, float tempo ); Desenha os pssaros, onde: - destino a posio destino dos pssaros; - tempo o tempo decorrido desde a ltima vez que os pssaros foram desenhados.

96

void inserePassaro(); Insere um pssaro no gerenciador.

float distancia( D3DXVECTOR3 pos, D3DXVECTOR3 posPassaro ); Calcula a distancia do pssaro ao jogador, onde: - pos a posio do jogador; - posPassaro a posio do pssaro.

bool estaDentro( D3DXVECTOR3 pos ); Verifica se o pssaro se encontra dentro do cenrio, onde: - pos a posio do pssaro no cenrio.

void insereNovoPassaro(); Insere um novo pssaro na lista.

void limpaPassaros(); Apaga da lista todos os pssaros.

void limpaPassarosMortos(); Apaga da lista somente os pssaros mortos.

int retornaNumPassaros(); Retorna o nmero de pssaros vivos.

97

void CriaPassaros( int numPassaros ); Cria a lista com o nmero de pssaros requisitados, onde: - numPassaros o nmero de pssaros requisitados.

void leIA( char *localizacaoDoArquivo ); Le a IA de um arquivo externo, onde: - localizacaoDoArquivo a localizao do arquivo de IA, incluindo caminho e nome do arquivo.

HELICE

Helice( IDirect3DDevice9 *device, char *diretorio, char *nomeDoArquivo, CSomPtr som ); Construtor da classe, onde: - device o dispositivo de renderizao do Direct3D; - diretorio o diretrio onde se encontra o meshe da hlice; - nomeDoArquivo o nome do arquivo do meshe da hlice; - som o ponteiro CSomPtr do som da hlice.

~Helice(); Destrutor da classe.

void desenha( D3DXVECTOR3 pos, D3DXVECTOR3 dir, float tempo ); Desenha a Hlice na tela, onde: - pos a posio do jogador;

98

- tempo o tempo decorrido desde a ltima renderizao.

void inicializa(); Inicializa e toca o som da Hlice.

void desinicializa(); Para de tocar o som da Hlice.

LUZ

Luz(); Construtor.

~Luz(); Destrutor.

void criaDirecional ( D3DXVECTOR3 direcao, D3DXCOLOR cor ); Cria uma luz direcional, onde: - direo a direo da luz; - cor a cor da luz.

void criaPonto ( D3DXVECTOR3 posio, D3DXCOLOR cor ); Cria uma luz pontual, onde: - posio a posio da luz; - cor a cor da luz.

99

void criaSpot ( D3DXVECTOR3 posio, D3DXVECTOR3 direcao, D3DXCOLOR cor ); Cria uma luz spot, onde: - posio a posio da luz; - direo a direo da luz; - cor a cor da luz.

D3DLIGHT9 *retornaLight(); Retorna a estrutura que descreve a luz.

void habilita(); Habilita a luz.

void desabilita(); Desabilita a luz.

bool estaAtiva(); Verifica se a luz est ativa.

int ehTipo(); Retorna o tipo da luz.

100

MESH

Mesh( IDirect3DDevice9 *device, char *diretorio, char *nomeDoArquivo ); Construtor, onde; - device o dispositivo de renderizao do Direct3D; - diretrio o diretrio onde o meshe se encontra; - nomeDoArquivo o nome do arquivo com o meshe a ser importado.

~Mesh(); Destrutor.

void desenha( D3DXMATRIX mundo ); Desenha o meshe, onde: - mundo a matriz que posiciona o meshe no cenrio.

MIRA

Mira( IDirect3DDevice9 *device ); Construtor da classe, onde: - device o dispositivo de renderizao do Direct3D.

~Mira(); Destrutor da classe.

101

void desenha(); Desenha a mira na tela.

PSSARO

Passaro( IDirect3DDevice9 *device, D3DXVECTOR3 pos ); Construtor, onde; - device o dispositivo de renderizao do Direct3D; - pos a posio do pssaro no cenrio.

~Passaro(); Destrutor.

void desenha( float tempo ); Desenha o pssaro, onde: - tempo o tempo decorrido desde o ltimo desenho.

void persegue( D3DXVECTOR3 destino, float tempo, float altitude ); Faz o pssaro ir direo quista, onde: - destino a posio destino do pssaro; - tempo o tempo decorrido desde o ltimo desenho; - altitude a altitude do cenrio na posio que o pssaro se encontra.

void foge( D3DXVECTOR3 destino, float tempo, float altitude ); Faz o pssaro fugir da direo quista, onde:

102

- destino a posio destino do pssaro; - tempo o tempo decorrido desde o ltimo desenho; - altitude a altitude do cenrio na posio que o pssaro se encontra.

void ficaParado(); Faz o pssaro ficar parado.

void rotacionarPerseguir( float tempo ); Rotaciona o pssaro para perseguir o destino, onde: - tempo o tempo decorrido desde o ltimo desenho.

void rotacionarFugir( float tempo ); Rotaciona o pssaro para fugir do destino, onde: - tempo o tempo decorrido desde o ltimo desenho.

void setaVelocidade( float velocidade ); Seta a velocidade do pssaro, onde: - velocidade a velocidade quista.

float retornaPosX(); Retorna a posio X do pssaro.

float retornaPosY(); Retorna a posio Y do pssaro.

103

float retornaPosZ(); Retorna a posio Z do pssaro.

D3DXVECTOR3 retornaPos(); Retorna o vetor posio do pssaro.

bool acertou( d3d::Raio* raio ); Verifica se o pssaro foi acertado, onde: - raio a direo do tiro.

bool testeColisao( d3d::Raio* raio, d3d::EsferaLimite* esfera ); Verifica se houve coliso entre o raio e a esfera, onde: - raio a direo do tiro; - esfera a esfera que indica onde pode ocorrer coliso com o pssaro.

void retiraPontos( int pontos ); Retira pontos de vida do pssaro, onde: - pontos a quantidade de pontos.

void adicionaPontos( int pontos ); Adiciona pontos de vida ao pssaro, onde: - pontos a quantidade de pontos.

104

int retornaVida(); Retorna a quantidade de pontos de vida do pssaro.

bool estaVivo(); Retorna o estado de vida do pssaro.

void troca( int &t1, int &t2 ); Faz a troca de valores entre os dois valores inteiros.

PERIFRICOS

Perifericos(); Construtor.

~Perifericos(); Destrutor.

bool inicializaMouse( HWND hwnd ); Faz a inicializao do mouse, onde: - hwnd o handler da janela.

void leMouse(); L os dados de entrada do mouse.

105

void retornaMouse( MOUSE *entrada ); Retorna o estado do mouse, onde: - entrada a estrutura que contm os dados de entrada do mouse.

void limpaMouse(); Limpa os dados lidos do mouse que estavam no objeto.

bool botaoApertado( int index ); Verifica se o boto do mouse foi pressionado, onde: - index o ndice do boto do mouse, sendo 0 o boto esquerdo.

TERRENO

Terreno( IDirect3DDevice9* device, GerenciaMeshes *gMeshes, GerenciaArvoreTex *gArvore, char *diretorio, int numVertsPorLinha, int

numVertsPorColuna, int espacoEntreCelulas, float escalaAltitude); Construtor, onde; - device o dispositivo de renderizao do Direct3D; - gMeshes o gerenciador dos meshes que ser utilizado no cenrio; - gArvore o gerenciador das texturas das rvores; - diretorio o diretrio dentro da pasta Terrenos, onde se encontra os arquivos do terreno; - numVertsPorLinha o nmero de vrtices por linha do terreno; - numVertsPorColuna o nmero de vrtices por coluna do terreno; - espacoEntreCelulas o tamanho de cada clula do terreno;

106

- escalaAltitude o fator pela qual deve ser multiplicado o mapa de altitude.

~Terreno(); Destrutor.

int retornaEntradaMapaAltitude( int linha, int coluna ); Retorna a entrada do mapa de Altitude, onde: - linha a linha da matriz imaginria do mapa de altitude; - coluna a coluna da matriz imaginria do mapa de altitude.

void setaEntradaMapaAltitude( int linha, int coluna, int valor ); Seta a entrada do mapa de Altitude, onde: - linha a linha da matriz imaginria do mapa de altitude; - coluna a coluna da matriz imaginria do mapa de altitude; - valor o valor a ser usado.

bool estaInacessivel( float x, float z ); Verifica se a posio est inacessvel, onde: - x a posio sobre o eixo X do cenrio. - z a posio sobre o eixo Z do cenrio.

float retornaAltitude( float x, float z ); Retorna a altitude da posio, onde: - x a posio sobre o eixo X do cenrio. - z a posio sobre o eixo Z do cenrio.

107

bool leTextura( char *nomeDoArquivo ); L uma textura para ser aplicada ao cenrio, onde: - nomeDoArquivo o nome do arquivo da textura a ser importada.

bool geraTextura( D3DXVECTOR3* direcaoDaLuz ); Gera uma textura automtica, onde: - direcaoDaLuz a direo da luz aplicada sobre o terreno.

bool desenha( D3DXMATRIX* mundo, bool desenhaTriangulos, D3DXVECTOR3 dir, D3DXVECTOR3 pos ); Desenha o terreno, onde: - mundo a matriz que posiciona o terreno no plano cartesiano. - desenhaTriangulos setado para true quando se desenha desenhar tambm os tringulos do cenrio; - dir a direo da viso do jogador para se desenhar as rvores; - pos a posio do jogador para se desenhar as rvores.

void desenhaArvores( D3DXVECTOR3 dir, D3DXVECTOR3 pos ); Desenha as rvores, onde: - dir a direo da viso do jogador; - pos a posio do jogador.

void desenhaObjetos(); Desenha os objetos do cenrio.

108

bool leArquivosRaw(int tipo, char *nomeDoArquivo); L o arquivo RAW, onde: - tipo o tipo do arquivo, aceitando os valores TERRENO_ALTITUDE, TERRENO_OBJETOS e TERRENO_ACESSO; - nomeDoArquivo o nome do arquivo a ser lido.

bool computarVertices(); Computa os vrtices para criar o terreno.

bool computarIndices(); Computa os ndices para criar o terreno.

bool iluminarTerreno(D3DXVECTOR3* direcaoDaLuz); Calcula a iluminao do terreno, onde: - direcaoDaLuz a direo da luz incidente no terreno.

float computarSombra(int celulaDaLinha, int celulaDaColuna, D3DXVECTOR3* direcaoDaLuz); Computa a sombra do terreno, onde: - celulaDaLinha o ndice da clula da linha a ser computada a sombra; - celulaDaColuna o ndice da clula da coluna a ser computada a sombra; - direcaoDaLuz o vetor da direo da luz incidente sobre o terreno.