Desenvolvimento de um Framework de Jogos 3D para Celulares - PDF
Download "Desenvolvimento de um Framework de Jogos 3D para Celulares"
Renato Paixão de Sintra
1 Desenvolvimento de um Framework de Jogos 3D para Celulares Fabrício Brasiliense Departamento de Informática e Estatística(INE) Universidade Federal de Santa Catarina (UFSC) Campus Universitário Trindade- CEP: Florianópolis, SC Resumo: Este artigo é uma descrição do trabalho de conclusão de curso e tem como objetivo o estudo e criação de um framework de jogos 3D para plataforma móvel. Ele contem um estudo teórico sobre uso e desenvolvimento de frameworks, algumas das tecnologias para ambiente móvel e jogos. Foi utilizado a metodologia de desenvolvimento Envolving Frameworks para a criação do framework, que foi criado de forma evolutiva durante o desenvolvimento de três protótipos de jogos. Para cada jogo foi utilizado um rascunho de game design. A plataforma em que foi desenvolvida foi a Java Micro Edition e utilizado a API A Mobile 3D Graphics API for J2ME. No final do trabalho, foi produzido um framework com uma arquitetura definida e reusável. 1. Introdução O mercado de jogos atualmente tem movimentado na ordem de bilhões de dólares em todo o mundo. A tecnologia móvel é uma tecnologia interessante, pois possibilita a indústria de software brasileira alcançar um elevado grau de desenvolvimento devido a complexidade necessária para seu estabelecimento. Mesmo os jogos para celulares tendo um tamanho muito inferior aos jogos de desktop, é importante o uso de técnicas de reuso de código como orientação a objetos, componentes e frameworks para reduzir o tempo de desenvolvimento. Tendo em vista este contexto e o potencial da área de jogos para celulares, este artigo apresenta o um estudo sobre o desenvolvimento de jogos para celulares através do desenvolvimento de um framework para jogos 3D. Para a criação do framework foi utilizada a metodologia de frameworks evolutivos propostos por Don Roberts e Ralph E. Johnson denominada Envolving Frameworks [1]. Esta metodologia é um conjunto de padrões que devem ser seguidos para o desenvolvimento do framework. Desse modo o framework foi construído de forma evolutiva durante a criação de três protótipos de jogos, os jogos Gor, Sky e Tan. Estes três protótipos foram gerados especificamente para o desenvolvimento do framework, no entanto, são projetos de jogos reais, que potencialmente poderiam se tornar futuramente jogos comerciais. A plataforma de desenvolvimento para ambiente móvel escolhida para o framework foi a Java Micro Edition (J2ME) [2] utilizando a configuração CLDC 1.1 e perfil MIDP 2.0. Foi utilizado também o pacote Mobile 3D Graphics API for J2ME (M3G) [2] para o desenho dos gráficos 3D. Esta plataforma foi escolhida por ser uma plataforma completamente livre e já bem aceita no meio acadêmico.
2 2. Desenvolvimento de Frameworks Frameworks é a tecnologia que tenta fazer o máximo de reuso possível. Faz o reuso da arquitetura através do controle do fluxo da aplicação, modelo de como as classes se inter-relacionam e a definição de como podem ser adaptadas pelos usuários para a geração de novas aplicações. O reuso de código é feito por suas classes e sua biblioteca de componentes.. Johnson define em como Framework é uma aplicação semicompleta reusável que pode ser especializada para a construção de aplicações personalizadas. [3]. Além do reuso de código o uso de frameworks também proporciona uma série de outras vantagens como o aumento na qualidade do software desenvolvido e um padrão entre as aplicações desenvolvidas com ele. Quanto ao desenvolvimento, os frameworks devem ser desenvolvidos para serem o mais flexíveis possíveis, pois devem ser capazes de se adaptarem aos mais diversos requisitos, portanto, a grande maioria das necessidades do domínio deverão ser previstas ainda durante seu desenvolvimento, e para as não previstas devem existir alternativas Frameworks Evolutivos Na literatura existem algumas metodologias para o desenvolvimento de frameworks. Entre elas uma proposta por propostos por Don Roberts e Ralph E. Johnson denominada Envolving Frameworks [1]. Esta metodologia propõe um conjunto de nove padrões que devem ser seguidos durante o desenvolvimento do framework. Dos nove padrões apenas os três primeiros padrões que foram utilizados por se tratarem do estagio inicial de desenvolvimento de um framework serão descritos abaixo. 1. Os Exemplos: Para iniciar o desenvolvimento do framework este padrão propõe que sejam utilizadas aplicações de exemplos, cita ainda que é possível implementar as aplicações exemplos de forma seqüencial na tentativa de desenvolver o framework a medida que vão sendo criadas; 2. Framework Caixa Branca: Este padrão recomenda que durante o desenvolvimento das primeiras versões do framework o desenvolvedor deve optar por fazer o reuso através da herança. O uso do reuso através da composição de componentes não é recomenda devido ao desenvolvedor ainda não ter informações suficientes para julgar quais as partes dos componentes são fixas e quais são mutáveis entre diferentes aplicações do domínio; 3. Biblioteca de Componentes: Para tentar fazer o reuso de certos componentes que são usados pelas diferentes aplicações mas que não são essenciais ao framework, este padrão orienta que quando surge a necessidade de componentes que já foram implementados em aplicações anteriores, sejam adicionados na biblioteca de componentes do framework. 3. Dispositivos Móveis e Celulares O mercado de dispositivos móveis, mais especificamente os aparelhos celulares, tem crescido muito nos últimos anos. A partir de 2001 quando passou a ser adicionado nos
3 aparelhos a capacidade de fazer download de aplicações pela rede, o mercado de software para dispositivos móveis também passou a crescer muito. Entre estes softwares se encontram os jogos, que hoje é um dos principais atrativos na escolha dos aparelhos pelos usuários. No entanto esse crescimento muito acelerado trouxe um grande problema para os desenvolvedores. Além dos problemas comuns como baixa capacidade de processamento e memória dos aparelhos móveis, com uma dezena de fabricantes e centenas de aparelhos disponíveis, criou-se uma heterogeneidade de ambientes de desenvolvimento. Para tentar reduzir este problema na industria é possível encontrar algumas iniciativas para se criar um padrão, entre elas as mais comuns são a Brew e a J2ME. A Brew (Binary Runtime Environment for Wireless) [4] é uma plataforma desenvolvida pela Qualcomm que roda sobre o sistema operacional, tem como principal objetivo minimizar as diferenças entre aparelhos disponibilizando uma API sólida e comum O J2ME (Java 2 Micro Edition) [2] é um conjunto de APIs simplificada da versão J2SE (Java 2 Standard Edition) para dispositivos com baixos recursos de hardware. Geralmente a máquina virtual é implementada pelos próprios fabricantes dos aparelhos utilizando as especificações da SUN. 4. Jogos Os jogos eletrônicos são um meio de entretenimento muito difundido, estão disponíveis nos mais diversos aparelhos e nos mais diversos estilos. De acordo com uma pesquisa feita pela Entertainment Software Association nos Estados Unidos [5], 50\% dos americanos jogam jogos eletrônicos. Uma das principais características dos jogos é a interatividade. Ao contrário de um livro ou um filme, o jogador tem o poder de alterar o rumo da história, que muitas vezes depende do conhecimento do jogador sobre o jogo, e o assunto por ele tratado. O desenvolvimento de jogos além de ser um mercado bastante promissor é um tópico interessante na área da computação por abordar o estudo em várias ciências, técnicas e não técnicas. Alguns exemplos destas áreas são: Computação gráfica, inteligência artificial, sons e música, imagem e fotografia, história e psicologia. Diferente das aplicações convencionais que geralmente tem como objetivo a automação e resolução de um problema já existe, nos jogos deve-se antes elaborar todas suas regras, histórias e conceitos para que o problema possa ser gerado e então passar para as etapas tradicionais de elaboração do software, como analise, projeto, implementação e testes. Para auxiliar a elaboração inicial de um jogo é comum a criação de um game design. O game design é um documento que descreve com diferentes visões de detalhamento todas as partes de um jogo, futuramente este documento é utilizado pelos desenvolvedores para desenvolvimento do software e todos os recursos necessários, como imagens, vozes, modelos, etc.
4 5. Desenvolvimento do Framework Após o estudo inicial das tecnologias envolvidas no desenvolvimento de jogos para celulares, foi decidido utilizar a metodologia de frameworks evolutivos para a criação de um framework para jogos 3D utilizando a plataforma J2ME. Utilizando o primeiro padrão dos 3 exemplos foi definido que seriam desenvolvidos três protótipos de jogos, um seguido do outro, durante o desenvolvimento de cada protótipo o framework é criado de forma evolutiva, tentando na medida do possível aproveitar o máximo de código dos protótipos já produzidos anteriormente. Devido a falta de tempo para testes e depuração em um aparelho real, somado a dificuldade de encontrar um aparelho disponível para realização do projeto que possua o pacote JSR 184 com o pacote Mobile 3D Graphics API for J2ME, não foi possível testar os softwares desenvolvidos em um aparelho real. No entanto com o uso de emuladores foi possível criar um ambiente de desenvolvimento para a elaboração do framework Primeiro Protótipo: Gor No jogo o jogador vê através da visão do personagem, que inicia sua jornada em um ponto qualquer de um labirinto. O labirinto é escuro, permitindo apenas alguns metros de visibilidade, formado por diversos corredores e intersecções. A figura 1 contem a imagem do jogo no simulador. Figura 1: Tela do Gor no emulador Este protótipo foi desenvolvido apenas para ser utilizado como fonte informação para o domínio do framework, portanto, nada do framework foi desenvolvido. Na figura 2 é possível ver o diagrama de classes.
5 Figura 2: Diagrama final do primeiro protótipo 5.2 Segundo Protótipo: Sky O objetivo do jogo é dirigir uma nave espacial em até o final de uma pista antes que o combustível acabe. A nave pode acelerar, frear ou transladar para as laterais. A nave também é capaz de saltar, que é o principal recurso do jogador para transpor os obstáculos da pista. A figura 3 contém a tela do jogo no emulador. Figura 3: Tela do Sky no emulador Como ainda não temos o framework definido, uma vez que ele será construído em conjunto com este segundo protótipo. Foi necessário primeiro criar um rascunho de projeto do protótipo Sky (ver figura 4) como se ele fosse desenvolvido sem a utilização
6 de um framework. Com este diagrama foi feito uma comparação com o do primeiro protótipo (ver figura 2) para identificação das classes comuns. As classes comuns foram refatoradas e inseridas no framework. A figura 5 contém o diagrama final do framework e aplicação. Figura 4: Rascunho de projeto sem o framework do jogo Sky Figura 5: Diagrama final do Sky da aplicação e o framework 5.3 Terceiro Protótipo: Tan
7 O terceiro jogo é o Tan. Neste jogo o jogador pilota um tanque e tem como objetivo defender sua base de tanques inimigos que aparecem aleatoriamente no mapa. O mapa é composto de várias estruturas, que tem influência de maneiras diferentes no mapa. Dependendo do tipo da estrutura ela pode ter diferentes funcionalidades, como os blocos de concreto, que bloqueiam tanto a passagem do tanque quanto seus tiros, mas podem ser destruídos. A figura 6 pode ser visto uma tela do jogo. Figura 6: Tela do jogo Tan no emulador O objetivo deste protótipo é testar e refinar o framework desenvolvido no segundo protótipo. Portanto o framework desenvolvido no segundo protótipo foi utilizado como base para seu desenvolvimento, na medida que novos requisitos foram aparecendo ele foi adaptado continuamente para permitir as novas funcionalidades. Entre diversas alterações no framework a mais marcante foi uma mudança na hierarquia de classes do framework com a remoção da class Jogador. Diante da necessidade de representar tanto o jogador como os inimigos (ObjetoAmbiente) na mesma hierarquia de classes, optou-se por remover a classe Jogador e no framework considerar como jogador qualquer objeto do tipo ObjetoAmbiente. A figura 7 contém o diagrama final do terceiro protótipo.
8 Figura 7: Diagrama final do terceiro protótipo 6. Conclusões No final do terceiro protótipo com a segunda versão do framework, conseguiu-se produzir um framework com uma arquitetura que inclui algumas entidades para a serem utilizadas nos jogos, suas características e relacionamentos. Na figura 8 é possível ver um gráfico com a quantidade de linha de código desenvolvida em cada um dos protótipos para a aplicação, framework e a biblioteca de componentes. Pela quantidade de código reaproveitado em cada projeto foi considerado como o resultado do framework foi satisfatório. Figura 8: Gráfico com o número de linhas de código implementadas em cada protótipo
9 É importante também salientar algumas considerações quanto ao desenvolvimento do framework. Primeiro, o fato de tanto os jogos como os frameworks serem realizados por uma única pessoa em curto período de tempo pode ter influenciado bastante na uniformidade das mudanças durante os diferentes protótipos. Segundo, como foram desenvolvidos protótipos, e estes tratam das partes mais específicas de cada jogo,tornou se mais difícil o aproveitamento de código. Terceiro, o uso da API 3D MGE, devido a diferença no modo que foram utilizadas entre os protótipos e ao aprendizado do autor durante seus desenvolvimentos, a reutilização dos componentes gráficos da interface 3D foi quase inexistente. Quanto aos padrões da metodologia de frameworks evolutivos se mostraram bastante interessantes, no entanto apenas três dos nove padrões puderam ser utilizados. Devido a não execução do framework e os jogos produzidos em um aparelho, não foi possível verificar as limitações em ambiente real, no entanto, permitiu o conhecimento de suas das APIs J2ME e M3G. Este é o principal ponto que deveria ser abordado em trabalhos futuros. 7. Referências [1] ROBERTS, D.; JOHNSON, R. E. Evolving frameworks: A pattern language for developing object-oriented frameworks. In: Pattern Languages of Program Design 3. Addison Wesley, Disponível em: <citeseer.ist.psu.edu/roberts96evolving.html>. [2] JAVA Technology. Disponível em: <http://www.java.sun.com>. Acesso em: 21/11/2005. [3] JOHNSON, R.; FOOTE, B. Designing reusable classes. Journal of Object-Oriented Programming, [4] QUALCOMM Brew Home. Disponível em: <http://brew.qualcomm.com/brew/en/>. Acesso em: 21/10/2005 [5] ENTERTAINMENT Software Association. Disponível em: <http://www.theesa.com>. Acesso em: 12/11/2005.