Home
tccjogos.
Contents
1. E ag x Base Intermedi ria Objetos Figura 7 1 Exemplo de conte do para cada camada 43 Cada uma dessas camadas pode ser representada por matrizes bidimensionais e o seu conte do indica qual o ndice do bloco que deve ser desenhado naquela posi o poss vel tamb m ter uma quarta camada que seria usada para objetos que est o acima do jogador Esta op o boa para dar uma impress o de profundidade Por exemplo se tivermos a ilustra o de uma rvore que fosse dividida em duas partes o tronco e a copa O tronco ficaria na camada intermedi ria e teria um atributo que indicaria que o jogador n o pode passar enquanto que a copa estaria na quarta camada de forma que o jogador passaria por baixo dela conforme a figura 77 2 Figura 7 2 Personagem atr s da rvore Para cada bloco poss vel ter diversas informa es associadas para indicar se ele um obst culo se causa algum dano ao jogador ou se h alguma a o especial que deva ocorrer quando forem tocados Em certas situa es interessante permitir que um bloco tenha Zz anima o isto muito usado em cen rios que ocorrem na beira de mares para ilustrar o movimento da gua Outra quest o relativa implementa o diz respeito varia o do tamanho dos mapas E mais f cil manter um padr o fixo para o tamanho dos mapas por m mais conveniente que o tamanho seja vari vel para cada mapa 7 2 A Classe CMapa Par
2. listada no c digo 4 2 respons vel por todo o processo de inicializa o Nela s o carregados as imagens e sons que ser o usados no jogo As imagens do Jogador e dos carros encontram se no arquivo carros bmp Para carregar este arquivo na mem ria utilizado a fun o Carregar Bitmap Em seguida criada a IMAGEM jogador de tamanho 40x64 com espa o para um quadro Este quadro copiado da posi o 0 0 do bitmap previamente carregado e armazenado na estrutura IMAGEM atrav s da fun o Carregar Quadro Os carros do jogo s o mantidos em uma matriz Eles t m o mesmo tamanho do Jogador O quadro deles est na posi o 1 0 do bitmap A imagem da bandeira est em um arquivo bitmap diferente ent o teremos que carregar este outro arquivo na mem ria O tamanho da bandeira de 32x32 H apenas dois sons neste jogo Um bip no formato WAV e uma m sica no formato MIDI S o criadas duas vari veis inteiras no come o do arquivo para armazenar os identificadores destes sons Por ltimo atribu do o valor 1 vari vel menu para indicar que o menu est ativo void Jogo Inicio void int i Carregar_Bitmap carros bmp Criar_Imagem jogador 40 64 1 Carregar Quadro jogador 0 0 0 for i 0 ix MAX CARROS i Criar_Imagem carros i 40 64 1 Carregar Quadro carros i 0 1 0 Carregar_Bitmap bandeira bmp Criar_Imagem bandeira 32 32 1 Carregar Quadro bande
3. M todo Atribuir H o m todo que desenha todas as camadas do mapa na tela c digo 7 4 Ele percorre a matriz do mapa calcula a posi o correspondente c lula atual e seleciona as imagens corretas de acordo com o conte do de cada c lula importante notar que a imagem de ndice 0 da camada de objetos deve ser totalmente transparente para possibilitar que a camada base seja vista 46 void CMapa Desenhar int x int y int cel_x cel_y desenha as duas camadas do mapa for cel_x 0 cel_x lt CMAPA LARGURA cel_x for cel_y 0 cel_y lt CMAPA ALTURA cel_y im_base gt x im_objetos gt x x cel_x TAM_BLOCO im_base gt y im_objetos gt y y cel_y TAM_BLOCO pegar indice do quadro que deve ser desenhado im_base gt quadro_atual mapa_base cel_x cel_y im_objetos gt quadro_atual mapa_objetos cel_x cel_y desenha as duas camadas da c lula Desenhar Imagem im base Desenhar Imagem im objetos C digo 7 4 M todo Desenhar Finalmente h a op o de salvar c digo 7 5 e carregar o mapa a partir de arquivos Estes m todos demonstram uma forma b sica que pode ser adaptada para implementar a op o de salvar um jogo para que o usu rio possa retornar ao local onde parou na ltima partida void CMapa Salvar void Salvar os dados do mapa no arquivo mapa rhg FILE fp int cel_x cel_y abrir arquivo em
4. Caso V rias anima es c digo 6 3 Para implementar v rias anima es pode se usar uma matriz bidimensional Um dos ndices indica a anima o atual anim atual e o outro ndice usado para os quadros da anima o anim ind Iremos utilizar o valor 1 para indicar o fim de uma anima o Para mudar de anima o basta alterar o valor da vari vel anim atual e reiniciar a vari vel anim ind para zero No exemplo a seguir ser o criadas tr s anima es com um valor m ximo de oito quadros para cada 38 no come o do c digo defini o da matriz e vari veis cada linha representa uma anima o int anim_seq 3 8 0 1 2 3 2 1 1 0 3 4 5 1 0 0 0 0 5 4 3 2 1 0 0 0 int anim_cont 0 int anim_ind 0 ndice dos quadros int anim_atual O indice de anima o no Jogo_Main aumenta anim_cont e testa se alcan ou o valor de espera anim_cont if anim_cont 3 anim_cont 0 anim_ind passa para o pr ximo quadro se alcan ar o fim da anima o representado por 1 ent o reinicia anima o if anim seglanim atual anim ind 1 anim ind 0 se pressionar a tecla ENTER ent o passa para a pr xima anima o Testar Tecla DIK RETURN anim_ind 0 reinicia contadores anim_cont 0 anim_atual pr xima anima o se passou da ltima anima o volta para a primeira if anim_atual 3 anim atual 0 Ler
5. advapi32 lib shell32 lib ole32 lib oleaut32 lib uuid lib Figura A3 3 Adi o das bibliotecas do DirectX ao projeto
6. atribui os valores iniciais de outras vari veis do jogo 27 void Novo_Jogo void int 1 iniciar valores bandeira estado INATIVO for i 0 i lt MAX CARROS i carros i estado INATIVO jogador x 300 jogador y 400 pontos 0 dist_carro 0 vel_carro 4 nivel 1 C digo 4 5 Fun o Novo Jogo 4 4 Os elementos do jogo A seguir est o as fun es que controlam os elementos do jogo tais como jogador carros e bandeiras A fun o Bandeira c digo 4 6 controla o movimento da bandeira No come o feito um teste se a bandeira est no estado INATIVO se estiver ent o o estado passa para ATIVO e ela retorna ao topo da tela em uma posi o X aleat ria O movimento dela reto para baixo a sua velocidade foi definida em uma constante chamada BAND VEL Se ela passar da base da tela ent o seu estado passa para INATIVO No final da fun o ela desenhada void Bandeira void if bandeira estado IGUAL INATIVO bandeira estado ATIVO bandeira x Aleatorio 160 479 bandeira largura bandeira y bandeira altura bandeira y BAND_VEL if bandeira y gt 479 bandeira estado INATIVO Desenhar Imagem bandeira C digo 4 6 Fun o Bandeira 28 A fun o Carros c digo 4 7 controla os carros dos oponentes Ela est dividida em duas partes Na primeira feito um teste para ver se
7. 0 se n o Exemplo if Colisao Imagens jogador bomba fim de jogo 3 3 Entrada de dados A entrada de dados em um jogo feita atrav s de tr s dispositivos teclado mouse e Joystick A leitura do teclado tem como objetivo simplesmente o de saber se uma determinada est sendo pressionada ou n o Para cada tecla h um c digo associado Prot tipo int Testar Tecla int dik cod Coment rios Retorna 1 se a tecla passada como par metro estiver sendo pressionada Os c digos das teclas s o C digos Descri o DIK UP Seta para cima DIK DOWN Seta para baixo DIK LEFT Seta para esquerda DIK RIGHT Seta para direita DIK ESCAPE Esc DIK 0 9 0 a 9 do teclado principal DIK TAB Tab DIK A Z Letras de A a Z DIK RETURN Enter DIK LCONTROL DIK RCONTROL DIK LSHIFT DIK RSHIFT DIK LMENU DIK RMENU DIK SPACE DIK Fl F12 DIK NUMPADO 9 DIK NUMPADENTER Exemplo Control esquerdo Control direito Shift esquerdo Shift direito Alt esquerdo Alt direito Barra de espa o Teclas de fun es Fl a F12 0 a 9 no teclado num rico Enter no teclado num rico if Testar Tecla DIK RIGHT jogador x 4 mover para direita 16 O mouse funciona de uma forma diferente Para poder monitorar seu movimento n o se trabalha com coordenadas absolutas pois n o h um ponto de refer ncia que ir servir como origem mas sim com coordenadas relativas ou seja ser recebida como entrada de d
8. 0 6 0 6 1 0 C digo 8 5 Defini o de valores usados na ilumina o Na fun o Inicializa c digo 8 6 selecionada atrav s da fun o glShadeModel o modo de coloriza o com v rias tonalidades A fun o glClearColor especifica a cor usada para limpar a tela A ilumina o definida atrav s de v rias chamadas fun o olLightfv para especificar suas componentes e sua posi o A proje o em perspectiva selecionada atrav s da fun o gluPerspective O comando glEnable GL DEPTH TEST habilita a ordena o em profundidade de forma que as imagens que estiverem mais pr ximas ao observador ir o sobrepor as mais distantes 57 void Inicializa void glShadeModel GL_SMOOTH glClearColor 0 3 0 6 0 8 0 0 glLightfv GL LIGHTO GL POSITION light position glLightfv GL LIGHTO GL DIFFUSE luz branca glLightfv GL LIGHTO GL SPECULAR luz branca glLightModelfv GL LIGHT MODEL AMBIENT lmodel ambient glEnable GL LIGHTING glEnable GL LIGHTO Especifica sistema de coordenadas de projecao glMatrixMode GL_PROJECTION Inicializa sistema de coordenadas de projecao giLoadldentity Especifica a projecao perspectiva gluPerspective 90 1 0 1 3000 Especifica sistema de coordenadas do modelo giMatrixMode GL MODELVIEW Inicializa sistema de coordenadas de projecao glLoadldentity glEnable GL DEPTH TEST
9. 2 P Passo Z A 8 Angulo px cos8 P pz sen P A E Figura 8 2 Convers o para coordenadas cartesianas 54 No programa do Labirinto 3D o movimento feito atrav s do teclado O GLUT especifica fun es para a leitura de teclas convencionais e para as teclas especiais como as setas As nicas teclas convencionais usadas neste programa o ESCAPE para encerrar o aplicativo e a tecla W que usado para alternar o modo de renderiza o entre normal ou em wireframe C digo 8 2 void Keyboard Function unsigned char key int x int y switch key case 27 exit 0 VESC gt encerra aplicativo break case w case W wire wire break C digo 8 2 Fun o Keyboard Function Na fun o de leitura das teclas especiais s o processados os comandos associados s setas do teclado As setas para esquerda e direita executam o movimento de guinada alterando o valor do ngulo para o qual o jogador est direcionado e calcula os componente X e Z do movimento As setas para frente e tr s fazem o movimento do corpo por m antes da execu o verificado se o caminho est livre atrav s da fun o pode mover C digo 8 3 void Special Function int key int x int y float rad switch key case GLUT_KEY_RIGHT angulo 10 if angulo gt 360 angulo 360 rad float 3 14159 angulo 180 0f mov_x cos rad PASSO mov_z
10. HATTAN John What language do I use Dispon vel em http www gamedev net reference articles article895 asp Acesso em janeiro de 2004 HAW2001 HAWKINS Kevin ASTLE Dave OpenGL Game Programming USA Prima Publishing 2001 IN22004 IN2Games Congresso Internacional de Inova o em Jogos para Computadores Dispon vel em http www gamenetpr com br in2games Acesso em janeiro de 2004 LAM1999 LAMOTHE Andr Tricks of the Windows Game Programming Gurus Indianapolis SAMS 1999 OPE2004 OpenGL Architecture Review Board Dispon vel em http www opengl org Acesso em janeiro de 2004 ROL2000 ROLLINGS Andrew MORRIS Dave Game Architecture and Design Arizona Coriolis 2000 ROM2004 ROMERO Marcos Programa o de Jogos Dispon vel em http www geocities com progjogos Acesso em janeiro de 2004 SAL2000 SALTZMAN Marc Game Design Secrets of the Sages Indianapolis Macmillan 2000 SCH1988 SCHILDT Herbert Turbo C Guia do Usu rio S o Paulo McGraw Hill 1988 WEL 1995 WELLS Drew YOUNG Chris Cria es em Ray Tracing S o Paulo Berkeley 1995 WJO2004 Wjogos Workshop Brasileiro de Jogos e Entretenimento Digital Dispon vel em http www icad puc rio br wjogos Acesso em janeiro de 2004 62 ANEXO 1 CURSOS DE JOGOS e P s Gradua o em Desenvolvimento de Jogos para Computadores Unicenp PR Link http www posunicenp edu br index asp strCurso Jogos Acesso em jane
11. Joy Esquerda void Coment rios Retorna 1 se o joystick estiver sendo pressionado para esquerda Exemplo if Joy Esquerda jogador x 4 move jogador para esquerda Prot tipo int Joy Direita void Coment rios Retorna 1 se o joystick estiver sendo pressionado para direita Exemplo if Joy Direita jogador x 4 move jogador para direita Prot tipo int Joy Bot int bot Coment rios Retorna 1 se o bot o do joystick que foi passado como par metro estiver sendo pressionado O primeiro bot o tem o valor de 0 Exemplo if Joy_Bot 0 Prot tipo int Joy_Existe void Coment rios Retorna 1 se existir um joystick conectado ao computador Exemplo if Joy Existe 18 3 4 Efeitos sonoros e m sicas Os arquivos de som do tipo wave s o muito utilizados para a produ o de efeitos sonoros em jogos Eles tamb m podem ser utilizados para m sicas por m o formato wave ocupa muita mem ria sendo mais recomendado o formato midi para as m sicas Para trabalhar com os arquivos wave o MRDX mant m uma lista interna de todos os sons que foram carregados Para acess los preciso que seja guardado um identificador de cada som que gerado no momento que o som armazenado Prot tipo int Carregar Wav char nome arq Coment rios Carrega um arquivo de som no formato wave e retorna um identificador que ser usado para manuse lo O som wave deve ter o formato de 11 KHz 8 bit m
12. O OpenGL n o suporta diretamente nenhum tipo de janelas menus ou entrada de dados Por isso foi desenvolvido o GLUT que providencia uma implementa o b sica desses itens enquanto se mant m independente de plataforma 51 Para demonstrar o uso do OpenGL foi desenvolvido um programa usando o GLUT que desenha um simples labirinto 3D O usu rio pode se mover pelo labirinto atrav s das setas do teclado feito o teste de colis o com as paredes para impedir que o usu rio atravesse as H uma esfera que se movimenta pelo labirinto desviando das paredes poss vel visualizar o labirinto em modo wireframe pressionando a tecla W A imagem do programa est na figura 8 1 O c digo da fun o main est na listagem de c digo 8 1 Figura 8 1 Programa de Labirinto 3D void main int argc char argv glutlnit amp argc argv glutlnitDisplayMode GLUT DOUBLE GLUT_RGB GLUT_DEPTH glutCreateWindow Labirinto 3D glutFullScreen Inicializa glutDisplayFunc display glutKeyboardFunc Keyboard Function glutSpecialFunc Special Function glutldleFunc Move Esfera glutMainLoop C digo 8 1 Fun o main do programa Labirinto 3D 52 A fun o main do programa composta quase toda por chamadas s fun es do GLUT para a configura o do ambiente A seguir est exposto o que cada uma delas faz e glutInit amp argce argv Fun o de inicializa o do GLU
13. Tela tem este objetivo Prot tipo int Limpar Tela int cor 0 Coment rios Limpa a mem ria secund ria Pode se passar uma cor como par metro para preencher a tela com esta cor Exemplo Construir o pr ximo quadro do jogo Limpar Tela faca todos os seus desenhos Mostrar Tela No MRDX foi definida uma estrutura chamada IMAGEM que ser usada para controlar seus objetos no jogo Ela possui a seguinte forma struct IMAGEM int x y int largura int altura int num_quadros int quadro_atual int estado int dados MAX_DADOS LPDIRECTDRAWSURFACE4 quadros MAX_QUADROS F 13 Descri o dos campos de IMAGEM x y Posi o da IMAGEM Esta coordenada da parte superior esquerda largura altura Dimens es da IMAGEM num quadros Quantidade de quadros que esta IMAGEM possui quadro atual Indica a posi o do quadro que est sendo utilizado estado Pode ser ATIVO ou INATIVO Usado para controlar quais s o as imagens que est o ativas no jogo dados MAX DADOS Espa o extra para guardar informa es espec ficas de seu jogo A constante MAX DADOS est definida em 32 por ser uma quantidade suficiente para a maioria dos objetos de um jogo quadros MAX QUADROS Local de armazenamento dos quadros de IMAGEM A constante MAX QUADROS est definida em 128 Um programador declara uma vari vel do tipo IMAGEM desta forma IMAGEM jogador O MRDX trabalha no modo de video de 640x
14. VEL Como exemplo temos no c digo 4 8 o teste de movimento para cima 30 if Testar Tecla DIK UP OU Joy Cima jogador y JOG VEL ifGogador y lt 0 jogador y 0 C digo 4 8 Movimento para cima do jogador Se o jogador colidir com uma bandeira ent o aumenta o n mero de bandeiras pegas aumenta os pontos de acordo com o n vel coloca a bandeira no estado INATIVO e toca um som A cada cinco bandeiras pegas aumenta o n vel e a velocidade dos carros Se a colis o for com alguns dos carros ent o a partida encerra e o jogo retorna para o menu O teste de colis o s feito se os carros estiverem no estado ATIVO c digo 4 9 if Colisao_Imagens jogador bandeira n_bandeiras pontos nivel bandeira estado INATIVO Tocar Wav bip wav if n bandeiras 5 IGUAL 0 nivel vel_carro for i 0 i lt MAX CARROS i if carros i estado IGUAL ATIVO if Colisao_Imagens jogador carros i fim de jogo menu 1 return C digo 4 9 Testes de colis es do jogador 31 5 T CNICAS DE JOGOS 2D Neste cap tulo examina se o c digo de outro jogo que se encontra na pasta progjogos ex2 do MRDX O jogo baseado em um labirinto Deve se pegar os b nus que aparecem na tela e evitar ser pego pelos monstros que se movem pelo labirinto Ele tem a mesma estrutura do jogo anterior ent o s o comentadas apenas as caracter sticas espec ficas d
15. base IMAGEM im objetos C digo 7 1 Classe CMapa A classe possui duas vari veis de refer ncia para estruturas do tipo IMAGEM Uma mant m as imagens usadas na camada base e a outra tem as imagens da camada de objetos Estas imagens s o carregadas externamente e apenas a refer ncia passada para a classe atrav s dos dois m todos descritos no c digo 7 2 45 void CMapa Atribuir Imagem Base IMAGEM amp im im_base amp im void CMapa Atribuir Imagem Objetos IMAGEM amp im im objetos amp im C digo 7 2 M todos para armazenar as refer ncias de IMAGEM Para modificar os valores do mapa deve se utilizar o m todo Atribuir c digo 7 3 E preciso informar as coordenada x e y da c lula que ser alterada a camada a que pertence e o novo valor Este valor o ndice da imagem que ser desenhada naquela posi o O m todo usado para a leitura deste valor chama se Ler y void CMapa Atribuir int camada int cel x int cel y int valor Atribui o valor a uma determinada posi o do mapa camada 0 gt Base 1 gt Objetos if cel_x lt 0 cel_x gt CMAPA LARGURA return if cel_y lt 0 I cel_y gt CMAPA_ALTURA return if camada lt 0 camada gt 2 return if valor lt O Il valor gt NUM TILES return if camada 0 8 mapa_base cel_x cel_y valor mapa_objetos cel_x cel_y valor C digo 7 3
16. chamada WNDCLASSEEX que cont m as informa es b sicas de todas as janelas Deve se especificar os dados particulares da janela que ser usada na aplica o que est sendo desenvolvida e Registrar a sua classe Windows Depois de especificado os dados da classe Windows preciso registr la para que o Sistema Operacional Windows saiba da exist ncia dela Para isso utiliza se a fun o RegisterClassEx e Criar a janela Feito o registro pode se criar uma janela baseada na classe registrada A fun o usada a CreateWindowEx Informa se uma s rie de par metros tais como tamanho posi o e estilo A fun o ir retornar um identificador da janela criada e Receber as mensagens Faz se necess rio a defini o de um la o principal que ficar em execu o at que receba uma mensagem de finaliza o Nele s o recebidas as mensagens enviadas por outras aplica es e mandadas para o Manipulador de Eventos e Manipular os eventos E preciso definir uma fun o que ir processar os eventos ocorridos durante a execu o da aplica o Determinam se quais s o os eventos que devem ser processados e de que forma ou pode ser usado o processamento padr o do Sistema Operacional Windows O MRDX encapsula essas opera es em duas fun es WinMain e WindowProc A fun o WindowProc o manipulador de eventos Na fun o WinMain c digo A2 1 s o executadas a
17. da linguagem pode consultar uma apostila sobre programa o em C C que est dispon vel na se o de material did tico da p gina de jogos do autor ROM2004 Se necess rio o livro de Deitel DEI2000 possui mais informa es sobre a linguagem C C Os t picos que comp e este TCC est o descritos a seguir e Conhecendo o MRDX Esta se o apresenta todas as funcionalidades do MRDX e como deve ser usado e A Estrutura de um Jogo apresentado um simples jogo desenvolvido com o MRDX para que seja explicado os principais elementos que comp e quase todos os jogos e T cnicas de Jogos 2D Comenta se sobre t picos comuns em jogos 2D como sprites intera o com o cen rio e controladores e Anima o Exp e fundamentos necess rias para a programa o da anima o e mostra uma classe que encapsula estas implementa es e Editor de Mapas No es de Tile Based Games s o apresentadas aqui e um simples editor de mapas desenvolvido e Fundamentos de Jogos 3D Vis o geral de jogos 3D e coment rios sobre OpenGL e movimenta o 3D 2 A HIST RIA DOS VIDEOGAMES A ind stria de jogos eletr nicos bem nova mas evoluiu bastante em pouco tempo Nesta se o apresentam se os principais sistemas e gera es de sistemas que marcaram a hist ria dos videogames est dispon vel uma vers o ilustrada desta hist ria na p gina de Jogos do autor ROM2004 e Atari 2600 O videogame da Atari fo
18. deve iniciar um novo carro Na segunda parte s o processados todos os carros que estiverem ativos H uma vari vel dist carro que controla a dist ncia do ltimo carro para o topo da tela Quando essa dist ncia for maior que 200 ent o iniciado um outro carro Para isso procura se na matriz carros um elemento que esteja INATIVO para ent o inici lo no topo da tela em uma posi o X aleat ria Para processar todos os carros utilizado um la o for que percorre toda a matriz dos carros Se o carro estiver ATIVO ent o ele processado A velocidade vertical dos carros est armazenada na vari vel vel carro que altera de acordo com o nivel do jogo Quanto ao seu movimento horizontal ele pode est indo RETO para ESQUERDA ou para DIREITA Estas palavras de dire es foram definidas para facilitar o entendimento do c digo Ele mant m uma dire o por um per odo de tempo quando este tempo acaba ent o seleciona outra dire o e outro per odo de tempo aleatoriamente Para armazenar estes dados extras foi utilizado a matriz dados MAX_DADOS da estrutura IMAGEM Se o carro tocar na borda da pista ent o invertida a dire o que ele estava Se o carro passar da base da tela ent o seu estado passa para INATIVO No final o carro desenhado void Carros void int i dist_carro vel_carro if dist carro gt 200 dist_carro 0 finicia um carro procurar um dispon vel i 0 while carro
19. digo de seu jogo de uma forma semelhante fun o main de um programa padr o em linguagem C Uma das diferen as Zz que a fun o Jogo Main reexecutada constantemente importante lembrar que para a execu o dos programas preciso ter o DirectX RunTime instalado na m quina do usu rio A instala o do DirectX dividida em duas partes a RunTime E a parte que deve estar presente na m quina do usu rio para a execu o dos programas b SDK o kit de desenvolvimento para a cria o dos programas usando o DirectX Al m disso preciso configurar o arquivo de projeto para indicar onde devem ser encontrados os arquivos do DirectX SDK conforme o anexo 3 12 3 2 Lidando com imagens Todos os desenhos no MRDX s o feitos em uma mem ria secund ria e ao final de cada ciclo do jogo deve se passar os dados desta mem ria para a mem ria de v deo onde mantida a imagem que est na tela Esta opera o feita atrav s do uso da fun o Mostrar Tela que est descrita seguir Prot tipo int Mostrar Tela void Coment rios Usada para mostrar na tela o conte do da mem ria secund ria onde s o feitos os desenhos Deve ser chamada ao final de cada ciclo Exemplo faca todos os seus desenhos Mostrar Tela No in cio de cada ciclo do jogo preciso limpar a tela atual para que possa ser feito o desenho do pr ximo quadro A fun o Limpar
20. exemplo da caracter stica interdisciplinar dos jogos o autor desenvolveu o Projeto JEDI Jogos Eletr nicos Distribu dos e Inteligentes com o objetivo de servir como um laborat rio de aplica o dos conceitos das disciplinas de Sistemas Distribu dos e Intelig ncia Artificial aplicadas no desenvolvimento de jogos Informa es sobre o projeto JEDI incluindo apresenta es e demos podem ser encontradas na p gina de jogos do autor ROM2004 A vers o inicial do MRDX foi desenvolvida com um prop sito did tico o ensino de programa o de jogos Como o MRDX implementa os servi os b sicos que s o comuns para diferentes jogos um programador inicia diretamente a programa o dos aspectos criativos do jogo Outras vantagens desta biblioteca s o livre para download com documenta o em portugu s e com c digo fonte aberto Gra as s funcionalidades do MRDX neste TCC foi poss vel tratar de assuntos de mais alto n vel relacionados programa o de jogos 61 REFER NCIAS BIBLIOGR FICAS CON2004 Continuum Dispon vel em http www continuum com br Acesso em janeiro de 2004 DAV1995 DAVIS Stephen C para Leigos S o Paulo Berkeley 1995 DEI2000 DEITEL Harley C Como Programar Porto Alegre Bookman 2000 GRA1995 GRADECKI Joe Kit de Programa o da Realidade Virtual S o Paulo Berkeley 1995 GRU1994 GRUBER Diana Action Arcade Adventure Set Arizona Coriolis 1994 HAT2004
21. o quadro atual na matriz Ele depende da anima o atual e do ndice de quadros jogador quadro atual anim seg anim atual anim ind Desenhar Imagem jogador C digo 6 3 V rias anima es 39 6 2 Organizando em uma classe Uma classe chamada CAnim foi programada para encapsular as complexidades da anima o para facilitar o seu uso em jogos Ela apenas trabalha com valores inteiros e matrizes e n o tem nenhuma depend ncia com o MRDX Isto significa que a classe pode ser usada em qualquer programa C Para utiliz la preciso definir as matrizes que cont m as sequ ncias dos quadros da anima o e armazen las em um objeto da classe CAnim Est o dispon veis v rios m todos que s o usados para sele o da anima o atualiza o e defini o de par metros O cabe alho da classe CAnim encontra se no c digo 6 4 class CAnim public CAnim void CAnim void int Atualizar void int Quadro_Atual void int Atribuir_Anim_Freq int freq int Anim_Freq void int Adiciona_Anim int num pos int sequencia int Anim Ind void int Anim_Atual void int Atribuir Anim Atual int anim bool trava false bool Anim Feita void void Reinicia Anim void int Num Anim void void Prox Quadro void protected int anim cont int anim freg int quadro atual int anim ind int anim seglMAX ANIM intanim atual bool anim feita int num anim bool trava ult
22. pressionada ent o chamada a 24 fun o Jogo Fim que ir executar os procedimentos de sa da do jogo feito um teste condicional para verificar se a m sica midi est tocando sen o estiver ent o come a a tocar O cen rio de fundo feito apenas limpando a tela com a cor VERDE e ent o desenhado um ret ngulo CINZA no centro Depois escrito algumas informa es na tela com a fun o Desenha Dados Ent o feito um teste para ver se o menu est ativo Se o menu n o estiver ativo ent o o jogo est rodando e s o feitas as chamadas s fun es que controlam as vari veis do tipo IMAGEM do jogo que s o os carros a bandeira e o jogador Por ltimo mostrada a tela onde foram feitos os desenhos e feita uma pausa para sincronizar o tempo do Jogo void Jogo Main void if inicio inicio 0 Jogo_Inicio Iniciar_Relogio if Testar_Tecla DIK_ESCAPE encerrar o jogo Jogo Fim return tocar m sica if Midi_Tocando musica_mid Tocar_Midi musica_mid desenhar pista Limpar_Tela VERDE Desenhar Retangulo 160 0 479 479 CINZA Desenha Dados if menu Menu else est no jogo processar objetos Bandeira Carros Jogador Mostrar_Tela Esperar_Relogio 40 40 milisegundos gt 25 quadros por segundo C digo 4 1 Fun o Jogo_Main 25 4 2 Inicializa o do jogo A fun o Jogo Inicio
23. quadro C digo 6 4 Classe CAnim 40 6 3 Animando um lutador Para demonstrar o uso da classe CAnim foi elaborado um programa onde o usu rio controla um lutador que pode executar diversos movimentos tais como andar pular abaixar e chutar A figura 6 2 uma imagem da tela do programa oem of E HIET HTE 2 HUTE ES ZAIF H EE CEAHA HULEH E TEHARI E Lo FEI HAKER FHER UZAHE HEL WWM E CITIES 2 HER DI Diz Figura 6 2 Exemplo de anima o No programa principal preciso definir um objeto da classe CAnim e as matrizes com as sequ ncias de anima o e vari veis inteiras que ir o armazenar um identificador retornado pela classe para ser usado na manipula o da anima o Para facilitar o entendimento estarei usando como exemplo apenas tr s das anima es do lutador c digo 6 5 int anim andando anim chute anim pulo int ANIM ANDANDO 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 int ANIM CHUTEI 37 38 39 39 38 37 int ANIM PULO 25 26 27 28 29 29 30 31 32 33 CAnim anim C digo 6 5 Defini o das matrizes de anima o O lutador representado por uma vari vel do tipo IMAGEM Seu tamanho de 104x124 pixels e possui 45 quadros que s o usados em suas diversas anima es Os quadros est o armazenados em um arquivo bitmap chamado lutador bmp Eles est o distribu dos como em uma grade de 9 colunas e 5 linhas O c digo 6 6 respon
24. ria para que sejam usados posteriormente O MRDX possui uma matriz interna para armazenar os buffers de sons A cria o dos buffers no MRDX s o feitas a partir da fun o Carregar Wav que cria o buffer de som baseado no arquivo wav passado como par metro em um espa o livre na matriz de buffers retornando um identificador que ser usado para posterior manipula o do buffer de som O DirectMusic o componente do DirectX usado para manipula o de m sicas no formato MIDI Al m disso ele possui diversos recursos avan ados que permitem a manipula o din mica da m sica O MRDX lida com o DirectMusic de uma forma semelhante ao DirectSound atrav s do uso de uma matriz interna para o armazenamento das m sicas As principais interfaces do DirectMusic s o IDirectMusicPerformance Principal interface que controla e manipula a reprodu o das m sicas No MRDX ela criada na fun o Directx Iniciar IDirectMusicLoader Interface usada para carregar os arquivos MIDI na mem ria No MRDX ela instanciada na fun o Directx Iniciar e usada na fun o Carregar Midi IDirectMusicSegment Um segmento representa os dados de um arquivo de m sica MIDI IDirectMusicSegmentState Cont m informa es relacionadas ao estado atual de um segmento de m sica 72 ANEXO 3 CONFIGURA ES DO VISUAL C a Para adicionar os diret rios pastas
25. 1 int x2 int y2 int cor Coment rios Desenha um ret ngulo que come a em x1 y1 e termina em x2 y2 preenchido com a cor especificada Exemplo Desenhar Retangulo 100 100 200 200 VERMELHO Prot tipo int Escreve Texto char texto int x int y int cor Coment rios Escreve o texto na posi o especificada Se for preciso escrever valores de vari veis utiliza se a fun o sprintf para construir o texto esperado depois passa se este texto como par metro para Escreve Texto y Exemplo Escreve Texto Funciona 100 100 BRANCO 21 Para escrever vari veis use char texto 80 int pontos 10 sprintf texto Pontos d pontos Escreve_Texto texto 100 100 BRANCO Finalmente h uma fun o para finalizar o jogo e outra que lida com n meros aleat rios um recurso muito utilizado em jogos Prot tipo int Finalizar Jogo void Coment rios Encerra a aplica o aconselh vel que ap s a chamada a esta fun o o programa saia de Jogo Main utilizando um return pois Finalizar Jogo n o encerra imediatamente a aplica o o que ela faz mandar uma mensagem para o Windows solicitando o fim da aplica o Exemplo Finalizar Jogo return Prot tipo int Aleatorio int min int max Coment rios Retorna um n mero aleat rio entre min e max inclusive Exemplo int valor valor Aleatorio 1 6 A seguir est um exemplo de c digo utilizando o MRDX que cri
26. 480 com palheta de 256 cores Ele reserva as primeiras oito posi es 0 a 7 para algumas cores b sicas que s o PRETO BRANCO VERDE AZUL VERMELHO AMARELO CINZA ROXO Ent o n o utilize estas posi es quando fizer os seus bitmaps Para utilizar a transpar ncia basta utilizar nos desenhos a cor de ndice zero nas partes que n o devem ser desenhadas Todos os bitmaps de um jogo feito no MRDX devem estar usando a mesma palheta de cores pois apenas uma palheta fica ativa no jogo As imagens s o obtidas a partir de arquivos bitmaps E comum que em um nico arquivo bitmap haja diversas sub imagens de mesmo tamanho como na ilustra o a seguir 7 7 7 7 5 H a gt A 2 ds dA a VOO b dh dh db dh dh db dh d Figura 3 1 Sub imagens em um bitmap 14 As fun es que lidam com os arquivos bitmaps e a estrutura IMAGEM est o descritos a seguir Prot tipo int Carregar Bitmap char nome arq Coment rios L um arquivo do tipo bitmap sem compress o de 256 cores e carrega na mem ria A cada chamada ele substituir o bitmap anterior pelo que est sendo carregado no momento Exemplo Carregar Bitmap arte bmp Prot tipo int Criar Imagem IMAGEM amp imagem int largura int altura int num quadros Coment rios Aloca mem ria para uma vari vel do tipo IMAGEM O par metro num quadros especifica o n mero de quadros de imagens que ser o utilizados Exemplo IM
27. AGEM jogador Criar Imagem jogador 32 32 4 tamanho 32x32 e num quadros 4 Prot tipo int Destruir Imagem IMAGEM amp imagem Coment rios Libera a mem ria alocada por uma vari vel do tipo IMAGEM Fa a isso quando estiver finalizando seu programa Exemplo Destruir Imagem jogador Prot tipo int Carregar Quadro IMAGEM amp imagem int quadro int cx int cy Coment rios Carrega um quadro em uma vari vel IMAGEM a partir de um bitmap previamente carregado na mem ria O par metro quadro indica a posi o em que deve ser carregado o quadro na vari vel IMAGEM O bitmap deve estar com imagens do mesmo tamanho Os par metros cx e cy indica as coordenadas no bitmap do local onde est o quadro desejado Por exemplo se tivermos um bitmap com dois quadros de imagem um ao lado do outro as coordenadas desses quadros ser o 0 0 e 1 0 Exemplo Carregar Bitmap arte bmp Criar Imagem jogador 32 32 2 2 quadros Carregar Quadro jogador 0 0 0 quadro 0 posi o 0 0 Carregar Quadro jogador 1 1 0 quadro 1 posi o 1 0 15 Prot tipo int Desenhar_Imagem IMAGEM amp imagem Coment rios Desenha uma IMAGEM na tela A fun o ir usar a posi o x y e o quadro atual da IMAGEM para o desenho Exemplo Desenhar Imagem jogador Prot tipo int Colisao Imagens IMAGEM amp imagem1 IMAGEM amp imagem2 Coment rios Retorna 1 se as duas IMAGENS estiverem se sobrepondo e
28. Desenha Mapa c digo 5 2 desenha o mapa na tela sendo que uma c lula da matriz representa uma posi o com tamanho de 32x32 pixels na tela void Desenha Mapa void int i j for i 0 i lt 15 i for j 0 j lt 15 j if mapa illj mapa_im x j 32 mapa_im y i 32 Desenhar Imagem mapa im C digo 5 2 Fun o Desenha Mapa O c digo de movimento do jogador dever levar em conta a dire o que se deseja ir e testar se n o h um obst culo que impe a o movimento O c digo 5 3 a parte que faz o teste de movimento quando o jogador quer se mover para cima As vari veis mapa x e mapa y representam a c lula da matriz que corresponde ao labirinto No movimento para cima preciso testar se estar livre tanto o lado esquerdo quanto o lado direito do sprite para poder ser executado o movimento A constante JOG VEL guarda o valor da velocidade na qual o jogador deve se mover a cada ciclo int mapa x mapa y Testar Tecla DIK UP OU Joy Cima mapa_y jogador y 32 topo mapa_x jogador x 32 lado esquerdo if mapa mapa_y mapa_x 0 mapa x jogador x 31 32 lado direito if mapa mapa_y mapa_x 0 jogador y jogador y JOG VEL C digo 5 3 Movimento para cima do jogador no labirinto 34 5 3 Controladores Al m da programa o dos sprites individuais em um jogo geralmente
29. Existem alguns casos de sucesso comercial como o da empresa Continuum CON2004 que lan ou o jogo Outlive Alguns eventos de grande porte voltado especificamente para jogos j foram realizados como o Wjogos Workshop Brasileiro de Jogos e Entretenimento Digital WJO2004 e o IN2Games Congresso Internacional de Inova o em Jogos para Computadores IN22004 At cursos universit rios t m sido criados para atender esta demanda Os principais s o P s Gradua o em Desenvolvimento de jogos para Computadores Unicenp PR Gradua o em Design e Planejamento de Games Anhembi Morumbi Curso de Extens o em Desenvolvimento e Design de Jogos 3D PUC RJ O anexo 1 deste trabalho possui mais informa es sobre estes cursos O autor possui uma p gina de jogos ROM2004 onde publica os seus trabalhos O trabalho principal o MRDX que uma biblioteca para desenvolvimento de jogos 2D em C C para DirectX Ele foi apresentado no 1 Workshop Brasileiro de Jogos e Entretenimento Digital WJO2004 que ocorreu em Fortaleza CE no dia 10 de outubro de 2003 O MRDX ser a base para o desenvolvimento deste TCC Todos os programas citados no decorrer deste trabalho est o dispon veis na p gina de jogos ROM2004 A linguagem utilizada nos programas deste TCC a C C Segundo Hattan HAT2004 esta ainda a linguagem padr o usada no desenvolvimento de jogos profissionais para o PC e videogames O leitor interessado em uma revis o
30. IDI Exemplo Parar Midi som mid Prot tipo int Midi Tocando int id Coment rios Retorna 1 se o som MIDI estiver tocando Exemplo if Midi Tocando som mid 20 3 5 Recursos adicionais Para fazer o controle da velocidade do jogo o MRDX disponibiliza as fun es Iniciar Relogio e Esperar Relogio Antes da execu o do c digo principal deve ser chamada a fun o Iniciar Relogio para que seja inicializado um contador interno do MRDX no final do c digo ser chamada a fun o Esperar Relogio e passado como par metro a quantidade de milisegundos que um ciclo deve durar Prot tipo int Iniciar Relogio void Coment rios Inicia um contador interno do MRDX usado em conjunto com a fun o Esperar Relogio Exemplo Iniciar Relogio Prot tipo int Esperar Relogio unsigned int tempo espera Coment rios Deve se enviar como par metro o tempo em milisegundos que a fun o deve esperar Este tempo contado a partir da ltima chamada de Iniciar Relogio Estas fun es s o usadas para que o jogo seja mantido em uma velocidade fixa Um valor comum de 40 milisegundos que equivalente a 25 quadros por segundo Exemplo Iniciar Relogio Processar jogo Esperar Relogio 40 O MRDX disponibiliza duas outras fun es de desenho uma para desenhar ret ngulos e a outra para escrever textos na tela Prot tipo int Desenhar Retangulo int x1 int y
31. T e glutInitDisplayMode GLUT DOUBLE GLUT RGB GLUT DEPTH Indica o modo de exibi o que ser usado no programa Neste exemplo est sendo criado buffer duplo para o desenho GLUT DOUBLE o sistema de cores usado o RGB GLUT RGB e o buffer de profundidade GLUT DEPTH que serve para ordenar os objetos na renderiza o est sendo usado e glutCreateWindow Labirinto 3D Este comando cria a janela do programa com o t tulo de Labirinto 3D e glutFuliScreen Especifica que o programa deve ser executado em modo de tela cheia e Inicializa Esta fun o definida em outra parte do programa Nela s o feitas as inicializa es do OpenGL e do programa em si e glutDisplayFunc display Indica qual a fun o que ser usada para a renderiza o e glutKeyboardFunc Keyboard Function Indica a fun o usada para a leitura de teclas convencionais que tem um valor ASCII associado e glutSpecialFunc Special Function Indica a fun o usada para a leitura das teclas especiais tais como as setas e teclas de fun o F1 F2 e glutldleFunc Move Esfera Indica a fun o que dever ser chamada constantemente durante a execu o do programa e glutMainLoop Esta fun o processa todos os eventos que ocorrem enquanto seu programa est rodando como mensagens enviadas pelo sistema operacional e teclas pressionadas 8 2 Movimenta o 3D Existem dois conceitos essenciais necess rios para que s
32. UNIVERSIDADE FEDERAL DO PAR CENTRO DE CI NCIAS EXATAS E NATURAIS BACHARELADO EM CI NCIA DA COMPUTA O Marcos Romero Gonzaga de Almeida PROGRAMA O DE JOGOS 2D USANDO O MRDX E FUNDAMENTOS DE JOGOS 3D Bel m PA 2004 UNIVERSIDADE FEDERAL DO PAR CENTRO DE CI NCIAS EXATAS E NATURAIS BACHARELADO EM CI NCIA DA COMPUTA O Marcos Romero Gonzaga de Almeida PROGRAMA O DE JOGOS 2D USANDO O MRDX E FUNDAMENTOS DE JOGOS 3D Trabalho de Conclus o de Curso apresentado para obten o do grau de Bacharel em Ci ncia da Computa o Orientador Prof Dr Eloi Favero Bel m PA 2004 PROGRAMA O DE JOGOS 2D USANDO O MRDX E FUNDAMENTOS DE JOGOS 3D Este trabalho foi julgado em pela banca examinadora que atribuiu o conceito Prof Dr Eloi Favero ORIENTADOR MEMBRO DA BANCA EXAMINADORA MEMBRO DA BANCA EXAMINADORA Agrade o aos meus pais por todo o apoio que eles t m me dado para a realiza o de meus sonhos UM RIO AB SRA Coal rs o araras en POSE AS RD DA A a a a TAN 5 ye 2 A HISTORIA DOS VIDEOGAMES mera east nana 8 4 CILOS sonoros e MUSICAS ccccccccccccccccccccccccceccecccessecscceseeccesses 3 5 Recursos LEONG OU CUS ri ii ceva isto gale anh erra ra ei 20 A ESTRUTURA DE UM JOGO ds na ER wer eae a E ar CN 23 2 5 TECNICAS DE JOGOS SA D PERPE en ETRE EES SR AEE N ee 31 5 21 I A iri 32 A nte a o COM O Cendrio cceceeeerererrerer renan re
33. a por em pr tica essas no es de mapas de tiles ser definida uma classe que executa alguns servi os b sicos que s o necess rios para a programa o de mapas em jogos 2D O objetivo n o de criar uma classe gen rica para ser usado em qualquer jogo 2D mas sim demonstrar um exemplo de f cil entendimento para que seja usada como base para a constru o de uma classe de mapas que satisfa a suas necessidades 44 Nesta classe j est o predefinidos em constantes o tamanho do bloco e a altura e largura do mapa Ele possui duas camadas para desenho e a op o para atribui o e leitura de valores de uma determinada posi o do mapa J existe um m todo que desenha o mapa na tela e o mapa pode ser salvo em arquivo para ser recuperado posteriormente A classe n o guarda informa es adicionais para os blocos para o processamento de colis o O arquivo cabe alho da classe chamado CMapa h est exposto no c digo 7 1 define CMAPA LARGURA 14 define CMAPA ALTURA 14 define TAM BLOCO 32 define NUM_TILES 48 class CMapa public void Carregar void void Salvar void void Atribuir Imagem Base IMAGEM amp im void Atribuir Imagem Objetos IMAGEM amp im void Atribuir int camada int cel x int cel y int valor int Ler int camada int cel x int cel y void Desenhar int x int y protected int mapa base CMAPA LARGURA CMAPA ALTURA int mapa objetos JCMAPA LARGURA CMAPA ALTURA IMAGEM im
34. a uma vari vel do tipo IMAGEM carrega um quadro de imagem faz com que essa IMAGEM se mova de acordo com os movimentos do mouse em seguida ele carrega um som WAV que tocado quando o bot o esquerdo do mouse for pressionado Se for pressionada a tecla ESC o jogo finalizado include mrdx h IMAGEM jogador int inicio 1 int som_wav void Jogo_Main void if inicio 1 inicio 0 Carregar_Bitmap arte bmp Criar_Imagem jogador 32 32 1 10 Carregar Quadro jogador 0 0 0 11 som wav Carregar Wav bip wav 12 13 if Testar Tecla DIK ESCAPE 14 Destruir Imagem jogador 15 Finalizar Jogo DC NON AtWAV N 22 16 return 17 18 Iniciar Relogio 19 Limpar Tela 20 jogador x Mouse Xvar 21 jogador y Mouse Yvar 22 if Mouse Bot Esquerdo 23 Tocar Wav som wav 24 Desenhar Imagem jogador 25 Mostrar Tela 26 Esperar Relogio 40 27 C digo 3 1 Exemplo de uso do MRDX As linhas 2 at 4 definem tr s vari veis Na linha 2 a vari vel jogador do tipo IMAGEM representa um sprite que movido e desenhado na tela Na linha 3 a vari vel inicio usada para garantir que o bloco de inicializa o do jogo seja executado uma nica vez Na linha 4 a vari vel som wav define um identificador que ser usado para manipular um som de formato WAV Os c digos que est o entre as linhas 6 e 12 representam o bloco de inicializa
35. ados a varia o da posi o do mouse em rela o a sua ltima posi o Prot tipo int Mouse Xvar void Coment rios Retorna a varia o da posi o do mouse no eixo X desde o ltimo ciclo do jogo Exemplo jogador x Mouse Xvar move jogador no eixo de X Prot tipo int Mouse Yvar void Coment rios Retorna a varia o da posi o do mouse no eixo Y desde o ltimo ciclo do jogo Exemplo jogador y Mouse Yvar move jogador no eixo de Y Prot tipo int Mouse Bot Esquerdo void Coment rios Retorna 1 se o bot o esquerdo do mouse estiver pressionado Exemplo if Mouse Bot Esquerdo Prot tipo int Mouse Bot Direito void Coment rios Retorna 1 se o bot o direito do Mouse estiver pressionado Exemplo if Mouse Bot Direito O MRDX permite que seja verificado se h algum joystick dispon vel no computador Na leitura dos movimentos no joystick assumido um valor booleano para indicar se o Jogador est pressionando em alguma das dire es As seguintes fun es gerenciam a entrada do joystick 17 Prot tipo int Joy Cima void Coment rios Retorna 1 se o joystick estiver sendo pressionado para cima Exemplo if Joy Cima jogador y 4 move jogador para cima Prot tipo int Joy Baixo void Coment rios Retorna 1 se o joystick estiver sendo pressionado para baixo Exemplo if Joy Baixo jogador y 4 move jogador para baixo Prot tipo int
36. al sem o uso de bibliotecas ou recursos que encapsulam as funcionalidades b sicas do sistema O objetivo programar para windows conhecendo as estruturas internas deste sistema operacional Uso avan ado das APIs Windows Otimiza o de C digo Assembler Inline T cnicas de Depura o e Profile Programa o direta de Hardware 64 Programa o com DirectX Introdu o O que DirectX Porque usar DirectX Aplica o B sica usando DirectX Entrada de Dados com DirectInput Modos de V deo Parametrizando aplica es No es de DirectAudio e DirectVideo Programa o em 3D com DirectX Introdu o ao Direct3D Inicializa o do Direct3D Transforma es Luzes Texturas Efeitos Especiais Detec o de Colis o Objetos Complexos e Anima o Programa o em 3D com OpenGL Introdu o ao OpenGL Aplica o B sica com OpenGL Desenhando Objetos Simples Manipulando Objetos Luzes Texturas Efeitos Especiais Objetos Complexos e Anima o Programa o com DirectX Network e Internet Introdu o ao DirectPlay Sess es Lobbies Enviando e Recebendo Dados T cnicas de Comunica o Estudo de Caso 65 e Design e Planejamento de Games Anhembi Morumbi Gradua o Link http www anhembi br portal nossa u cursos grad mod zip cur design plan htm Acesso em janeiro de 2004 Dura o 4 anos Proposta Formar profissionais para o desenvolvimento de games nos seus mais variados f
37. am de palheta tal como o de 256 cores usado pelo MRDX No MRDX ela tamb m instanciada na fun o Directx Iniciar Toda vez que um arquivo bitmap carregado na mem ria atrav s da fun o Carregar Bitmap y a palheta que est presente no bitmap passa a ser a palheta atual 70 e IDirectDrawClipper Usada para que sejam cortadas as partes das imagens que estiverem fora da rea especificada para desenho O MRDX define uma nica rea de clipper corte atrav s da fun o Anexar Clipper que representa toda a tela de v deo e IDirectDrawSurface As superf cies representam as imagens que ser o manipuladas pelo DirectDraw A superf cie prim ria equivale rea da mem ria que est sendo mostrada na tela de v deo A superf cie secund ria tem as mesmas caracter sticas da superf cie prim ria sendo usada para a prepara o do pr ximo quadro do jogo Depois que o quadro estiver pronto feito uma troca entre as superf cies de forma que a superf cie secund ria passa ser a superf cie prim ria mostrando o conte do do quadro atual na tela de v deo Esta opera o feita no MRDX atrav s da fun o Mostrar Tela As superf cies tamb m s o usadas para armazenar os desenhos dos diversos objetos do jogo A estrutura IMAGEM do MRDX possui uma matriz de superf cies que usada para armazenar os v rios quadros dos personagens de um jogo c DirectInput O DirectInput com
38. bastante em sua rede online chamada Xbox Live 10 3 CONHECENDO O MRDX Neste cap tulo ser demonstrada a forma de utiliza o do MRDX O entendimento deste cap tulo importante para o acompanhamento deste TCC pois os programas desenvolvidos nos cap tulos seguintes s o baseados no MRDX 3 1 No es preliminares O desenvolvimento de um jogo envolve v rios desafios de programa o entre eles e conhecimento profundo de tecnologia de ponta sobre bibliotecas gr ficas de sons entre outras e dom nio de t cnicas de programa o para abordar diversas dimens es ortogonais de um jogo por exemplo linha de tempo ciclo de eventos manipula o de imagem e som intera o com o usu rio e complexidade no desenvolvimento de programas grandes Com o objetivo de enfrentar de forma sistem tica estes desafios de programa o pr tica corrente o desenvolvimento de bibliotecas como motores de jogos O uso de uma biblioteca cria um conjunto b sico de servi os comuns permitindo ao programador se concentrar nos aspectos criativos da programa o de jogos dando uma maior qualidade e maior produtividade no seu desenvolvimento Neste trabalho apresenta se uma biblioteca para programa o de jogos chamado MRDX para a plataforma Windows com DirectX Este motor de jogos tem dois objetivos 1 facilitar o desenvolvimento de jogos 2 ser adequado para o ensino de programa o de Jogos O MRDX definido como
39. cios e Princ pios Matem ticos para Desenvolvimento de jogos 3D Teoria da Computa o Gr fica e Princ pios de programa o em C C e API s Gr ficas Introdu o a OpenGL Direct X e T picos de Intelig ncia Artificial e T picos de Sistemas Distribu dos Paradigmas de Jogos Multi Jogador Ponto a Ponto x Cliente Servidor Servidores de Jogos Clientes de Jogos Compacta o Servidores Mestre para Jogos Multi Jogador na Internet Direct Play e Princ pios de Design para Jogos Conceitua o de cen rios e personagens storyboards e Interface para Jogos e 3DS MAX cen rios est ticos e personagens e Produ o de udio e V deo para Jogos e Arquitetura de Engines e Engines Fly3D 3D Game Studio Discreet GMAX e Games com Flash MX 67 ANEXO 2 A IMPLEMENTA O DO MRDX O MRDX foi desenvolvido usando a linguagem C C SCH1988 DAV 1995 Ele est dividido em dois arquivos mrdx h e mrdx cpp O arquivo mrdx h conhecido como arquivo cabe alho e possui os prot tipos das fun es do MRDX e as defini es de constantes e de algumas estruturas de dados O arquivo mrdx cpp possui a defini o de vari veis de m dulo e das fun es do MRDX Para que seja entendida a forma como o MRDX foi desenvolvido preciso conhecer algumas caracter sticas que programas para o sistema operacional Windows devem ter e os fundamentos da biblioteca de programa o de jogos da Mic
40. das bibliotecas do DirectX acesse o menu Tools 2 Options 2 Directories Selecione Include files e coloque o diret rio progjogos dxsdk include Figura A3 1 Selecione Library files e coloque o diret rio progjogos dxsdk lib Figura A3 2 Lj Options Editor Tabs Debug Compatibility Build Directories Platform Show directories for win32 Include files Directories E Progjogos Dxsdk include d ADevS tudiotyCYNCLUDE d DevStudio S C MFC include d DevStudio VCAT L include Cancel Figura A3 1 Pasta dos arquivos com cabe alhos do DirectX Ei ES Options Editor Tabs Debug Compatibility Build Directories i Platform Show directories for win32 z Library files e Directories E Progjogos Dxsdk lib d DevStudio VCLIB d DevStudio C MFC lib F ADEYSTUDIONYCALIB F DEYSTUDIONVC MFC ib Cancel Figura A3 2 Pasta dos arquivos com bibliotecas do DirectX 73 b Para adicionar as bibliotecas do DirectX em um projeto no Visual C acesse o menu Project gt Settings gt Link gt Object Library modules Ent o acrescente os seguintes nomes de arquivos ddraw lib dsound lib dinput lib dxguid lib winmm lib Figura A3 3 Project Settings EEB comp art comp som Lista som map edit ddraw lib dsound lib dinput lib dxguid hb winmm lib kernel32 lib user32 lib gdi32 lib winspool lib comdlg32 lib
41. e MRDX which is a library for game programming propose by this work It shows the structure of a game and the fundamentals related such as sprites interaction with the scenario and controllers the topics of animation and maps edition are shown too The MRDX developed by the author in C C for DirectX is a set of high level functions which simplifies the task of game creation allowing an economic and fast development of a game being valuable for teaching game programming The 3D techniques are present based on the OpenGL library showing a case study with a didactic example Keywords game programming 2D games DirectX animation maps editor game engine 3D games OpenGL 1 INTRODU O Atualmente em 2004 a ind stria de jogos tem um movimento financeiro maior do que a ind stria cinematogr fica Ela cresceu de tal forma que para o desenvolvimento de um Jogo profissional s o necess rios centenas de participantes milhares de d lares e cerca de tr s anos para a conclus o do projeto O mercado de jogos concentra se principalmente nos jogos para PC e para os videogames como o Playstation 2 da Sony Gamecube da Nintendo e o Xbox da Microsoft H tamb m as plataformas alternativas como a Internet e os dispositivos m veis O livro de Saltzman SAL2000 uma boa fonte de consulta para se conhecer as principais empresas atuantes no mercado de jogos O Brasil tem se organizado para correr atr s deste disputad ssimo mercado
42. eja entendida a movimenta o em um mundo virtual 3D o ponto de vista e o corpo O ponto de vista uma esp cie de olho no mundo virtual Os movimentos que modificam o ponto de vista s o conhecidos como angulares e n o alteram a posi o em que se encontra o ponto de vista no mundo 3D 53 Segundo Gradecki GRA 1995 s o tr s os movimentos angulares Guinada Arfada e Rolamento Para olhar alguma coisa esquerda ou direta a cabe a vira nesta dire o este o movimento chamado de guinada O movimento de arfada quando se olha para cima ou para baixo Finalmente o rolamento equivale inclina o da cabe a para esquerda ou para direita Os movimentos associados ao corpo permitem que o ponto de vista seja deslocado para qualquer outro local do mundo virtual A execu o do movimento consiste na altera o das coordenadas x y z que s o usadas para definir a posi o do corpo no mundo tridimensional Na pr tica os movimentos mais usados s o o de guinada e deslocamento para frente ou para tr s em uma determinada dire o Para a implementa o destes movimentos necess ria uma vari vel que guarde o ngulo indicando a dire o para onde o jogador est apontando preciso tamb m armazenar o valor do passo que o jogador se move Isto lembra o sistema polar de coordenadas por m nos programas utiliza se o sistema cartesiano de coordenadas sendo necess rio a convers o destes valores conforme a figura 8
43. este jogo figura 5 1 e t cnicas gerais usadas em jogos 2D Para mais informa o sobre t cnicas de jogos 2D sugere se o livro de Gruber GRU1994 ss mm Figura 5 1 Um jogo de labirinto com o MRDX 5 1 Sprites Nos jogos 2D muito utilizado o termo sprite Sprites s o os personagens que aparecem no jogo que interagem uns com os outros e com o cen rio Eles podem correr pular voar nadar lutar e atirar Geralmente o jogo fornece um sprite que representa o personagem principal controlado pelo jogador Os outros sprites podem ser monstros e inimigos que perseguem o jogador ou objetos que o jogador pode pegar tal como moedas e armas Em v rios jogos diferentes sprites s o introduzidos medida que o jogador vai avan ando no jogo de tal forma que prende a aten o do jogador por estar sempre encontrando novidades Um jogo dividido em v rias fases e cada fase tem um tema predominante que ir determinar o conjunto de sprites usados por exemplo podem se ter fases ambientadas no deserto floresta cavernas e oceano 32 A parte mais desafiadora de programar os sprites est relacionada anima o Um sprite pode executar diversos tipos de movimentos que devem ser representados visualmente para dar mais realismo ao jogo Desta forma a estrutura de dados que representa os sprites deve permitir que v rios quadros sejam armazenados para que seja poss vel escolher no decorrer do jogo qual o quadro que
44. ho livre IGUAL 0 monstros i dados DIR dir Mif Desenhar_Imagem monstros i C digo 5 4 Fun o Monstros 36 6 ANIMA O Nesta parte explorado o tema de anima o S o apresentadas no es b sicas e uma classe que facilita a programa o da anima o Finalmente feito um estudo de caso do uso da classe proposta para anima o 6 1 No es B sicas Para a produ o de anima es em jogos 2D preciso armazenar todos os quadros que ser o utilizados de forma semelhante um desenho animado figura 6 1 A estrutura IMAGEM tem espa o para armazenar at 128 quadros por vari vel O campo de IMAGEM que indica o quadro corrente o quadro atual Ent o basta alterar o valor dessa vari vel para que outro quadro seja desenhado na tela AKAANSSAKAAS 1 12 Figura 6 1 Uma anima o composta por v rios quadros A seguir explicam se alguns casos de anima es come ando pelo mais simples Considera se que haja uma vari vel do tipo IMAGEM chamada jogador nos exemplos 1 Caso Animar os quadros de uma IMAGEM na segii ncia em que eles est o armazenados C digo 6 1 utilizada uma vari vel anim cont que ir contar o n mero de ciclos desde o ltimo quadro selecionado Quando este valor for igual a 3 n de quadros de espera ent o ser passado para o pr ximo quadro Se passar do ltimo quadro ent o retorna ao primeiro quadro no co
45. i lan ado em 1977 mas se popularizou em 1980 quando come ou a trazer os jogos de fliperamas como o Space Invaders para seu sistema e Microcomputadores A revolu o dos microcomputadores pessoais foi iniciada pelo Apple e seguido por diversos outros como o ZX Spectrum Commodore 64 TRS 80 e MSX O principal tipo de aplica o destes sistemas eram os jogos e A gera o de 8 bits A Nintendo entrou no mercado de videogames com o NES Nintendo Entertainment System que era um excelente produto a um pre o bem acess vel No Brasil havia os compat veis como o Phantom System e o Dynavision A Sega veio em seguida com o Master System para concorrer com o NES No Brasil a Sega representada pela Tec Toy e A gera o de 16 bits A Sega saiu na frente na corrida dos 16 bits com o lan amento do Mega Drive A Nintendo surgiu depois com o Super Nintendo e fez muito sucesso com o jogo Street Fighter IT da Capcom Havia tamb m o Neo Geo da SNK que era bem superior por m tinha um custo muito elevado e 32 bits e o CD ROM A Panasonic lan ou o 3DO mas n o obteve sucesso A Sega investiu no Saturn mas tamb m n o teve sucesso Um dos motivos diz respeito dificuldade de desenvolvimento A Sony entrou no mercado com o Playstation que teve uma grande aceita o e se tornou um dos videogames mais vendidos da hist ria e A gera o de 64 bits A Atari pretendia retornar ao mercado de jogos de uma fo
46. inicializa numeros aleatorios srand GetTickCount posicao inicial da esfera g esfera x pos 3 TAM BLOCO g esfera z pos TAM BLOCO g esfera dir LESTE C digo 8 6 Fun o Inicializa Finalmente a fun o display c digo 8 7 renderiza todos os objetos na tela A posi o da c mera ajustada de acordo com a posi o do jogador Um plano verde representando o solo desenhado a partir do uso de primitivas do OpenGL A esfera desenhada atrav s da fun o glutSolidSphere O labirinto desenhado bloco a bloco depois de verificar se na posi o correspondente da matriz existe o valor 1 58 void display void int x Z int x_mun z_mun Nimpa todos os pixels glClear GL_COLOR_BUFFER_BIT GL_DEPTH_BUFFER_BIT glLoadldentity camera gluLookAt jog x 25 jog_z jog_x mov_x 25 jog_z mov_z 0 1 0 plano glPushMatrix giMaterialfv GL FRONT GL AMBIENT AND DIFFUSE mat verde glBegin GL QUADS glVertex3f 10000 TAM BLOCO 2 10000 glVertex3f 10000 TAM BLOCO 2 10000 elVertex3f 10000 TAM BLOCO 2 10000 glVertex3f 10000 TAM BLOCO 2 10000 glEnd glPopMatrix desenha esfera glPushMatrix glMaterialfv GL_FRONT GL AMBIENT AND DIFFUSE mat vermelho giMaterialfv GL FRONT GL SPECULAR mat specular giMaterialfv GL FRONT GL SHININESS mat shininess glTranslatefig esfera x pos 5 g esfera z pos glutS
47. ira 0 0 0 carregar som musica_mid Carregar_Midi arpe mid bip_wav Carregar_Wav bip wav menu 1 ir p menu C digo 4 2 Fun o Jogo_Inicio 26 4 3 Etapas Adicionais Existem outras etapas do jogo que s o representadas por fun es neste exemplo mostra se a finaliza o o menu e uma fun o para reinicializar os dados do jogo quando uma nova partida for solicitada A fun o do c digo 4 3 respons vel pela finaliza o H a libera o da mem ria alocada pelas vari veis do tipo IMAGEM atrav s da fun o Destruir Imagem Depois chamada a fun o do MRDX que finaliza o jogo void Jogo Fim void Niberar mem ria das imagens Destruir_Imagem jogador Destruir_Imagem bandeira for i 0 i lt MAX CARROS i Finalizar_Jogo Destruir_Imagem carros i C digo 4 3 Fun o Jogo Fim A fun o Menu c digo 4 4 apenas escreve na tela o menu e testa se o jogador pressionou ENTER para come ar uma nova partida void Menu void Escreve_Texto ENTER Iniciar 200 100 BRANCO Escreve Texto ESC Sair 200 150 BRANCO if Testar_Tecla DIK_RETURN menu 0 Novo_Jogo C digo 4 4 Fun o Menu A fun o Novo Jogo c digo 4 5 reinicia os valores do jogo para uma nova partida Coloca o estado da bandeira e dos carros em INATIVO move o jogador para posi o inicial e
48. iro de 2004 Objetivos do Curso Formar profissionais capazes de desenvolver jogos para computador levando em considera o tanto a an lise quanto a programa o Fornecer uma forte base de programa o em C C para Windows com a utiliza o da biblioteca de jogos DirectX Apresentar aspectos modernos da constru o de jogos como game design t cnicas de intelig ncia artificial e programa o avan ada Ementa Grupo I Gerenciais Empreendedorismo Mercado de trabalho emprego e trabalho O empreendedor Gera o da id ia de um novo neg cio Valida o da id ia An lises preliminares Escala e recursos Projeto de produto Plano de Marketing Tecnologia e produ o Plano de Opera es Plano de Finan as Cria o e legaliza o do neg cio Gerenciamento de Equipes de Jogos Bons tempos aqueles em que apenas uma boa id ia bastava Uma pessoa era o roteirista designer ilustrador programador e para encerrar o respons vel pelos testes Hoje n o poss vel pensar em um jogo sem a forma o de uma equipe Quem vai gerenciar esta equipe Afinal desenvolvimento de jogos um neg cio e como tal possui prazos or amento relat rio para os investidores etc O foco desta disciplina o gerenciamento mais especificamente o gerenciamento de equipes de jogos Grupo II Projeto e Modelagem An lise e Projeto de Sistemas OO com UML UML RUP Design Patterns Ferramentas CASE Especifica o de Si
49. l pelos efeitos especiais vistos em filmes como Exterminador do Futuro 2 e Parque dos Dinossauros Desde 1992 o OpenGL tem sido mantido pelo OpenGL Architecture Review Board OPE2004 que composto por grandes empresas como a Compaq IBM Intel Microsoft HP nVidia e diversas outras O OpenGL multiplataforma estando dispon vel em todos os principais sistemas operacionais como o Windows e Linux e ambientes de desenvolvimento como C C Delphi e Java Ele foi projetado para renderiza es 3D com acelera o de hardware Atualmente placas gr ficas para PC como a NVIDIA GeForce processa comandos de OpenGL diretamente no hardware Diversos jogos profissionais utilizam o OpenGL para a renderiza o tais como os jogos da s rie Quake O livro de Hawkins HAW2001 um excelente guia para o uso de OpenGL na programa o de jogos 3D Como o OpenGL trabalha principalmente com a defini o de primitivas para a constru o de ambientes 3D surgiu a necessidade de se implementar bibliotecas auxiliares para facilitar a programa o As duas principais est o comentadas a seguir 1 GLU OpenGL Utility Library suplementa o OpenGL fornecendo fun es de alto n vel para a execu o de certas tarefas tais como o controle de c mera manipula o das matrizes de proje o e de orienta o da visualiza o suporte para superf cies curvas e defini o de objetos 3D como esferas e cilindros 2 GLUT OpenGL Utility Toolkit
50. me o do c digo defini o das vari veis int anim cont 0 No Jogo Main aumenta anim cont e testa se alcan ou o valor de espera anim cont if anim_cont 3 anim_cont 0 reinicia anim_cont jogador quadro atual passa para o pr ximo quadro 37 testa se passou do ltimo quadro Se verdadeiro ent o zera quadro atual ifJogador quadro atual jogador num quadros jogador quadro atual 0 Desenhar_Imagem jogador C digo 6 1 Alterna os quadros de uma IMAGEM 2 Caso Anima o baseada em uma matriz que cont m as segii ncias dos quadros c digo 6 2 Existe uma matriz com os n meros dos quadros da anima o E preciso uma vari vel chamada anim_ind que mant m o ndice do quadro de anima o atual A anima o reiniciada quando passar o ltimo ndice da matriz no come o do c digo defini o da matriz e vari veis int anim_seq 6 0 1 2 3 2 1 seqiiencia de quadros int anim cont 0 int anim ind 0 ndice da matriz no Jogo Main aumenta anim cont e testa se alcan ou o valor de espera anim cont if anim_cont 3 anim_cont 0 anim_ind passa para o pr ximo quadro if anim ind 6 anim_ind 0 Se passou ltimo ndice ent o reinicia jogador quadro atual anim_seq anim_ind pegar o quadro atual na matriz Desenhar Imagem jogador C digo 6 2 Anima o baseada em uma matriz 3
51. modo bin rio p escrita if fp fopen mapa rhg wb NULL for cel_x 0 cel x lt CMAPA_LARGURA cel_x for cel_y 0 cel_y lt CMAPA_ALTURA cel_y putw mapa_base cel_x cel_y fp putw mapa_objetos cel_x cel_y fp fechar arquivo fclose fp C digo 7 5 M todo Salvar 47 7 3 O Editor Figura 7 3 Um simples editor de mapas Baseado na classe CMapa descrita no item anterior constru do um simples editor figura 7 3 para a cria o de cen rios A edi o feita atrav s do mouse e a tecla control serve para alternar entre as camadas O c digo do editor encontra se no arquivo editor cpp Nele s o definidos tr s vari veis do tipo IMAGEM sendo duas para guardar as imagens que ser o usadas pelas duas camadas do mapa e a outra usada como o cursor do programa Tamb m h a defini o de uma vari vel da classe CMapa c digo 7 6 IMAGEM objetos IMAGEM base IMAGEM cursor CMapa mapa C digo 7 6 Declara o das vari veis usadas no editor Na inicializa o s o carregadas as imagens do cursor e dos blocos que ser o usados no mapa Os blocos de cada camada est o organizados em um arquivo bitmap Cada camada possui 48 blocos que est o distribu dos como uma grade de 8 linhas por 6 colunas no bitmap Temos o c digo 7 7 de prepara o da vari vel IMAGEM que representa a camada base Al m disso in
52. necess rio o uso de controladores que servem para gerenciar um grupo de sprites Eles podem ser usados para determinar quando um sprite deve aparecer e tamb m podem ter informa es que n o pertencem a uma inst ncia em particular Este conceito muito utilizado em um ambiente orientado a objetos Um exemplo seria para organizar uma forma o de aeronaves Se for escolhida uma esp cie de sprite l der que os outros dever o seguir haver problema se este l der for eliminado no jogo pois os outros sprites ficar o literalmente perdidos pois n o ter o mais acesso aos dados de refer ncia que se encontrava no l der O ideal manter estes dados de refer ncia ao encargo de um controlador Como o exemplo do jogo de labirinto bem simples h uma fun o chamada Monstros c digo 5 4 que faz o papel de controlador de todos os monstros do jogo O controlador acessa a matriz que armazena os monstros e executa o c digo de movimento de cada um deles O n mero de monstros presentes na tela igual ao n mero do n vel do jogo Eles apenas se movimentam pelo labirinto de uma forma bem simples Basicamente ele escolhe uma dire o para se mover quando chega em uma c lula ele tende a manter a mesma dire o se estiver livre mas h uma chance que ele mude de dire o Quando houver mudan a de dire o ele escolhe uma aleatoriamente e testa se est livre o caminho se n o ent o escolhe outra dire o at encontrar uma liv
53. nhos feitos durante o quadro atual s o mostrados na tela 23 4 A ESTRUTURA DE UM JOGO Neste capitulo examina se a estrutura de um jogo simples desenvolvido com o MRDX Este jogo encontra se na pasta progjogos ex1 do MRDX Uma imagem da tela do jogo pode ser vista na figura 4 1 A medida que os jogos crescem em complexidade faz se necess rio uma maior formalidade na defini o da estrutura de um jogo O livro de Rollings ROL2000 prop e abordagens de Engenharia de Software voltadas para o desenvolvimento de jogos Figura 4 1 Um jogo usando o MRDX 4 1 O jogo e sua fun o principal Neste jogo o jogador controla um carro e deve pegar as bandeiras que aparecem na pista e desviar dos outros carros O jogador os carros e a bandeira s o vari veis do tipo IMAGEM definidas da seguinte forma define MAX CARROS 3 IMAGEM carros MAX CARROS IMAGEM jogador IMAGEM bandeira Os carros s o definidos na forma de matriz para que possam aparecer diversos carros simultaneamente na pista A fun o principal do jogo est listada no c digo 4 1 A partir dela que s o chamadas as outras fun es preciso efetuar a inicializa o do jogo carregar imagens e sons na primeira vez que executada Isto feito na fun o Jogo Inicio e usada uma vari vel chamada inicio para que esta fun o seja chamada apenas uma vez Depois disso iniciado o rel gio do MRDX em cada ciclo Se a tecla ESC for
54. o Nesta parte que s o carregados na mem ria todas as imagens e sons que ser o usados durante o jogo O comando condicional if inicio 1 usado para que o bloco de inicializa o seja executado uma nica vez O comando da linha 8 serve para carregar um bitmap na mem ria Os pr ximos dois comandos configuram a vari vel jogador que do tipo IMAGEM com o tamanho de 32x32 pixels e um quadro de imagem que carregado a partir do bitmap que est na mem ria Na linha 11 carregado um arquivo de som no formato WAV e o identificador que ser usado para manipul lo guardado na vari vel som wav As linhas de 13 a 17 s o o bloco de finaliza o que chamado quando a tecla ESC pressionada Antes de encerrar o programa preciso liberar a mem ria utilizada pelas vari veis do tipo IMAGEM isto feito na linha 14 O comando Iniciar Relogio que est linha 18 usado em conjunto com Esperar Relogio encontrado na linha 26 para determinar a velocidade que o jogo ir rodar Neste exemplo usado um valor de espera de 40 milisegundos para um quadro Isto significa que a velocidade do jogo de 25 quadros por segundo pois 40x25 1000 milisegundos ou 1 segundo As linhas de 20 a 23 fazem com que o jogador se mova de acordo com os movimentos do mouse e que um som seja tocado quando o bot o do mouse for pressionado Finalmente na linha 24 o jogador desenhado e em seguida todos os dese
55. olidSphere 20 20 16 glPopMatrix Nabirinto for x 0 x lt 15 x for z 0 z lt 15 z if mapa x z tem um bloco x_mun x TAM BLOCO z_mun z TAM_BLOCO 59 for cubo grande glPushMatrix glMaterialfv GL_FRONT GL AMBIENT AND DIFFUSE mat amarelo giMaterialfv GL FRONT GL SPECULAR mat specular giMaterialfv GL FRONT GL SHININESS mat shininess glTranslatef x_mun 5 7 mun if wire glutWireCube TAM BLOCO else glutSolidCube TAM BLOCO glPopMatrix Vif mapa x z for glutSwapBuffers C digo 8 7 Fun o display 60 9 CONCLUS O O desenvolvimento de jogos eletr nicos uma das atividades mais interessantes e mais complexas na rea da computa o pois integra os mais diversos assuntos como Computa o Gr fica Intelig ncia Artificial Sistemas Distribu dos Engenharia de Software Estrutura de Dados e Multim dia Os jogos podem motivar os estudantes a se interessarem pelas mais diversas mat rias que comp em um curso de Bacharelado em Ci ncia da Computa o Espera se que este TCC sirva como um est mulo para o desenvolvimento de outros trabalhos voltados para a programa o de jogos Principalmente em regi es onde ainda n o h empresas de jogos a Universidade deve desempenhar um papel fundamental incentivando pesquisas e promovendo discuss es para despertar a sociedade para o potencial da rea de jogos Como um
56. ono Exemplo int som_wav som_wav Carregar_Wav bip wav Prot tipo int Tocar_Wav int id int modo 0 Coment rios Toca um som wave que foi previamente carregado Para que o som fique repetindo passe como segundo par metro a palavra REPETIR Exemplo Tocar Wav som wav Tocar Wav som wav REPETIR Prot tipo int Parar Wav int id Coment rios P ra um som wave Exemplo Parar Wav som wav Prot tipo int Parar Todos Wav void Coment rios P ra todos os sons wave Exemplo Parar Todos Wav 19 Prot tipo int Wav Tocando int id Coment rios Retorna 1 se o som wave estiver tocando Exemplo if Wav Tocando som wav Os arquivos de sons no formato midi s o uma excelente op o para o uso de m sicas em jogos pois consegue armazenar m sicas com v rios minutos e dificilmente chega a ocupar 100Kb de mem ria O MRDX trata os arquivos midis da mesma maneira que os arquivos wave ou seja preciso armazenar um identificador para poder acessar as m sicas posteriormente Prot tipo int Carregar Midi char nome arg Coment rios Carrega um arquivo de som no formato MIDI e retorna um identificador que ser usado para manuse lo Exemplo int som mid som mid Carregar Midi musica mid Prot tipo int Tocar Midi int id Coment rios Toca um som MIDI que foi previamente carregado Exemplo Tocar Midi som mid Prot tipo int Parar Midi int id Coment rios P ra um som M
57. ormatos jogos de estrat gia a o aventura esporte e RPG para a aplica o em projetos de entretenimento cultura e arte experimenta o educa o e treinamento corporativo para diversas plataformas incluindo web e dispositivos m veis Mercado de Trabalho Nos ltimos anos com a crescente valoriza o do lazer os games adquiriram import ncia na ind stria de entretenimento Por m o mercado de trabalho para o profissional de design de games muito mais amplo Os jogos adquiriram import ncia em outras reas como na educa o cinema e televis o Al m disso s o utilizados em ambientes corporativos como ferramentas de motiva o treinamento e vendas O campo de atua o portanto bastante promissor O profissional pode atuar em empresas de desenvolvimento de games e softwares escrit rios de design portais e sites da internet e departamentos de treinamento e comunica o Forma o O curso prepara o aluno para desenvolver projetos de games a partir de uma s lida forma o nas disciplinas fundamentais no processo de cria o e planejamento de um jogo design de hiperm dia computa o gr fica l gica de programa o banco de dados redes de computadores roteiriza o estrat gia de jogos anima o multim dia linguagem sonora cinema e v deo hist ria em quadrinhos realidade virtual planejamento e custos Principais Disciplinas Fundamentos do Game Design Metodologia de Projeto
58. para Design de Games Linguagem de Programa o Anima o Laborat rio de Modelagem Roteiro Design de Som Gest o de Neg cios de Games Desenho Intelig ncia Artificial C lculo F sica Banco de Dados Redes de Computador Dire o de Arte Seguran a de Informa o Linguagem Visual Hist ria da Arte e Tecnologia 66 e Curso de Extens o em Desenvolvimento e Design de Jogos 3D PUC RJ Link http www cce puc rio br artes designjogos htm Acesso em janeiro de 2004 Carga Hor ria 135 horas Objetivo Permitir que o aluno desenvolva um jogo 3D para computadores utilizando as tecnologias mais atuais do mercado Introduzir o aluno aos principais conceitos de Computa o Gr fica Intelig ncia Artificial Sistemas Distribu dos e Design envolvidos em jogos Explorar o potencial criativo do aluno e trabalhar sua habilidade para criar roteiros projetar interfaces desenhar personagens cen rios e outros elementos que comp em um jogo 3D incluindo udio e Possibilitar ao aluno conhecer a din mica de uma equipe de desenvolvimento de Jogos atrav s de trabalhos pr ticos em uma equipe P blico Programadores designers estudantes entusiastas por games Programa e Introdu o Hist ria dos Jogos Tipos ou G neros de Jogos Arte Conceitual Partes de um Jogo Roteiro e Est ria Arte Motor e Mercado de Jogos Estudo do Mercado de Jogos nacional e internacional Tend ncias do mercado plano de neg
59. posto pelas seguintes interfaces e DirectInput Interface principal que deve ser instanciada para se trabalhar com DirectInput A partir dela que ser o solicitados os dispositivos de entrada e IDirectInputDevice Interface usada para a comunica o com os dispositivos de entrada Para cada dispositivo como teclado mouse e joystick ser associada uma TDirectInputDevice Todas as etapas de inicializa o do DirectInput e dos dispositivos de entrada s o realizadas na fun o Directx_Iniciar A leitura dos estados atuais dos dispositivos feita na fun o WinMain c digo A2 1 uma nica vez por quadro antes da chamada fun o principal do jogo Jogo Main Feita a leitura as informa es dos estados dos dispositivos ficam armazenadas em estruturas internas do MRDX espec ficas para cada dispositivo de forma que quando o programador for verificar algum tipo de entrada do jogador ser o consultadas apenas as estruturas internas do MRDX ao inv s de serem feitas chamadas ao hardware 71 d DirectSound e DirectMusic As principais interfaces do DirectSound s o IDirectSound Interface principal que deve ser instanciada para se trabalhar com do DirectSound Representa a placa de som No MRDX ela instanciada na fun o Directx Iniciar IDirectSoundBuffer Interface que representa os arquivos de sons Os buffers permitem que os sons sejam armazenados na mem
60. ra nac acerca aacana x 6 ANIMA O eirean snn En r eE E dion a A e i 36 6 1 No b si 36 6 2 Organizando em uma VEA OK Co ia AES E OOA SI a a 39 9 CONCEUS O eta da o a ab a REFER NCIAS BIBLIOGR FICAS ANEXO 1 CURSOS DE JOGOS vissrciccewessancostinedussdealsaeouaecntheoaiaeaniias ANEXO 2 A IMPLEMENTA O DO MRDX ossis ANEXO 3 CONFIGURA ES DO VISUAL C e A QNQGOA ANNAN NaNe OLNNOO RESUMO Neste trabalho apresentam se t cnicas de programa o de jogos 2D e 3D As t cnicas 2D s o apresentadas com base no MRDX que uma biblioteca para programa o de jogos proposta por este trabalho Mostra se a estrutura de um jogo e os fundamentos envolvidos como sprites intera o com o cen rio e controladores tamb m s o apresentados os t picos de anima o e de edi o de mapas O MRDX desenvolvido pelo autor em C C para DirectX um conjunto de fun es de alto n vel que simplificam a cria o de jogos permitindo o desenvolvimento de jogos de forma r pida e econ mica mostrando se bem adequado para ensino de programa o de jogos As t cnicas 3D s o apresentadas com base na biblioteca OpenGL apresentando se um estudo de caso com um exemplo did tico Palavras chaves programa o de jogos jogos 2D DirectX anima o editor de mapas motor para jogos jogos 3D OpenGL ABSTRACT This work presents techniques for 2D and 3D game programming The 2D techniques are based on th
61. re Para facilitar o c digo foram definidas constantes para as dire es ESQUERDA DIREITA CIMA BAIXO A velocidade do monstro se encontra em MON VEL A dire o atual de um monstro armazenada no campo dados DIR void Monstros void int i dir int mapa_x mapa_y int caminho_livre o n mero de monstros igual ao nivel for i 0 i lt nivel i dir monstros i dados DIR mover monstro switch dir case ESQUERDA monstros i x MON VEL break case DIREITA monstros i x MON VEL break case CIMA monstros i y MON VEL break case BAIXO monstros i y MON VEL break 35 for se monstro estiver totalmente em uma c lula ent o decidir pr xima dire o if monstros i x 32 IGUAL 0 E monstros i y 32 IGUAL 0 caminho_livre 0 mapa x monstros i x 32 mapa y monstros i y 32 talvez mudar dire o if Aleatorio 1 10 IGUAL 10 dir Aleatorio 0 3 do switch dir case ESQUERDA if mapa mapa_y mapa_x 1 IGUALO caminho_livre 1 break case DIREITA if mapa mapa_y mapa_x 1 IGUAL 0 caminho_livre 1 break case CIMA if mapa mapa_y 1 mapa_x IGUAL O caminho_livre 1 break case BAIXO if mapa mapa_y 1 mapa_x IGUAL 0 caminho_livre 1 break se n o est livre tentar outra dire o if caminho livre IGUAL 0 dir Aleatorio 0 3 while camin
62. representa o estado atual do sprite O cap tulo 6 ir demonstrar formas de programa o para a anima o de sprites No jogo de exemplo o personagem principal possui 4 quadros que s o alternados durante a partida para dar a impress o de anima o O c digo 5 1 demonstra como foi executada a opera o de carregamento dos 4 quadros que est o armazenados em um nico bitmap chamado arte bmp Carregar Bitmap arte bmp Criar Imagem jogador 32 32 4 for i 0 i lt 4 i Carregar Quadro jogador i i 0 C digo 5 1 Carregando v rios quadros para um sprite 5 2 Intera o com o cen rio Os sprites geralmente interagem com o cen rio em um jogo mas para tornar isto poss vel preciso armazenar informa es extras que indicam posi es onde os sprites podem se mover obst culos e reas que causam dano aos sprites Uma estrutura bem adequada para armazenar informa es de um cen rio 2D uma matriz bidimensional onde cada c lula representa uma posi o do cen rio do jogo No exemplo temos um labirinto que representado por um matriz de tamanho 15 x 15 Cada c lula pode armazenar apenas dois valores 0 ou 1 O valor 1 indica que h um bloco nessa posi o o 0 indica caminho O preenchimento do mapa foi feito direto no c digo Mas seria ideal construir um simples editor para fazer os mapas este t pico ser abordado no cap tulo 7 33 A fun o
63. rma triunfal por isso lan ou o Jaguar um videogame de 64 bits mas que n o teve uma boa aceita o no mercado A Nintendo fez uma alian a com a Silicon Graphics para o desenvolvimento do Nintendo 64 mesmo assim ela perdeu boa parte de seu mercado para o Playstation Dreamcast Por volta de 1999 a Sega iniciou a gera o atual dos videogames de 128 bits com o lan amento do Dreamcast Vinha equipado com um modem de 56k e usava o Windows CE para facilitar o desenvolvimento e a convers o de jogos do PC As vendas no Jap o n o foram como esperado levando a Sega a anunciar em abril de 2001 o fim do Dreamcast Playstation 2 Em 2000 a Sony lan ou o Playstation 2 integrando jogos filmes em DVD e som digital Tem como grande vantagem poder executar todos os jogos do Playstation 1 O Playstation 2 conta com o apoio de quase todas as grande produtoras gerando assim um extenso cat logo de jogos 2 Gamecube O Gamecube o videogame de 128 bits da Nintendo Foi feito apenas para jogos e utiliza um minidisco com um padr o DVD pr prio para dificultar a pirataria Atualmente a Nintendo n o est investindo em redes online e n o tem um apoio muito grande de outros produtores de jogos Xbox A Microsoft resolveu entrar no mercado e desenvolveu o Xbox Usa DVD e possui um HD de 10 GB para armazenamento das informa es dos jogos V rias produtoras de peso t m lan ado jogos para o Xbox e a Microsoft tem investido
64. rosoft chamada DirectX Segundo LaMothe LAM1999 o DirectX um sistema de software que abstrai o hardware do computador para que seja utilizado o mesmo c digo independentemente da configura o de uma m quina em particular O DirectX usa a tecnologia COM Component Object Model e um conjunto de bibliotecas escritas pela pr pria Microsoft e pelos fabricantes de hardware A Microsoft estabeleceu uma s rie de conven es que devem ser seguidas pelos fabricantes de hardware para implementar as drivers que se comunicam com o hardware Os componentes principais do DirectX na vers o 6 0 s o e DirectDraw Este o componente que controla a tela de video Todos os gr ficos s o conduzidos atrav s dele o mais importante de todos os componentes do DirectX e DirectInput Este sistema controla todos os dispositivos de entrada tais como teclado mouse e joystick e DirectSound Componente que controla o som digital do DirectX e DirectMusic Respons vel pelo som no formato MIDI muito utilizado para m sicas e DirectPlay Componente usado para conex es em rede usando a Internet modens ou conex o direta e Direct3D o sistema utilizado para a cria o de ambientes em 3D no DirectX 68 a Programa o para Windows Para a cria o de um programa para o sistema operacional Windows usando a Win32 API preciso realizar as seguintes tarefas e Criar uma classe Windows H uma estrutura de dados
65. rsor y TAM BLOCO tile atual else if cursor y lt 256 area dos tiles tile atual cursor x 448 TAM BLOCO cursor y TAM BLOCO 6 C digo 7 8 Controle do mouse 49 Para mostrar o mapa na tela basta chamar o m todo Desenhar da classe CMapa Por m o editor tamb m desenha na lateral os blocos para que o usu rio possa selecion los conforme c digo 7 9 mapa Desenhar 0 0 desenhar os tiles a serem selecionados int quadro ind 0 int tile lin tile col if camada atual 0 for tile_lin 0 tile_lin lt 8 tile_lin for tile_col 0 tile_col lt 6 tile_col base quadro_atual quadro_ind base x 448 tile_col TAM BLOCO base y tile lin TAM BLOCO Desenhar Imagem base quadro ind C digo 7 9 Desenhando o mapa e a interface do editor 50 8 FUNDAMENTOS DE JOGOS 3D O MRDX deixado de lado agora para que sejam descritos os jogos 3D Comenta se sobre a biblioteca gr fica OpenGL S o apresentados conceitos sobre a movimenta o 3D e caracter sticas da renderiza o de um cen rio usando o OpenGL 8 1 OpenGL A principal tecnologia utilizada na ind stria de computa o gr fica uma biblioteca chamada OpenGL O OpenGL uma biblioteca gr fica poderosa e de baixo n vel que fornece ao programador uma interface para o hardware gr fico Foi originalmente desenvolvido pela Silicon Graphics empresa respons ve
66. s vel pela inicializa o do lutador Carregar Bitmap lutador bmp Criar Imagem lutador 104 124 45 int ind 0 41 for int lin 0 lin lt 5 lin for int col 0 col lt 9 col Carregar_Quadro lutador ind col lin ind C digo 6 6 Inicializa o do lutador 2 Em seguida precisar armazenar os dados da anima o atrav s do m todo Adiciona Anim da classe CAnim E preciso informar o tamanho de cada matriz que representa uma anima o O m todo retorna um identificador que dever ser armazenado c digo 6 7 anim_andando anim Adiciona_Anim 16 ANIM ANDANDO anim_chute anim Adiciona_Anim 6 ANIM_CHUTE anim_pulo anim Adiciona_Anim 10 ANIM PULO C digo 6 7 Armazenando as anima es na classe As anima es s o selecionadas de acordo com o comando do jogador e o estado do lutador No final do ciclo feito uma chamada ao m todo Atualizar da classe CAnim que faz os c lculos necess rios para a atualiza o da anima o retornando o ndice do quadro atual para ser selecionado no lutador c digo 6 8 Testar Tecla DIK RIGHT anim Atribuir Anim Atual anim andando Testar Tecla DIK LCONTROL anim Atribuir Anim Atual anim chute lutador quadro_atual anim Atualizar Desenhar_Imagem lutador C digo 6 8 Sele o das anima es 42 7 EDITOR DE MAPAS Neste cap tulo descre
67. s demais opera es A partir dela que s o chamadas as fun es do MRDX respons veis pela inicializa o Directx Iniciar e encerramento Directx Encerrar do DirectX definido um la o onde as mensagens s o recebidas e feita a chamada fun o principal Jogo Main de um jogo feito no MRDX 69 constru o da janela Directx Iniciar la o principal de eventos while TRUE testa se h uma mensagem na fila se tiver ent o retira if PeekMessage amp msg NULL 0 0 PM_REMOVE if msg message WM_QUIT break 1 traduz teclas aceleradoras TranslateMessage amp msg manda a mensagem para o manipulador de evento WindowProc DispatchMessage amp msg atualizar dispositivos de entrada MRDX Atualizar Teclado Atualizar Mouse Atualizar Joystick Processamento principal do jogo Jogo Main Directx_Encerrar C digo A2 1 Fragmentos da fun o WinMain b DirectDraw O DirectDraw composto pelas seguintes interfaces e DirectDraw Interface principal que deve ser instanciada para se trabalhar com DirectDraw Ela representa a placa de v deo No MRDX ela instanciada na fun o Directx Iniciar V rias tarefas s o executadas a partir desta interface como a atribui o do modo de v deo e IDirectDrawPalette Interface que lida com a palheta de cores nos modos de v deo que precis
68. s i estado IGUAL ATIVO E i lt MAX CARROS i if i lt MAX CARROS inicia o carro carros i estado ATIVO carros i x Aleatorio 160 479 carros i largura carros i y carros i altura carros i dados TEMPO 0 29 processar os carros for i 0 i lt MAX CARROS i if carros i estado IGUAL ATIVO carros i y vel_carro carros i dados TEMPO if carros i dados TEMPO lt 0 carros i dados TEMPO 10 Aleatorio 1 5 0 reto I esquerda 2 direita carros i dados DIR Aleatorio 0 2 if carros i dados DIR DIREITA carros i x vel_carro if carros i x gt 479 carros i largura carros i dados DIR ESQUERDA else esquerda if carros i dados DIR ESQUERDA A carrosfiJ x vel carro if carros i x lt 160 carros i dados DIR DIREITA if carros i y gt 479 carros i estado INATIVO Desenhar_Imagem carros i C digo 4 7 Fun o Carros A fun o Jogador processa os movimentos do jogador Consiste em tr s partes ler os comandos do jogador testar colis o com a bandeira e testar colis o com os carros No final o jogador desenhado O jogador pode ser controlado pelo teclado ou pelo joystick feito o teste das teclas que controlam os movimentos nas quatro dire es Al m disso n o permitido ao jogador sair da pista A velocidade do jogador est definida em uma constante chamada JOG
69. sin rad PASSO break 55 case GLUT_KEY UP if pode mover jog x jog_z mov_x mov_z jog_x mov x jog_z mov z break C digo 8 3 Fragmento da fun o Special Function O labirinto representado no programa como uma matriz bidimensional onde cada c lula armazena 0 ou 1 Se o valor for igual a 1 ent o h um cubo naquela posi o A fun o pode mover recebe como par metro a posi o do jogador e o movimento que deseja fazer A partir destes valores calculada a c lula na matriz correspondente e verificado se h algum cubo impedindo o movimento c digo 8 4 int pode mover float pos x float pos z float vet x float vet z float mundo_x pos_x vet_x float mundo_z pos_z vet_z int ind_x int mundo_x TAM BLOCO 2 TAM BLOCO int ind_z int mundo_z TAM_BLOCO 2 TAM_BLOCO if mapa ind_x ind_z return 0 else return I C digo 8 4 Fun o pode mover 8 3 Renderiza o A c mera o objeto que determina a vis o do mundo 3D S o 3 vetores que definem a c mera um de posi o outro que indica para onde est sendo direcionada o ltimo determina que parte da c mera est para cima A c mera pode ser especifica usando a fun o gluLookAt A altera o no vetor de posi o caracteriza o movimento de corpo O vetor de dire o est associado aos movimentos angulares e o l
70. stemas Orientados a Objetos Estudo de Caso 63 Projeto de Jogos Game Design I e II Introdu o a Game Design Jogadores e P blico alvo Brainstorm Foco Elementos de Jogabilidade Tramas hist ria Intelig ncia Artifical Mec nica da Jogabilidade Documenta o Design Bible Ferramentas de Game Design Level Design Feedback e Playtest Conceito Inicial Design Essencial Jogabilidade Design Detalhado Balanceamento de Games Explorando a Intera o An lise de Especialistas Futuro do Game Design T picos Avan ados Grupo III Teoria para Jogos Algoritmos para Jogos Listas pilhas filas grafos rvores etc Jogos s o ambientes ricos para a aplica o de diversas estruturas de dados Nesta disciplina vamos revisitar estas estruturas e conhecer outras usadas normalmente durante o desenvolvimento de um jogo Matem tica 3D para Jogos Teoria matem tica necess ria para o entendimento de como funciona um mundo virtual 3D dentro do computador Matrizes Trigonometria An lise Matematica Intelig ncia Artificial em Jogos T cnicas e algoritmos de IA aplicadas ao desenvolvimento de jogos Algoritmos de Busca M quinas de Estado Grupo IV Programa o Programa o em C C Classes e Objetos Heran a Polimorfismo Templates Programa o para Windows Esta disciplina al m de ser uma introdu o programa o Windows apresentar a programa o b sica para este sistema operacion
71. timo vetor corresponde ao movimento de rolamento 56 Para definir cores no OpenGL deve se especificar a intensidade um valor entre 0 0 e 1 0 de cada cor prim ria que s o o vermelho Red verde Green e azul Blue Um quarto elemento chamado alfa geralmente usado na defini o de cores para o controle da transpar ncia O OpenGL tenta modelar a luz do mundo real atrav s de alguns componentes e Luz do Ambiente N o vem de uma dire o em particular e Luz Difusa Vem de uma certa dire o mas quando atinge uma superf cie refletida em todas as dire es e Luz Especular Vem de uma certa dire o e reflete em uma nica dire o A cor de material de um objeto que determina como a luz ser refletida O material possui cor ambiente difusa e especular diferentes que indicam a forma que a cada uma das componentes da ilumina o ser refletida Os valores usados no programa do labirinto para a defini o da luz e dos materiais est o no c digo 8 5 Para mais informa es sobre cores ilumina o e materiais sugere se o livro de Wells WEL1995 GLfloat mat specular 1 0 1 0 1 0 1 0 GLfloat mat_shininess 50 0 GLfloat mat_amarelo 0 8 0 8 0 1 1 0 GLfloat mat_verde 0 1 0 6 0 1 1 0 GLfloat mat_vermelho 0 7 0 1 0 1 1 0 GLfloat light_position 0 0 500 0 0 0 1 0 GLfloat luz_branca 1 0 1 0 1 0 1 0 GLfloat Imodel_ambient 0 6
72. um conjunto de primitivas implementadas em C C O MRDX implementado como uma biblioteca de fun es em dois arquivos principais o arquivo mrdx h que define os prot tipos das fun es e as estruturas de dados e o arquivo mrdx cpp que cont m a defini o das fun es em si O MRDX foi desenvolvido com o compilador Microsoft Visual C 5 0 11 O MRDX mantido com o c digo fonte aberto para que possa ser estudado e estendido com novas funcionalidades pelos usu rios Informa es sobre a implementa o do MRDX encontram se no anexo 2 O MRDxX fornece os seguintes servi os b sicos para programa o de jogos Suporta arquivos de imagem do tipo BITMAP Suporta arquivos de sons no formato WAV e MIDI Suporta entrada de dados atrav s do teclado mouse e joystick Automaticamente inicializa o DirectX e configura o modo de v deo para a resolu o de 640x480 tela cheia e 256 cores Oferece uma estrutura de dados chamada IMAGEM que utilizada para controlar os sprites dos jogos Implementa primitivas para detec o de colis o entre objetos do tipo IMAGEM Para us lo deve se criar um projeto do tipo Win32 Application acrescentar o arquivo mrdx cpp ao projeto e criar um arquivo novo onde estar o c digo do jogo Neste novo arquivo devem existir estas declara es include mrdx h void Jogo Main void 2 Na fun o Jogo_Main que ser inserido o c
73. ve se um editor de mapas e comenta se sobre as caracter sticas dos Tile Based Games Tamb m ser apresentada uma classe que implementa uma vers o bem simples de mapas Ent o o editor desenvolvido baseado na classe proposta 7 1 Tile Based Games A maioria dos jogos 2D s o conhecidos como Tile Based Games porque usam uma t cnica muito comum de constru o de cen rios baseados em mapa de tiles A tradu o da palavra tile de azulejo A id ia que se t m v rios blocos de mesmo tamanho mas com diferentes imagens e que o cen rio montado a partir da jun o desses blocos de uma forma organizada Esta t cnica usada em jogos de plataforma como o Mario da Nintendo e at em complexos jogos de estrat gia em tempo real como o Warcraft II da Blizzard O tamanho mais comum para um bloco de 32x32 pixels Ent o um mapa que ocupe a tela toda 640x480 teria 20 posi es no eixo de X e 15 no eixo de Y Uma forma f cil de programar os mapas e que serve para a maioria dos casos dividi lo em tr s camadas que tenham o seguinte conte do Camadas Conte do Base Esta a camada que fica por baixo de todas as outras Geralmente representa o solo Ex Areia grama pisos gua Intermedi ria Itens que n o s o m veis nem podem ser pegos pelo jogador Ex Rochas mesas rvores Objetos Os objetos s o m veis ou podem ser pegos pelo jogador Ex Espadas livros chaves pessoas e
74. vocado o m todo Carregar da classe CMapa que ir verificar se existe um arquivo com informa es do mapa salvos previamente se n o houver o mapa iniciado com valores padr es 48 Carregar Bitmap base bmp Criar Imagem base 32 32 48 ind 0 for lin 0 lin lt 8 lin for col 0 col lt 6 col Carregar_Quadro base ind col lin ind mapa Atribuir_Imagem_Base base mapa Carregar C digo 7 7 Fragmentos da inicializa o do editor O comando associado ao pressionamento da tecla control modifica o conte do da vari vel camada atual que indica a camada que est sofrendo altera o O cursor ajusta sua posi o de acordo com a varia o da posi o do mouse Testes s o feitos para manter o cursor sempre vis vel Quando o bot o do mouse pressionado verificado em que local o cursor se encontra se estiver na rea do mapa ent o a c lula para a qual ele est apontando receber o valor do bloco atual Se o cursor estiver na rea de sele o dos blocos ent o o bloco atual modificado c digo 7 8 cursor x Mouse Xvar if cursor x lt 0 cursor x 0 if cursor x gt 640 cursor x 639 cursor y Mouse_Yvar if cursor y lt 0 cursor y 0 if cursor y gt 480 cursor y 479 if Mouse_Bot_Esquerdo if cursor x lt 448 if cursor y lt 448 area do mapa mapa Atribuir camada atual cursor x TAM BLOCO cu
Download Pdf Manuals
Related Search
tccjogos. tcc jogos tcc jogos de azar tcc jogos e brincadeiras tcc jogos digitais tc jogos
Related Contents
MUROX 1 - Esalasingenieros Technical Specification Erklärung der Sympole Le laser magique ? Perfect Enterprise Resource Planning (ERP) System P-C3060DN - TA Triumph Platform Requirements Brochure offre Ihdem Unifi HotSpot HELIX BOARD 12 UNIVERSAL LD 18-7 125_150 R.book Copyright © All rights reserved.
Failed to retrieve file