2D Game Nuno Ricardo Curralo Martins, Nº 22392 Bruno Alexandre Amorim Melo, Nº 19857 Trabalho realizado sob a orientação de Rui Pedro Lopes Bárbara Barroso Engenharia Informática 2013/ 2014 2D Game Relatório da UC de Projecto Licenciatura em Engenharia Informática Escola Superior de Tecnologia e Gestão Nuno Martins, Bruno Melo 2013/2014 iii A Escola Superior de Tecnologia e Gestão não se responsabiliza pelas opiniões expressas neste relatório. iv Certifico que li este relatório e que na minha opinião, é adequado no seu conteúdo e forma como demonstrador do trabalho desenvolvido no âmbito da UC de Projecto. ___________________________________________ Rui Pedro Lopes - Orientador Certifico que li este relatório e que na minha opinião, é adequado no seu conteúdo e forma como demonstrador do trabalho desenvolvido no âmbito da UC de Projecto. ___________________________________________ Bárbara Barroso - Co-orientadora Certifico que li este relatório e que na minha opinião, é adequado no seu conteúdo e forma como demonstrador do trabalho desenvolvido no âmbito da UC de Projecto. ___________________________________________ - Arguente Aceite para avaliação da UC de Projecto v vi Dedicatória Dedicamos este projecto especialmente aos nossos pais e aos nossos irmãos, pessoas pelas quais temos uma grande admiração, um grande orgulho e que sempre nos apoiaram, em todos os momentos das nossas vidas. Um muito obrigado a todos eles. Eu, Bruno Melo, quero dedicar este projecto á minha namorada Daniela que sempre me apoiou e nos momentos mais difíceis me incentivou pois sem ela não estaria nesta fase final do curso. vii viii Agradecimentos Queremos agradecer ao nosso orientador, Professor Rui Pedro Lopes, por toda a sua orientação, apoio e disponibilidade prestados durante este ano lectivo. Queremos agradecer às nossas famílias, em especial aos nossos pais, por todo o apoio dado durante a realização do curso, e ainda aos nossos irmãos, que nunca nos deixaram desanimar, sempre nos indicando os melhores caminhos, um enorme obrigado por acreditarem sempre em nós e naquilo que fazemos e por todos os ensinamentos de vida que nos dão. Por fim, queremos agradecer a todos os nossos amigos e colegas que nos acompanharam durante a realização do projecto e que sempre nos acompanharam durante as nossas vidas. Esperamos que esta etapa, que agora terminamos, possa, de alguma forma, retribuir e compensar todo o carinho, apoio e dedicação que constantemente nos oferecem. A eles, dedicamos todo este trabalho. ix Resumo O desenvolvimento de aplicações para smartphones é uma área relativamente recente, mas que tem vindo a crescer a um ritmo bastante rápido. Esta área surge de uma forma natural devido à grande evolução das características dos smartphones e também devido à sua crescente popularidade. As grandes comunidades de programadores que se dedicam a desenvolver aplicações e ajudar quem queira começar a programar para uma das várias plataformas presentes no mercado, aliado ao fácil acesso recursos computacionais, kits de desenvolvimento, documentação e aos dispositivos para o qual se pretende desenvolver a aplicação também ajudam a que esta seja uma área bastante apelativa a novos programadores e que surjam bastantes casos de sucesso. Este trabalho tem o intuito de documentar o desenvolvimento de um jogo em 2D, trazendo uma possível solução, para as diversas dificuldades encontradas no processo. Palavras-chave: Aplicações móveis, jogos, Android, 2D. x xi Abstract The development of mobile applications is an recent area that has been growing quickly. This arises in a natural way due to the great evolution of the characteristics of smartphones and also due to its increasing popularity. The large communities of programmers that develop applications and are willing to help new programmers that are starting to program for one of the several platforms of the market, this fact allied that is easy to access the computing resources, developer kits, documentation and the target devices for the application also contribute to make this a quite appealing area with several success stories. This study aims to document the development of a game in 2D, supplying a possible solution to the problems found in the process. Keywords: Mobile applications, games, Android, 2D. xii xiii Conteúdo 1 Introdução ........................................................................................................................ 21 1.1 Enquadramento ........................................................................................................... 21 1.2 Escolha do Sistema Operativo .................................................................................... 22 2 Motores de Jogos ............................................................................................................. 24 2.1 O que é um Motor de Jogo .......................................................................................... 24 2.2 Unity ........................................................................................................................... 26 2.3 Cocos 2D ..................................................................................................................... 26 2.4 Allegro ........................................................................................................................ 27 2.5 LibGdx ........................................................................................................................ 28 3 Arquitectura e Tecnologia Utilizada ................................................................................ 1 3.1 Descrição detalhada do problema ................................................................................. 1 3.2 Tecnologias utilizadas ................................................................................................... 3 3.2.1 O Android ............................................................................................................... 3 3.2.2 A plataforma Android ............................................................................................ 3 3.2.3 Arquitectura do Android ........................................................................................ 4 3.2.4 SDK ........................................................................................................................ 5 3.2.5 Linguagem Java...................................................................................................... 5 3.2.6 IDE Eclipse ............................................................................................................ 6 4 Implementação ................................................................................................................... 7 4.1 Arte e Desenvolvimento do Jogo ................................................................................ 16 4.2 História ........................................................................................................................ 16 4.3 Regras e Objetivo ........................................................................................................ 16 5 Conclusão ......................................................................................................................... 17 5.1 Trabalho Futuro .......................................................................................................... 17 Referências bibliográficas...................................................................................................... 18 xiv xv Lista de Figuras Figura 1 – Previsão de crescimento dos Sistemas Operativos até 2018 Figura .2 – Ecrã inicial do Jogo Figura .3 - Captura do ecrã de espera para o jogo começar Figura .4 – Captura do ecrã da janela de fim de jogo Figura .5 - Arquitectura do Android. Figura .6 - Código Java, adiciona imagem na animação e faz update desta Figura 7 - Código Java da Classe Assets Figura .8 - Código Java da Classe Background Figura .9 - Código Java, cria a janela quando o acaba o jogo Figura .10 - Código Java da Classe LoadingScreen Figura .11 - Código Java de da Classe MainCar onde é definida a posição e velocidade do carro Figura .12- Código Java para verificar onde é feito o clique Figura .13 - Código Java da Classe Tile Figura .14- Estrutura do Projecto Figura .15 - Percentagem de versões Android activas Figura .16 - Captura de ecrã do ficheiro AndroidManifest.xml xvi xvii Lista de Tabelas Tabela .1- Lista de Motores de Jogos Tabela 2 – Lista das versões de Android xviii Lista de Abreviaturas OHA – Open Handset Aliance HTC – High Tech Computer Corporation SDK – Software Developers Kit 2D – Duas Dimensões 3D – Três Dimensões API - Application Programming Interface GPL - General Public License ADT - Android Development Tools IDE - Integrated Development Environment IBM - International Business Machines xix xx Capítulo 1 1 Introdução Este trabalho de projecto visa a concepção e o desenvolvimento de jogo em 2D, assente numa plataforma móvel, como por exemplo um telemóvel. Foi feita uma pesquisa prática onde foi sendo testada a informação recolhida para o desenvolvimento do nosso projecto. Este relatório está organizado em 5 capítulos. Este, onde é feita uma pequena introdução, são definidos os principais objectivos, caracterização da estrutura do documento e explicação por que motivo foi escolhido Android como sistema operativo onde a aplicação iria ser jogada. No Capítulo 2, explica-se o que é um Motor de Jogo e alguns detalhes de uma amostra deste tipo de aplicações e de frameworks que também é possível utilizar para o desenvolvimento de jogos. No Capítulo 3 é apresentada as soluções e as tecnologias utilizadas na sua concretização. No capítulo 4 é descrita a forma que o projecto foi desenvolvido. No 5º e último capítulo, é apresentado o resumo do projecto, uma análise autocrítica e linhas de investigação para trabalhos futuros. 1.1 Enquadramento As empresas de desenvolvimento de jogos sempre tiveram um papel importante no desenvolvimento de muitas áreas da informática, como por exemplo Inteligência Artificial, Computação Gráfica e Simulação, entre muitas outras. 21 O desenvolvimento de jogos para plataformas móveis, como Android tem vindo a crescer de forma exponencial, pois aliado há grande diversidade de dispositivos e custo dos mesmos, o aumento da qualidade destes dispositivos. Os jogos em plataformas móveis têm também ganho um maior número de utilizadores, pois por vezes o que o jogador quer não é um jogo realista, com gráficos e/ou uma história complexa e que lhe proporcione várias horas de diversão, que actualmente só um Computador ou Consola de Jogos consegue oferecer; o que pretendem é passar um pouco de tempo que tem disponível, ou mesmo alguma distração para ajudar a passar o tempo enquanto esperam por algo. 1.2 Escolha do Sistema Operativo A principal razão que nos levou a desenvolver o jogo para a plataforma Android, foi o grande crescimento que este sistema operativo tem vindo a sofrer nos últimos anos e o crescimento que ainda pode alcançar, fator que pode ser visto na imagem abaixo. Figura 1 – Previsão de crescimento dos Sistemas Operativos até 2018 Por o Sistema Operativo Android ser a plataforma de dispositivos móveis que possui um maior número de utilizadores, possuir uma elevada variedade de ferramentas gratuitas que auxiliam o desenvolvimento são aspectos muito importantes na escolha do Sistema Operativo alvo. Para além das razões anteriormente referidas, tem que se ter em conta a parte económica, pois se a aplicação for bem recebida pela comunidade de utilizadores é possível ganhar dinheiro com este tipo de aplicações. 22 Para publicar uma aplicação para a Google Play Store é necessário ter conta no Google Wallet e pagar uma taxa de registo de 25 Dólares. Para publicar uma aplicação para a loja oficial da Apple é necessário possuir conta no iTunes tendo um custo anual de 99 Dólares sendo necessário renovar esse contrato anualmente, caso contrário, as aplicações deixam de estar acessíveis parra compra. Em todas vendas 30% do preço de venda fica para a loja onde está disponível, Google Play Store ou iTunes. A Apple fornece 50 códigos por cada actualização que a aplicação sofrer, podem ser utilizados para fazer o download da aplicação sem ser preciso pagar o seu custo, são reenviados novos códigos por cada update que a aplicação tiver. 23 Capítulo 2 2 Motores de Jogos Neste capítulo são descritos alguns Motores de Jogos e o que é um Motor de Jogo. 2.1 O que é um Motor de Jogo Os motores de jogo são programas de computador, ou conjunto de bibliotecas desenvolvidos para simplificar o desenvolvimento de jogos ou outras aplicações gráficas em tempo real tanto para computadores, consolas de jogos ou dispositivos móveis. Estes possuem como principal funcionalidade, um motor gráfico 2D e/ou 3D; um motor de física que pode ser utilizado para detectar de colisões ou então para simular a componente de física do jogo. Possuem suporte de scripts, animações, inteligência artificial, som, networking, gestão de memória e de ficheiros, sendo que alguns deles permitem a criação de Grafos de Cenários. Facilitam a criação de novos jogos, pois possuem uma componente visual aliada às restantes funcionalidades. Um motor de jogo não está limitado a um tipo de jogo, sendo possível utilizar partes de código desenvolvido na criação de jogos anteriores para o desenvolvimento de um novo jogo. Não é necessário saber programar para ser capaz de criar um jogo, pois existem Motores de Jogos que podem ser apenas ou podem possuir uma ferramenta gráfica com interface Drag & Drop. Existem também os que não se encontram limitados a um software específico, pois permitem a exportação para vários dispositivos que possuam sistemas operativos diferentes. Este tipo de programas pode também ser designado por middleware. Disponibilizam funcionalidades fundamentais no desenvolvimento de aplicações reduzindo custos, complexidade das tarefas e o tempo necessário para ser possível comercializar a aplicação 24 podendo ser gratuita ou paga. Outro ponto positivo de alguns Motores de Jogos é o facto de permitirem a substituição de uma parte da sua funcionalidade por software que tenha sido desenvolvido especificamente para a mesma função. Nome Linguagem Scripting Multiplataforma SDL Plataforma de Programação Adventure C++ AGSScript Sim Não Windows, Linux C Ada, C++, Sim Sim Windows, Linux, OS X, Game Studio Allegro Library C#, D, DOS Lisp, Lua, Mercury, Pascal, Perl, Python, Scheme Android SDK Cocos2D Java Não C++, Python, JavaScript, Objective-C Construct Baseado em Classic Eventos Unity UnityScript, Android Sim Não Windows, OS X, iOS Não Não Windows Java Sim Windos, Linux, iOS, C#, BOO Libgdx Android, BlackBerry Java Sim Não Windows, Linux, OS X, iOS, Android, HTML5 Tabela 1 – Lista de Motores de Jogos Iremos agora descrever de uma forma um pouco mais aprofundada alguns dos Motores de Jogos indicados na Tabela. 1. 25 2.2 Unity O Unity é um Motor de Jogo multiplataforma desenvolvido pela Unity Technologies, nas versões anteriores à 4.3 apenas permitia a criação de jogos em 3D, mas a partir desta versão já é possível a criação de jogos 2D de raíz. Encontra-se disponível em duas versões diferentes, Unity Free e Unity Pro. O Unity Free é uma versão livre disponível globalmente excepto para empresas, organização educacional, académica ou entidade governamental com um orçamento superiro a 100.000,00 Dólares. Esta versão mostra um painel do Unity quando o jogo é iniciado, em jogos Stand-Alone, em jogos on-line é mostrada uma marca de água, ambas as marcas são impossíveis de retirar. A versão comercial do Unity tem um custo de 1.500,00 Dólares, possuindo todas as funcionalidades da versão livre, com esta versão é possível formatar texturas, utilizar iluminação global e efeitos pós-processamento. As scripts podem ser criadas em Momo 2.6, .NET, C#, BOO (trata-se de linguagem inspirada em python) ou UnityScripr (linguagem inspirada na sintaxe de ECMAScript) A partir da versão 3.0 existe uma versão costumizada de MonoDeveloper que permite fazer o debug de scripts. Já foram desenvolvidos jogos que se tornaram bastante conhecidos utilizando esta ferramenta, alguns dos exemplos disso são os seguintes: Deux Ex: The Fall Bad Piggies Blackguards Edge of the World 2.3 Cocos 2D O Cocos 2D é uma framework open-source desenvolvida em Python com recurso há libraria “pyglet”, mas tem vindo a sofrer alterações para suportar outras linguagens e 26 plataformas. O próprio programa possui diversas frameworks, cada uma delas utiliza uma linguagem de programação diferente e cada um delas permite desenvolver jogos para plataformas diferentes. Esta framework utiliza desde C#, Objective C, Java, JavaScript e GO (Linguagem desenvolvida pela Google). Alguns dos jogos desenvolvidos tendo utlizado Cocos 2D foram: IRobot Bindary Defense Flat Bot Robo-T2 Tetrico 2.4 Allegro Allegro é uma libraria que possui suporte gráfico 2D, manipulação de imagens, permite a saída de texto, áudio e temporizadores, componentes comuns a muitos outros componentes necessários no desenvolvimento de jogos. A versão 5.1.8 foi lançada a 12-01-2014. A libraria foi desenvolvida na linguagem de programação C e é possível ser utilizada em C, C++ e Objective-C. Algumas das versões são desenvolvidas pela comunidade de utilizadores, permitindo assim aumentar a capacidade desta libraria. Alguns dos jogos desenvolvidos utilizando Allegro são apresentados na seguinte lista: Adagio Worminator Dogfight Scrabble 27 Bip 2.5 LibGdx É um Motor de Jogo que permite desenvolver de jogos multiplataforma, onde é possível desenvolver jogos para Windows, Android e iOS. Esta framework foi desenvolvida em Java com partes do código desenvolvido em C/C++, como a parte que permite processamento áudio e física. É possível criar um projecto utilizando o LibGdx, importar para a IDE Eclipse desenvolver o jogo sendo no fim apenas necessário alterar uma pequena parte do código para este funcionar nos diferentes sistemas operativos. Alguns jogos desenvolvidos utilizando LibGdx foram: 28 Bus Jumper Bittracker Welatraumsodat3D Jumparoo! Capítulo 3 3 Arquitectura e Tecnologia Utilizada 3.1 Descrição detalhada do problema A evolução dos componentes dos dispositivos móveis levou a um aumento no número de jogos disponíveis para estes dispositivos, pois torna-se mais fácil desenvolver uma aplicação quando não é necessário ter atenção a gestão da memória do dispositivo. Este projecto tem como objectivo o desenvolvimento de uma aplicação para telemóveis, mais especificamente de um jogo em 2D. A aplicação é composta por um menu inicial que mostra uma imagem relativa ao jogo, o nome, a história do jogo e um botão para inicializar o jogo. Figura 2 – Ecrã inicial do Jogo 1 Quando o utilizador toca neste botão, é apresentada uma mensagem para tocar no ecrã do dispositivo para inicializar o jogo, este segundo ecrã foi inserido para o utilizado não ser apanhado desprevenido quando o jogo começar e perca quase instantaneamente. Figura 3 – Captura do ecrã de espera para o jogo começar Quando o utilizador perde é mostrada a mensagem a dizer que o jogo acabou e qual a pontuação, quando o jogador volta a tocar no ecrã é mostrado o menu inicial, para o jogo ser reiniciado. Figura 4 – 2 Captura do ecrã da janela de fim de jogo 3.2 Tecnologias utilizadas 3.2.1 O Android O Android foi um projecto inicialmente desenvolvido por uma Start - Up americana em Palo Alto (Califórnia – USA) chamada Android Inc que desenvolvia uma plataforma para telemóveis baseada em Linux. Sendo em 2005 foi comprada pela Google que tornou o projecto público em finais de 2007 com o objectivo de apresentar a primeira plataforma Open Source de desenvolvimento para dispositivos móveis. Actualmente o Android é mantido por um grupo denominado Open Handset Alliance (OHA), que é formado por mais de 33 empresas das quais a própria Google, Motorola, Sony Ericsson, Samsung, HTC entre outras. 3.2.2 A plataforma Android O Android é uma plataforma de desenvolvimento de aplicações para dispositivos móveis. As aplicações são criadas utilizando a linguagem de programação Java e são compiladas em bytecodes Dalvik e executadas numa máquina virtual desenvolvida especialmente para utilização em dispositivos móveis denominada por Dalvik virtual machine, que é desenvolvida para o uso nos dispositivos móveis e que possam ser executados em qualquer dispositivo com Android. O Google disponibiliza o Android SDK que disponibiliza as APIs e ferramentas necessárias para o desenvolvimento de aplicações, tendo recursos disponíveis, tais como: Application framework que proporciona a reutilização de componentes. Dalvik virtual machine é optimizada para dispositivos móveis. Gráficos optimizados permite às aplicações Android utilizar bibliotecas 2D e 3D baseada na especificação OpenGL. 3 Rico Ambiente de desenvolvimento que apresenta um emulador de dispositivo, ferramentas de depuração, memória e um plugin ADT (Android Development Tools) para o Eclipse. 3.2.3 Arquitectura do Android O Android é uma plataforma que integra desde o sistema operativo, até middleware e aplicações, conforme pode ser observado na figura 5. A arquitectura é dividida em várias camadas que são o núcleo do sistema operativo, bibliotecas, runtime, framework e aplicações. Figura 5 – Arquitetura do Android. Na camada do núcleo baseada em Linux (Linux Kernel), é a base da camada. Localizase o sistema operativo da plataforma, responsável por serviços denominados de baixo nível como gestão de processos, de memória, segurança, pilha de redes. Na camada de bibliotecas (Libraries), ficam as APIs desenvolvidas em C/C++ e que dão suporte à renderização 3D (OpenGL ES), gestão de base de dados (SQLite) e suporte aos diversos formatos de vídeo e áudio. 4 Na camada de runtime (Android Runtime), encontram-se os componentes como as core libraries, que disponibilizam a API Java necessária para a escrita do código de programação das aplicações, bem como a Dalvik Virtual Machine, que é a máquina virtual que dará condições para que a aplicação Java desenvolvida possa ser executada. Na camada de framework (Application Framework), estão localizadas as APIs que serão utilizadas pelas aplicações que executam sobre a plataforma do Android, como por exemplo, localização e notificação. Na camada de aplicações (Applications), estão representadas as aplicações que são executadas sobre a plataforma, sejam elas nativas como o caso da calculadora, da agenda, dos contactos, do calendário, ou aplicações desenvolvidas por terceiros como é o caso do jogo que será desenvolvida neste trabalho. Para esta camada, não existe diferença entre aplicações nativas e aplicações de terceiros, todas são escritas com as mesmas APIs e executadas no mesmo runtime, inclusive tendo a possibilidade da troca de uma aplicação nativa por outra que tenha a mesma finalidade e seja desenvolvida por terceiros ou pelo próprio utilizador. 3.2.4 SDK O kit de desenvolvimento para Android (Android SDK) está disponível para Windows, Linux e MacOS, provendo ao desenvolvedor um conjunto rico de ferramentas que inclui um depurador e emulador que permite testes em ambientes controlados, bibliotecas básicas para o desenvolvimento Android, documentação, código de exemplo e tutoriais. 3.2.5 Linguagem Java A linguagem utilizada pela plataforma Android é Java. Portanto, ao utilizar o SDK oficial, a escolha pela linguagem é um pré-requisito. Entretanto, a máquina virtual não é padrão, e sim uma máquina criada especialmente para a plataforma, conhecida como Dalvik. Sendo assim, existe namespace específico do Android, com classes especialmente criadas para este ambiente. 5 Outra grande vantagem é a ampla documentação existente para Java disponível na Internet. A linguagem Java foi criada pela Sun Microsystems, que foi comprada pela Oracle, tendo como base a programação orientada a objectos. 3.2.6 IDE Eclipse O IDE Eclipse segue o modelo open source de desenvolvimento de software. É utilizado por programadores para o desenvolvimento de aplicações implementadas nomeadamente em Java, suportando ainda outras linguagens de programação. Foi na IBM onde se iniciou o desenvolvimento da primeira versão do produto e posteriormente foi doado como software livre para a comunidade. Foi usado o IDE Eclipse que tem um meio ambiente para programar, testar e depurar aplicações móveis e permite um processo rápido e fácil para o desenvolvimento de aplicações para Android. 6 Capítulo 4 4 Implementação Neste capítulo irão ser descritas as instruções de programação do jogo. Para o desenvolvimento foi utilizada a IDE Eclipse juntamente com o plugin ADT e uma framework baseada em LibGDX disponibilizada na Internet. O projecto foi desenvolvido utilizando 3 Packages para uma melhor compreensão e estruturação das classes necessárias para o desenvolvimento. Os packages são com.bmnm.framework, com.bmnm.framework.implementation e com.bmnm.sabotaged. Todas as classes que compõem o projecto estão inseridas num package distinto, dependendo da função que desempenham no jogo. O package com.bmnm.framework.implementation contem as classes AndroidAudio, AndroidFastRenderView, AndroidFileIO, AndroidGame, AndroidGraphics, AndroidImage, AndroidInput, AndroidMusic, AndroidSound, MultiTouchHandler, SingleTouchHandler e TouchHandler. No package com.bnnm.framework estão as classes Audio, FileIO, Game, Graphics, Image, Input, Music, Pool, Screen e Sound. No package com.bmnm.sabotaged encontram-se as classes Animation, Assests, Background, GameScreen, LoadingScreen, MainCar, MainMenuScreen, SampleGame, SpalshLoadingScreen e Tile. O projecto foi desenvolvido utilizando três packages, os dois primeiros contêm a framework do Android, disponibilizada na internet que nos permitiu exportar o jogo, sendo que o terceiro contem o jogo desenvolvido por nós. Isto deveu-se para ser possível uma melhor compreensão e estruturação das classes necessárias para o desenvolvimento. A package com.bmnm.sabotaged é o núcleo do jogo e foi o que nós desenvolvemos. A cada classe pertencente a este package tem uma função específica. 7 A Classe Animations permite-nos gerir qual a imagem correcta para o carro em cada momento do jogo. Figura 6 – Código Java, adiciona imagem na animação e faz update desta A Classe Assets foi criada com o intuito de apenas declarar os objectos/métodos a serem usados pelo jogo (imagens, sons, etc.) Figura 7- Código Java da Classe Assets 8 A Classe Background como o próprio nome indica, é responsável pelo fundo da aplicação. Controla a velocidade e se necessário também move o fundo. Figura 8 – Código Java da Classe Background A Classe GameScreen Esta é a classe mais importante do jogo porque é a classe centralizadora, onde todos os outros objectos são usados e o desenrolar da aplicação é gerado. 9 Figura 9 – Código Java, cria a janela quando o acaba o jogo A Classe LoadingScreen Esta classe carrega os objectos para as respectivas variáveis para estas serem usadas durante a aplicação. Cria também um pequeno ecrã de espera enquanto os objectos são carregados. Figura 10 – Código Java da Classe LoadingScreen 10 A Classe MainCar é responsável pela criação do nosso carro. Tem todos os seus atributos assim como métodos necessários para a gestão do objecto. Figura 11 – Código Java de da Classe MainCar onde é definida a posição e velocidade do carro A Classe MainMenuScreen cria o ecrã de início do jogo em que apresenta uma pequena imagem com o contexto do jogo e onde se pode começar efectivamente a jogar. Figura 12 – Código Java para verificar onde é feito o clique 11 As Classe SampleGame e SplashLoagingScreen fazem parte do framework que nós utilizamos e permite que o jogo seja jogado em dispositivos Android. Sendo que a segunda cria o ecrã antes da classe MainMenuScreen. A classe Tile é muito importante no nosso jogo, pois contem a detecção de colisão do nosso carro com os carros parados na estrada e com a relva que delimita lateralmente o mapa. Para criar estes objectos foi utilizado um método que nos permite, no futuro, criar vários mapas e carrega-los para o jogo sem grande carga de trabalho. Figura 13 – Código Java da Classe Tile 12 Este método é baseado num arquivo .txt que contem um desenho do mapa desejado baseado em números que por sua vez são carregados para o jogo através da função loadMap (presente na classe GameScreen) e depois convertidos para os objectos definidos no jogo, neste caso carros e as bermas da estrada. A Figura. 14 exibe a estrutura do projecto no que se refere aos packages e às classes implementadas. Figura. 14 – Estrutura do Projecto 13 Para ser possível executar o jogo em dispositivos Android é necessário um ficheiro designado AndroidManifest.xml em que é definido, entre outros, as versões mais antigas e para qual a aplicação foi desenvolvida. Esta numeração não é igual há designação comum, mas sim o nível da API. Versão da Plataforma Nível da API Nome da Versão Android 4.4 19 KitKat Android 4.3 18 Jelly_Bean_MR2 Android 4.2, 4.2.2 17 Jelly_Bean_MR1 Android 4.1, 4.1.1 16 Jelly_Bean Android 4.0, 4.0.1, 4.0.2 15 Ice_Cream_Sandwich_MR1 Android 4.0, 4.0.1, 4.0.2 14 Ice_Cream_Sandwich Android 3.2 13 Honeycomb_MR2 Android 3.1 12 Honeycomb_MR1 Android 3.0 11 Honeycomb Android 2.3.3, 2.3.4 10 Gingerbread_MR1 Android 2.3, 2.3.1, 2.3.2 9 Gingerbread Android 2.2 8 Froyo Android 2.1 7 Eclair_MR1 Android 2.0.1 6 Eclair_0_1 Android 2.0 5 Eclair Android 1.6 4 Donut Android 1.5 3 Cupcake Android 1.1 2 Base_1_1 Android 1.0 1 Base Tabela 15 – Lista das versões de Android 14 Figura. 15 – Percentagem de versões Android activas A nossa aplicação foi desenvolvida para executar em uma grande parte das versões existentes do Android (desde a versão 2.2 API 8 até a mais actual) sendo que a plataforma ideal é o Android 4.2, 4.2.2 API 17. A Figura 16 mostra o conteúdo do nosso ficheiro AndroidManifest.xml Figura 16 – Captura de ecrã do ficheiro AndroidManifest.xml 15 4.1 Arte e Desenvolvimento do Jogo O jogo é composto por vários objectos, cada um deles com uma função distinta. Existe a Estrada, que é utilizada como imagem de fundo enquanto o jogo está a ser executada. Temos dois tipos de Carros, os que são utilizados como obstáculos e o Carro que é o objecto principal, controlado pelo utilizador para concluir o jogo. A Relva que está a ser utilizada como limite visual e físico dos limites laterais do jogo. 4.2 História O nome do jogo ajuda a perceber um pouco do jogo (Sabotaged). A história por trás do jogo é simples. Durante a noite alguém sabotou o carro do jogador e de manhã, quando saiu para ir trabalhar quando chegou há auto-estrada, o carro começou a virar para a direita, e quando o jogador tentou travar, os travões não funcionavam. A única possibilidade, para além de ter um acidente horrível, é a de continuar a conduzir até que o carro fique sem baterias. 4.3 Regras e Objetivo Este jogo não possui regras, pois trata-se de um jogo bastante simples não possuindo nenhum mecanismo de verificação da ocorrência de batota, esse ponto é deixado há vontade do jogador. O objectivo do jogo é sobreviver o mais tempo possível, esquivando-se dos carros que se estão a deslocar no mesmo sentido e não sair do limite da estrada, que se encontra nas margens do dispositivo que se está a jogar. 16 Capítulo 5 5 Conclusão A escolha deste projecto foi motivada para além das razões apresentadas no capítulo 1, por nos ser possível escolher a plataforma alvo para a qual iriamos desenvolver o projecto, sendo que após muita pesquisa escolhemos a plataforma Android. A aplicação desenvolvida cumpriu com os objectivos propostos. Era pretendida a realização de jogo em 2D para um dispositivo móvel. A aplicação foi concluída com sucesso, tendo sido cumpridos todos os requisitos da proposta de projecto. Futuramente poder-se-á fazer um melhoramento em termos de design, diferentes modos de jogo ou outras funcionalidades que o programador que quiser continuar o projecto queira aumentar. 5.1 Trabalho Futuro Como todas os bons jogos, o trabalho de desenvolvimento é contínuo, sendo que o nosso projecto pode não ser a excepção, podem ser adicionadas e/ou melhoradas algumas funcionalidades, tais como: Quando um novo jogo é criado, poder ser possível escolher imagens de fundo distintas; Permitir a criação de contas para comparar a melhor pontuação obtida com amigos e/ou com a comunidade de utilizadores; Serem adicionados novos tipos de obstáculos; 17 Referências bibliográficas Zechner, M., Green, R - Beginning Android Games – Apress - 2012 http://developer.android.com/reference/packages.html http://developer.android.com/sdk/index.html http://developer.android.com/distribute/index.html http://developer.android.com/tools/debugging/debugging-devtools.html http://pt.wikipedia.org/wiki/Android http://en.wikipedia.org/wiki/Android_software_development http://developer.android.com/tools/sdk/eclipse-adt.html http://pixxyz.blogspot.pt/2013/03/introducao-ao-desenvolvimento-android.html http://www.youtube.com/watch?v=Klsh6KqFrtc&list=PLFEE82D5D49864E94&index=8 https://www.allegro.cc/about http://www.cocos2d-x.org/ http://en.wikipedia.org/wiki/Unity_(game_engine) http://libgdx.badlogicgames.com/ http://en.wikipedia.org/wiki/Cocos2d http://en.wikipedia.org/wiki/LibGDX https://www.youtube.com/watch?v=Xe8xx55pxLk https://www.youtube.com/watch?v=Rj1w9atPpHk https://play.google.com/about/developer-distribution-agreement.html https://developer.android.com/distribute/googleplay/developer-console.html https://support.google.com/googleplay/android-developer/answer/112622?hl=en http://developer.android.com/guide/topics/manifest/uses-sdk-element.html http://www.idc.com 18