padrão de projeto aplicado a jogos

6
Padrões de Projeto Aplicados à Construção de Jogos Eletrônicos Roberto Tenorio Figueiredo, Carla Brandão de Carvalho Figueiredo Faculdade de Ciências Aplicadas e Sociais de Petrolina (FACAPE) Campus Universitário S/N – Vila Eduardo – 56.328-903 – Petrolina – PE – Brasil [email protected], [email protected] Abstract. Software Engineering is a collection of good practice which aims to make software development easier and faster resulting in a quality product. Many of these practices are used in commercial applications, focused on the internal use in companies, however, other types of software can also make use of these practices with the same goal of improving the development and quality of the product generated. One example is video games, products with great quality and perfect graphics, but that takes years to get ready and requires an effort of great teams and high financial investment, they need to give the expected return. To aid development, reduce project risks and increase quality, it is important to use various techniques of software engineering, leaving the project safer for investors and better for developers and also for plays. This work demonstrates how to use design patterns that was originally defined for commercial applications to develop electronic games, based on a classic RPG game in turns, due to its characteristic of being an inclusive type of game, maximizing the demands on programming and design patterns, in this research. Keywords: Software Engineering, Electronic Games, Design Patterns, Game Development. Resumo. Engenharia de Software é a reunião de boas práticas, que tem o intuito de tornar o desenvolvimento de software mais simples e ágil resultando em um produto de qualidade. Muitas dessas práticas são utilizadas em aplicações comerciais, voltada para o uso interno nas empresas, porém, outros tipos de software também podem fazer uso dessas práticas com o mesmo objetivo de melhorar o desenvolvimento e a qualidade do produto gerado. Um exemplo disto são os jogos eletrônicos, produtos com extrema qualidade e perfeição gráfica, mas que demoram anos para ficarem prontos e requer um esforço de grandes equipes e altos investimentos financeiros, que precisam dar o retorno esperado. Para auxiliar o desenvolvimento, diminuir os riscos do projeto e aumentar a qualidade é importante o uso de diversas técnicas da Engenharia de Software, deixando o projeto mais seguro para quem investe e melhor para quem desenvolve e também para quem joga. Este artigo demonstra como utilizar os padrões de projeto da engenharia de software gerados para aplicações comerciais, no desenvolvimento de jogos eletrônicos, tomando como base um jogo de RPG clássico em turnos, devido a sua característica de ser um tipo de jogo abrangente, maximizando as demandas na programação e nos padrões de projeto, foco desta pesquisa. Não é permitido fazer cópias deste trabalho visando o lucro ou vantagem comercial. É necessário ostentar a primeira página. Este trabalho foi publicado nos Anais do 2º Simpósio Interinstitucional de Computação do Vale do São Francisco (SICOMP 2011), 18 - 20 de maio de 2011- Juazeiro - Bahia - Brasil - www.sicomp.org - ISSN 2236-2215.

Upload: lara

Post on 17-Aug-2015

216 views

Category:

Documents


0 download

DESCRIPTION

Padrão de Projeto Aplicado a Jogos

TRANSCRIPT

Padres de Projeto Aplicados Construo de Jogos Eletrnicos Roberto Tenorio Figueiredo, Carla Brando de Carvalho Figueiredo Faculdade de Cincias Aplicadas e Sociais de Petrolina (FACAPE)Campus Universitrio S/N Vila Eduardo 56.328-903 Petrolina PE Brasil [email protected], [email protected] Abstract. Software Engineering is a collection of good practice which aims tomakesoftwaredevelopmenteasierandfasterresultinginaquality product.Manyofthesepracticesareusedincommercialapplications, focusedontheinternaluseincompanies,however,othertypesofsoftware canalsomakeuseofthesepracticeswiththesamegoalofimprovingthe developmentandqualityoftheproductgenerated.Oneexampleisvideo games, products with great quality and perfect graphics, but that takes years togetreadyandrequiresaneffortofgreatteamsandhighfinancial investment,theyneedtogivetheexpectedreturn.Toaiddevelopment, reduceprojectrisksandincreasequality,itisimportanttousevarious techniquesofsoftwareengineering,leavingtheprojectsaferforinvestors and better for developers and also for plays. This work demonstrates how to use design patterns that was originally defined for commercial applications to develop electronic games, based on a classic RPG game in turns, due to itscharacteristicofbeinganinclusivetypeofgame,maximizingthe demands on programming and design patterns, in this research. Keywords:SoftwareEngineering,ElectronicGames,DesignPatterns, Game Development. Resumo.EngenhariadeSoftwareareuniodeboasprticas,quetemo intuitodetornarodesenvolvimentodesoftwaremaissimplesegil resultandoemumprodutodequalidade.Muitasdessasprticasso utilizadasemaplicaescomerciais,voltadaparaousointernonas empresas,porm,outrostiposdesoftwaretambmpodemfazerusodessas prticascomomesmoobjetivodemelhorarodesenvolvimentoea qualidadedoprodutogerado.Umexemplodistosoosjogoseletrnicos, produtos com extrema qualidade e perfeio grfica, mas que demoram anos paraficaremprontoserequerumesforodegrandesequipesealtos investimentosfinanceiros,queprecisamdaroretornoesperado.Para auxiliarodesenvolvimento,diminuirosriscosdoprojetoeaumentara qualidadeimportanteousodediversastcnicasdaEngenhariade Software, deixando o projeto mais seguro para quem investee melhor para quemdesenvolveetambmparaquemjoga.Esteartigodemonstracomo utilizarospadresdeprojetodaengenhariadesoftwaregeradospara aplicaescomerciais,nodesenvolvimentodejogoseletrnicos,tomando como base um jogo deRPG clssico em turnos, devidoa sua caracterstica deserumtipodejogoabrangente,maximizandoasdemandasna programao e nos padres de projeto, foco desta pesquisa. No permitido fazer cpias deste trabalho visando o lucro ou vantagem comercial. necessrio ostentar a primeira pgina. Este trabalho foi publicado nos Anais do 2 Simpsio Interinstitucional de Computao do Vale do So Francisco (SICOMP 2011), 18 - 20 de maio de 2011- Juazeiro - Bahia - Brasil - www.sicomp.org - ISSN 2236-2215. PalavrasChaves:EngenhariadeSoftware,JogosEletrnicos,Padresde Projeto, Desenvolvimento de Jogos.1. Introduo.OusodosconceitosdeEngenhariadeSoftware,quegeralmentesoaplicadosem programascomerciais/industriais(PRESSMAN,1995),tambmpodemseraplicados paramelhorianodesenvolvimentodejogoseletrnicos.Dentreastcnicasbsicasde engenhariadesoftwareestoospadresdeprojeto,quepodemmelhoraro desenvolvimento de um jogo, tornado-o mais rpido, barato e cujas bibliotecas podero ser reutilizadas em outros projetos. Ousodepadresdeprojetovisareduziroesforoutilizadonasoluode problemasquesurgemduranteodesenvolvimento,comoaimplementaodenovas funcionalidades,correodeerros,alteraoderegraseleisnodomniodaaplicao, entre outros, propondo uma soluo j testada para estes eventuais problemas, deixando odesenvolvimentomaissimplesegil.Estetrabalhovemacomplementaraliteratura sobreodesenvolvimentodejogoseletrnicosinserindonestecontexto,conceitos,que at ento eram utilizados somente na produo de aplicaes comerciais/industriais. Projetoedesenvolvimentodejogosrepresentamumareabastanteadequada paraaplicaodepadresdeprojeto,umavezquemesmoasaplicaesmaissimples em jogos necessitam de mecanismos criacionais, de representao (cenrios e elementos do jogo), comportamentais, de interao e de distribuio. 2. Definio dos padres de projeto a serem utilizados Em grandes empresas de desenvolvimento, como a Sony, Microsoft e Nintendo, padres de projeto tm sido extensivamente aplicados a jogos. Existem quatro contextos bsicos paraaplicaodepadresemjogos:projetodojogo(gamedesign),projetodenvel (level design), projeto de game engine e implementao do jogo (SILVEIRA e SILVA, 2006). No projeto de um jogo, as abordagens de projeto orientado a objetos e a aspectos recebemfortesaplicaesdepadresdeprojeto.Umexemplodissoarealizaode um projeto completo de um jogo do tipo tabuleiro para duas pessoas utilizando o padro MVC(Model-View-Controller),feitopelospesquisadoresD.NguyeneS.B.Wong (SILVEIRA e SILVA, 2006). Outro exemplo a apresentao de um conjunto bastante extensodeaplicaesdepadresnasdiversasfasesdoprojetodejogo(gameplay, movimentos,fsica,IA,dentreoutros),feitapelospesquisadoresS.BjrkeJ. Holopainen (SILVEIRA e SILVA, 2006). Nocontextodeprojetodenvel,sodefinidososcenrioserefinamentosdos elementosdejogos,bemcomoaespecializaodosfluxosdentrodosnveis.Aqui, padres de interao desempenham papel fundamental. Oscontextosdeprojetodegameengineseimplementaodoprpriojogoso asduassub-reascommaiorconcentraodeaplicaesdepadresdeprojeto.O pesquisadorR.Ruckerdesenvolveuumgameenginecompletoaplicando extensivamentepadresdeatribuioderesponsabilidadesGRASP(General Responsibility Assignment Software Patterns) e padres de projeto GoF (Gang of Four) (SILVEIRA e SILVA, 2006). O pesquisador D. H. Eberly faz aplicaes de padres de projetobemconhecidosemsoftwarescomerciaiseprogramaonaconstruodoseu game engine Wild Magic (SILVEIRA e SILVA, 2006). Estes so alguns dos exemplos discutidos na literatura sobre as tcnicas de desenvolvimento de jogos onde a aplicao depadresdeprojetosrepresentougrandesganhosemtermosdedesempenhoe facilidade de escalabilidade e manuteno. Paraaelaboraodesteartigo,foidesenvolvidoojogodeRPGclssicoOs Federa4eaMquinadoTempo,queacontinuaodeumasriedejogoscuja estriasepassaemumuniversodesuperherisefocadaemumgrupodeheris conhecido como Os Federa. Telas do jogo podem ser vistas nas figuras 1 e 2. Figura 1: Tela do jogoFigura 2: Tela do jogo Fonte: os autoresFonte: os autores Analisandoosprincipaispadresdeprojetoexistentesnoplanejamentode softwares comerciais (Abstract Factory, Builder, Factory Method, Prototype, Singleton, Adapter,Bridge,Composite,Decorator,Faade,Flyweight,Proxy,Chainof Responsibility,Command,Interpreter,Iterator,Mediator,Memento,Observer,State, Strategy,TemplateMethod,Visitor)ebaseadonaanliseanteriorenasdemandasdo jogo proposto, foram identificadas a necessidade de uso de alguns padres, descritos no tpico a seguir, com o objetivo de simplificar a criao do software e garantir o reuso de suas classes. 2.1. Padres de Projeto Asimplesutilizaodosconceitosdeorientaoaobjetosnogarantem,porsis, aplicaesreutilizveis,extensveisedefcilmanuteno.Paraqueessesobjetivos sejamatingidosimportantetambmsepreocuparcomaformacomqueessas aplicaes e seus cdigos so estruturados (GAMMA, 1995). Ospadresdeprojetodescrevemsoluesparaproblemasdeprojeto recorrentes,quesosimilaresentresieestopresentesemdiferentescontextos.Esses padressoexaustivamentetestadoseconfiguramamelhorsoluoparaum determinado problema. Naliteratura,existemdiversosautoresqueidentificameexplicitampadresde projetodesoftware,sendoeles,resultadosdeexperinciasanterioresno desenvolvimentodesistemas.Estetrabalhotemcomoprincipalrefernciaolivro DesignPatterns:ElementsofReusableObject-OrientedSoftwaredosautoresErich Gamma, Richard Helm,Ralph Johnson e John Vlissides, conhecidos como a Gang of Fourousimplesmente"GoF"(GAMMA,1995).Tomandocombaseospadres GoF, os seguintes padres foram identificados como necessidade para o jogo de RPG clssico Os Federa 4 e a Mquina do Tempo: Interface a.Caracterstica:Mantmumaclassequeusamdadoseserviosprovidospor instnciasdeoutrasclassesindependentedessas,atravsdoacessoatais instncias obrigatoriamente atravs de uma interface (DCC, 2008); b.ProblemanoJogo:Subsistemasdiferentes(Classe,Eventos,Personagens, GrupodeInimigos,Cenrios,Animaes,Sons,Mapas,Sistema)queremse comunicar com o motor; c.Resultados:Comunicaocomomotoratravsdeumnicocanal,gerando facilidade na comunicao entre os subsistemas e o motor; Singleton a.Caracterstica:Garanteaexistnciadeapenasumainstnciadeumaclasse, mantendo um ponto global de acesso ao seu objeto (DCC, 2008); b.ProblemanoJogo:Aclassequegeraomenudeopes,defineamoeda corrente no jogo, configuraes do jogo e vocabulrio no pode ser duplicada, a fim de evitar confuses ao jogador; c.Resultados: Garantia que a classe do sistema do jogo nica; Adapter a.Caracterstica:Utilizadoparaadaptarainterfacedeumaclasse,permitindo queclassescominterfacesincompatveispossaminteragir,ouseja,umobjeto cliente poder utilizar-se de servios de outros objetos com interfaces diferentes por meio de uma interface nica (DCC, 2008); b.ProblemanoJogo:Muitossubsistemas,cadaumcomsuainterfaceprpria,a fim de se comunicar com o motor; c.Resultados: Facilidade na comunicao do motor com seus subsistemas; Flyweight a.Caracterstica:Utilizadoquandovriosobjetosdevemsermanipuladostodos damesmamaneira,semanecessidadededadosadicionais.Nestepadro inexistem ponteiros para os mtodos do dado, para economizar memria.Neste caso,objetosdiferentes,comosmesmosdados,compartilhamosdadosem comum (DCC, 2008); b.ProblemanoJogo:Diversosinimigosocasionais,andandoemgrupos,que possuemasmesmascaractersticassoinstnciasdeobjetosquegastam memria com informaes repetidas; c.Resultados:Ojogoocupamenosespaosemmemria,poisarmazenaas caractersticas dos monstros apenas uma nica vez; d.Diagrama de uso: Command a.Caracterstica:Encapsulaumasolicitaocomoumobjeto,destaformaa permitir que clientes parametrizem diferentes solicitaes, enfileirem ou faam o registro de solicitaes e suportem operaes que podem ser desfeitas; b.ProblemanoJogo:Salvaroprogressodojogo.Issosignificasalvarostatus atual de todos os personagens e eventos do jogo;c.Resultados: Guarda, em um objeto, as modificaes nos eventos e personagens realizados durante a jogatina, e, no momento de salvar, basta apenas guardar os dados armazenados nos objetos da classe Command; Iterator; a.Caracterstica:Forneceumamaneiradeacessardeformaseqencialos elementos de um objeto agregado sem expor sua representao subjacente; b.ProblemanoJogo:Oobjetoquecontrolaaclassenaqualpertenceum personagem deveanalisar, um a um, todos os itens, armase armaduras que um determinado heri pode usar; c.Resultados: A anlise de itens, armas e armadura fica mais rpida e simples; Mediator a.Caracterstica:Defineumobjetoqueencapsulaainteraoentreumconjunto de objetos. Promove o acoplamento fraco ao evitar que os objetos se refiram uns aos outros, permitindo a variao das interaes independentemente; b.Problema no Jogo: Alguns subsistemas do jogo precisam se comunicar entre si, sem a interveno do motor, o que pode causar um forte acoplamento entre eles; c.Resultados:ComaclasseMediator,asiteraesentreossubsistemasficam com fraco acoplamento, permitindo uma maior reusabilidade destes subsistemas; Memento a.Caracterstica:Semviolaroencapsulamentodoobjeto,capturaeexternaliza um estado interno de um objeto, de modo que o mesmo possa posteriormente ser restaurado para este estado (DCC, 2008). b.Problema no Jogo: Ao salvar a progresso do jogo, so salvos todos os eventos modificados,cadaeventoumobjeto.Algunsdessesobjetossograndese ocupam muito espao no arquivo de salvamento; c.Resultados:Oarquivodesalvamentorecebeapenasasinformaes modificadas do objeto e no o objeto inteiro, reduzindo drasticamente o tamanho doarquivosalvo,facilitandoarestauraodosdadossalvosnomotorenos subsistemas do jogo; Observera.Caracterstica:Defineumadependncia1paraN,entreobjetosdemodoque quandoumobjetomudaoestado,todosseusdependentessejamnotificadose atualizadosautomaticamente.Permitequeobjetosinteressadossejamavisados damudanadeestadoououtroseventosocorrendonumoutroobjeto(DCC, 2008). b.ProblemanoJogo:Atualizaesdatelagrfica,cenrioseelementosvisuais exibidosparaousurio(GraphicalUserInterfaceGUI),devemserfeitas semprequeexistaatualizaodossubsistemasquemanipulamoseventos lgicosevisuaisdojogo,causandoumforteacoplamentoentreaGUIeesses subsistemas; c.Resultados:AtualizaoautomticadaGUI,comfracoacoplamentoentreos subsistemas lgicos/visuais e a GUI do jogo; State; a.Caracterstica: Usado para permitir que um objeto altere o seu comportamento quando o seu estado muda. Ao utilizar este padro, parecer que o objeto mudou de classe; b.ProblemanoJogo:Asalteraeseevoluesocorridasemcadaobjeto personagemecadaobjetoeventodevemserdiferenciadas,dependendoda caracterstica de cada personagem e evento; c.Resultados:Alteraeseevoluesfeitasemobjetospersonagenseeventos tornam-seindependentesdoestadoqueoobjetoseencontra.OStatese encarrega de avaliar o estado do objeto e fazer as devidas alteraes/evolues; Comomostrado,esseseoutrospadrespodemserutilizadosnodesenvolvimentode jogos,comligeirasadaptaes,viabilizandoasoluodeproblemasaparentemente difceis, mas que j foram lies aprendidas em outros projetos de sistemas. 3. Concluso Comestetrabalho,foipossvelaprenderaliodequeaEngenhariadeSoftware perfeitamenteaplicvelnodesenvolvimentodejogoseletrnicos,mesmousando tcnicasespecficasdeaplicaescomerciais,principalmentequandotrata-se,mais especificamente, de Padres de Projeto. Com a criao do jogo de RPG Os Federa 4 e aMquinadoTempo,observa-sequeasaplicaesdospadresotimizaafasede desenvolvimentoetornaseucdigoreutilizvelparajogosfuturosedefcil entendimento,almdocumprimentototaldoescoponotempoprevisto.Umjogo precisadeumaequipededesenvolvimentoeousodepadrestambmfacilitaa comunicao entre os membros da equipe. Umaboasequnciadestetrabalhoumapesquisafocadaemjogosdeoutrostipos, comoaventura,lutaouesportequepodertrazermuitomaiscontribuiesparao desenvolvimentodejogos,almdacriaodepadresespecficosparajogosde computador. 4. Referncias DCC. Disciplinas do curso de Cincia da Computao [Online]. Central das Disciplinas doDCC/UFBA. -UFBA,2008. Disponvelemhttps://disciplinas.dcc.ufba.br/. Acessado em 11 de maro de 2011. GAMMA,Erich&HELM,Richard&JOHNSON,Ralph&VISSIDES,John. DesignPatterns:ElementsofReusableObject-OrientedSoftware[Livro]. -[s.l.] : ADDISON WESLEY, 1995. PRESSMAN, Roger S. Engenharia de Software - So Paulo : Makron Books, 1995. SILVEIRA,Ismar&SILVA,Luciano.AprendizagemdePadresdeProjetoem CinciadaComputaoatravsdeJogosDigitais. AnaisdoXXVICongressoda SBC. - So Paulo : [s.n.], 2006.