You are on page 1of 10

INTRODUOADESENVOLVIMENTODEJOGOSUSANDOJPLAY https://www.facebook.

com/groups/jplayIFPI/

JPlay
JPlay uma bibliotecajava desenvolvida naUFRJvoltadaparaodesenvolvimentorpidoefcil de jogos. Contem vrios mtodos e objetosauxiliaresqueoajudaroacriarjogos2Dusandoa linguagemJavaempouqussimotempo.

Resumo
Neste tutorial introdutrio, irei apresentar alguns conceitos bsicosde JPlay implementando o desenvolvimento de um jogo. Bem como falar sobre a configurao do ambiente de programao,algunsconceitosdePOOealgicadetodoojogoapresentadonestetutorial.

Consideraes Iniciais
Primeiramente, este tutorial alm de estar servindo como base para o estudo da biblioteca JPlay,temcomoobjetivoaanlisesemnticadosjogosdesenvolvidos. Para compartilhar informaes, tirar dvidasou se manter informado, acesse nosso grupono facebook:https://www.facebook.com/groups/jplayIFPI/ Ouentreemcontatoporemail:vhv.sousa@gmail.com,elannecristina.santos@gmail.com.

Programas utilizados
Antesdeiniciarmosnossosestudos,precisamosteroeclipseeoJPlay,ambosgratuitos. IDEEclipse:[http://www.eclipse.org/downloads/] FrameworkJPlay:[http://www2.ic.uff.br/jplay/zip/jplay3.rar].

Importando um projeto Eclipse


Caso j se tenha um projeto, no h necessidade de criar um do zero e configurar, basta importar.Paraissovamosseguirumasriedeetapasbemdefinidas: No Eclipse, clique em File > Import > Existing Project Into Workspace e clique em next. Em Select root directory clique em "Browse..." e vat a pasta onde se encontra o projetodesejado,selecioneedOK. Na rea Projects iro ser listados todos os projetos que existem dentro da pasta que voc selecionou na etapa anterior. Deixe marcado o ou os projetosdesejdos e clique emfinish. SeoprojetoimportadopossuiroJPlayadicionadoaoBuildPathepuleos2prximastpicos. 1

INTRODUOADESENVOLVIMENTODEJOGOSUSANDOJPLAY https://www.facebook.com/groups/jplayIFPI/

Criando um projeto Java


PrimeiramentevemFile>New>JavaProject.

Em Project name defina um nome para seu projeto, seguindo sempre este padro: PalavraComposta, ou seja, sem smbolos, espaos, caracteres especiais, acentos e a primeiraletradecadapalavradevesermaiscula.

Nonecessrioalterarmaisnenhumaconfigurao,sendoassim,cliqueemFinish.

Importando a biblioteca do JPlay


CriadooprojetoebaixadoabibliotecadoJPlay,agoranosrestaimportla. Depoisdedescompactadooarquivo,vatapastaJPlay\storeecopieoarquivoJPlay.jar.

Vatapastadeseuprojeto,queficadentrodoseuworkspace,crie2novaspastas:

INTRODUOADESENVOLVIMENTODEJOGOSUSANDOJPLAY https://www.facebook.com/groups/jplayIFPI/

Umachamadalib,queabreviaodelibrary,aquiondeiremoscolocarnossabiblioteca. Aoutrachamadaresources,ondeiremoscolocartodososrecursosdojogo:imagens,sons

Com isto feito, v at oEclipse, abra seu projeto > lib cliquecom o boto direito em cima da bibliotecaeadicioneaoprojeto.BuildPath>AddtoBuildPath.

Pronto,comisto,agorajestamoscomnossoambientedeprogramaoconfigurado.

Alguns conceitos de POO


Alguns conhecimentos bsicos de POO que sero bastante utilizados, tais como: pacotes, variveislocaiseglobais,herana,bemcomoaspalavrasreservadasthisesuper. Package Package ou pacotes, nada mais so do que simples pastas com o intuito de organizarnossoprojeto.Deformaresumida,ousodepacotesconsideraque: Emumpacotepodemexistirvriasclasses Evitamseconflitodenomes Utilizamseanotaodepontosemvezde\ou/. Ex:opacotejplay.Windownaverdadeumdiretrio\jplay\Window\. Pacotessodefinidosusandoseapalavrareservadapackagenoinciodocdigofonte: package<nomePacote>oupackage<nomePacote>.<nomeSubpacote> Ex:packagebr.ifpi.poo.jplay.spaceInvader

INTRODUOADESENVOLVIMENTODEJOGOSUSANDOJPLAY https://www.facebook.com/groups/jplayIFPI/

Importando pacotes Classes de diferentes pacotes no so visveis entre si eprecisamser importadasUsaseapalavrareservadaimport.Exemplo:importjplay.Window package x imports Em uma classe, devese: primeiro declarar a que pacote a classe pertenceeposteriormentedeclararasimportaes.Exemplo:

Variveis Globais ou atributos - so aquelasdeclaradasforademtodosevistasem toda


aclasseeexistemenquantooprogramaestiverrodando.

Variveis Locais - so aquelas declaradas dentro de mtodos e vistas apenas dentro do


mtodo.Permanecemvivasapenasenquantoomtodoexecutado. Um problema comum gerado quando utilizamos variveis ou parmetros com o mesmo nomedosatributosqueoprogramanosabeidentificarqualvocestquerendoreferenciar. Para o exemplo a seguir, considerada uma classe que representa uma Conta bancria. Perceba que nosso saldo no ser alterado, mesmo que o mtodo definirSaldoInicial() seja chamado.

Umasoluoparaesteproblemaautilizaodothis.

This - this uma palavra reservadaquefazreferncia classe ondea mesma est inserida,
sem ser necessria a instanciao desta classe internamente. Isso ilustrado noexemplo a seguir:

INTRODUOADESENVOLVIMENTODEJOGOSUSANDOJPLAY https://www.facebook.com/groups/jplayIFPI/

Herana - Utilizamos herana para compartilharatributosemtodoscomoobjetivode


reaproveitarcdigoecomportamentos.Paraisso,usaseapalavrareservadaextends. Exemplo:

Neste exemplo a classe Naveest herdando Sprite, agora Navepossuiodireitodeutilizarde todososmtodoseatributospblicosdaclasseSprite.DizemosqueSpritemedeNave. Sobrescrita de mtodos Quando criamos mtodos com o mesmo nome de um mtodo da superclasse. SuperApalavrasuper,refereseasuperclasse.Exemplo:

No exemplo acima, dentro do construtor da classe Nave, estamos chamando o construtor da classeSpriteepassandooparmetroendereco. Casoqueriachamarummtododiferentedoconstrutorbasta:super.metodo(parmetro)

Padro de desenvolvimento
Iremos a seguir apresentar alguns padres de desenvolvimento comoobjetivodetornarnosso cdigomaislegvel,otimizadoefacilitandoamanutenoeacorreodepossveiserros. Algumasprticas: Possuirumpacoteparacadajogocriado Escritadecomentriosaolongodocdigo Mtodos e variveis devem ser iniciadas com letra minscula, e a partir da segunda palavrainiciarcomletramaiscula.exp:variavel,metodoComMaisDeUmaPalavra() Classes devem ser escritas com letras iniciais maiusculas, seguindo o mesmo padrao donomedoprojeto.

INTRODUOADESENVOLVIMENTODEJOGOSUSANDOJPLAY https://www.facebook.com/groups/jplayIFPI/

Ciclopadrodedesenvolvimento: Possuir uma classePrincipal,nesteserchamadooconstrutordaclassequecontmo comportamentodojogo Possuir uma classe Jogo onde ir conter o que acontece no jogo. Onde so instanciados, inicializados todos os objetos usados no jogo e aplicados todos os mtodosqueirodefinirocomportamentodojogo. Paracadapersonagemeobjetodojogodevesercriadoumaclasse.

Aclassequepossuiocomportamentodojogomereceumaobservaomaisdetalhada. Quandoformosimplementla,vamosseguirumpadroqueincluiosmtodos seguintesmtodos:

EsteoesqueletodenossaclasseJogo.

INTRODUOADESENVOLVIMENTODEJOGOSUSANDOJPLAY https://www.facebook.com/groups/jplayIFPI/

Algumas funcionalidades do JPlay


ClasseWindow.Osmtodosqueiremosutilizarsoosseguintes:
publicWindow(intlargura,intaltura) publicKeyboardgetKeyboard() publicvoidupdate() publicvoiddelay(longtempo) Construtordaclasse Retornaumainstnciadoteclado Mostra a janela atualizada com os desenhos na teladomonitor O jogo retarda/atrasa pelo tempo passado por parmetro (em milisegundos), usado principalmente,paraatrasaraexecuodojogo. desenhaumtextonatela fechaajanelaesaidojogo

public void drawText(String message, int x, int y,Colorcolor) publicvoidexit()

Classe Sprite. Possui mtodos que podem fazer a imagem se locomover pela tela e de animao.Osmtodosqueiremosutilizarsoosseguintes:
publicSprite(StringfileName,intnumFrames) publicSprite(StringfileName) publicvoidmoveX(doublevelocidade) publicvoidmoveY(doublevelocidade) Recebe por parmetro o endereo da imagem que serexibidaeonmerodeframesqueelacontm Basta passar o endereoda imagem aserexibida, onmerodeframesautomaticamenteser1 Move o Sprite na tela somente no eixo x. Utiliza o teclado.Porpadroasteclasdirecionais Move o Sprite na tela somente no eixo y. Utiliza o teclado.Porpadroasteclasdirecionais

PosicionandoumSpritenatela Para posicionarmosumdesenhonatela,primeiramenteprecisamosconhecercomofuncionao posicionamentodeobjetospelatela. Primeiramente, imagine atelacomoumplanocartesiano,com2eixos:oxparaasabscissase oeixoyparaasordenadas.Anicadiferenaparanossoplanocartesianoquea posio(0,0) fica no canto superior esquerdo, e a medida que o objeto vai se movendo para esquerda ou parabaixo,estevalorvaiaumentando,comoilustradoaseguir:

INTRODUOADESENVOLVIMENTODEJOGOSUSANDOJPLAY https://www.facebook.com/groups/jplayIFPI/

Aposioxdopersonagemacima400esuaposioy300.

Conhecendo o jogo
Iremos desenvolver uma parte do famoso jogo de atari: SpaceInvaders. Este um jogo relativamente simples onde o player controla uma nave e e atira nasnavesinimigas a fim de ganharpontos. Nosso jogo ser muito semelhante ao original, a diferena ser que a nave inimiga no atira, nomorreeficaandandodeumladoaooutronatela.

Criando uma janela e definindo um fundo


Noesquecendodasimportaesdeclasse,vamoscriar2atributos: janela,dotipoWindow.OuWindowjanela fundo,dotipoGameImage.OuGameImagefundo. Vamosagorainicializlosedesenhlosconformeilustradoabaixo:

INTRODUOADESENVOLVIMENTODEJOGOSUSANDOJPLAY https://www.facebook.com/groups/jplayIFPI/

importante observar o uso do mtodo update(). Esse mtodo da classe Window usado paramostrarasatualizaesfeitasesempredeveserchamadoporltimo. PararodarnossojogobastaapertarCTRL+F11ou .

Criando nossos personagens


Como dito anteriormente, uma classe deve ser criada para cada personagem e objeto, mas quais so nossos personagens? Como no nosso exemplo tratamos do clssico jogo Space Invaders,sabemosqueelepossuiumanaveeosinimigos/invasores. Mas alm de criar 2 classes representando a nave e o inimigo, vamos criar mais uma para representarotirodanave,todasherdandoaclasseSprite. Clique com o boto direito em cima do pacote > new > class. Em name, insira o nome da classe e em Superclass, insira o endereo de onde est a super classe, assim ele ir importlaautomaticamente.

Parafinalizar,cliqueemFinish. Nossaclassefoicriada,masnotequeoeclipseapontaumerro,cliqueinanotificaoquefica namesmalinhadoerro( ).Eleirsugerirpossveissolues.

EsteerrofoiocasionadoporquetodasasclassesqueherdamdeSpritesoobrigadasacriar umconstrutorpadroquepasseporparmetroumaString.

INTRODUOADESENVOLVIMENTODEJOGOSUSANDOJPLAY https://www.facebook.com/groups/jplayIFPI/

Feitoisto,vamosagorafazeromesmoparaospersonagensInimigoeBala. Nossoinimigo Nossaclasseinimigavaiconter Oqueprecisamossabersobrecolises? Bem, para descobrirmos se um objeto colidiu com outro voc pode usar o mtodo: boolean collided(GameObject). O mtodo booleancollided(GameObject),retornatruesehouvercoliso,aocontrrio,retorna false.Exemplo:

Criandoumabalaefazendosuacoliso Criado a classe bala e seu construtor, vamos criar um objeto do tipo bala na classe Jogo, inicializar ela edesenhalanatela.Assimcomoagentefezcomospersonagens.Porem,no necessrio inicializar as coordenadas da bala (x,y) pois os mesmos dependem daposio da nave. Entendendo melhor o funcionamento de nossa bala, ela ir partirdo canhodanaveeirsubir verticalmente at atingir a nave inimiga ou o cabealho. Implementando nossa classe, ela ir ficarmaisoumenosassim:

10