Esse artigo faz parte da revista WebMobile edição 20. Clique aqui para ler todos os artigos desta edição

Clique aqui para ler este artigo em PDFimagem_pdf.jpgerdana;"> 

De que se trata o artigo:

Trata do desenvolvimento de um jogo completo para dispositivos móveis utilizando a tecnologia JavaME, passando por toda sua construção.

 

Para que serve:

Serve como referência para o desenvolvimento de jogos nesta plataforma de desenvolvimento, pois descreve todos os elementos que devem fazer parte de tal aplicação e mostra como construí-lo, e ainda pode ser útil para o desenvolvimento de outros tipos de aplicações nesta tecnologia que não sejam jogos.

 

Em que situação o tema é útil:

O desenvolvimento e utilização de jogos é sempre um tema interessante para desenvolvedores e usuário. E uma das principais utilizações de JavaME é a programação de jogos. Esta é a tecnologia Java para o desenvolvimento de aplicações para dispositivos móveis, então qualquer desenvolvedor que deseje se aventurar neste ramo precisa ter conhecimento desta tecnologia, e este artigo pode ser usado como referência para isso.

 

Uma das principais utilizações de JavaME é a programação de jogos. Neste artigo, isso será abordado através de um jogo standalone que iremos desenvolver. Esta aplicação é um simples jogo de basquete no qual o jogador joga contra um oponente controlado pelo computador. Cada jogo dura exatamente dois minutos. O objetivo do jogo é arremessar tantas bolas você puder e evitar que o oponente faça o mesmo.

 

Principais Funções

Um jogo típico no ambiente JavaME pode ser formado pelos seguintes itens:

·   Uma tela de boas vindas que redireciona automaticamente ao menu principal;

·   O menu principal;

·   A tela principal. Essa é onde o jogo é realmente executado;

·   Menu de níveis (configuração da dificuldade do jogo, etc.);

·   Tela de instrução;

·   Tela “Sobre”.

 

A tela principal e a tela de boas vindas são executadas a partir de classes que são estendidas da classe Canvas. Esta classe é definida como sendo uma API de baixo nível, o que significa que ela permite controle total do display do celular no nível de pixels. Todas as outras telas são executadas a partir de classes de API de alto nível que usam controles padrões do JavaME.

Quando programamos aplicações para JavaME, devemos também considerar como lidar com eventos únicos do sistema, tais como interrupções de chamadas. Quando tratamos este tipo de evento, podemos querer congelar o estado atual do jogo ou então ser capaz de salvar o estado deste jogo após sairmos da aplicação.

Para iniciarmos, precisamos baixar o JavaME wireless toolkit. Este é o mais elementar SDK para este ambiente de programação. O principal objetivo deste toolkit é compilar os arquivos fontes em Java e produzir dois arquivos de deployment (implantação): um arquivo JAR que encapsula todos os arquivos de classes e um arquivo JAD (Java Application Descriptor). O arquivo JAD provê dados sobre a aplicação, tais como autor, tamanho do arquivo JAR, número da versão, etc. Este SDK pode ser integrado com as mais avançadas IDE’s, tais como Eclipse ou NetBeans. Mais informações sobre o Sun Java Wireless Toolkit na Nota DevMan 1.

 

Estrutura do Jogo

A Figura 1 apresenta a estrutura geral do jogo.

 

Figura 1. Estrutura geral do jogo

 

O jogo inicia com uma tela de abertura, e depois de 5 segundos redireciona para a tela de menu. Na tela de meu o jogador tem a opção de iniciar o jogo, configurar o nível de dificuldade, exibir uma tela "Sobre" ou exibir as instruções de uso do jogo. Cada tela é gerenciada por sua própria classe. Por exemplo, a tela de boas vindas é gerenciada pela classe Splash, a tela principal do jogo é gerenciada pela classe MainScreen, e assim por diante. O código fonte e os executáveis deste jogo estão disponíveis no Portal da WebMobile.

 

A Classe Midlet

Uma classe muito importante que não é exibida no diagrama da Figura 1 é a classe TestMidletMIDlet. Esta classe estende da classe Midlet, e sua função é inicializar tudo das outras classes e controles. O método principal da classe Midlet é o método startApp(). Normalmente, quando um midlet é chamado, ele está inicialmente no estado de pause. Se tudo executa normalmente e nenhuma exceção ocorre, então o midlet entra para o estado ativo. Isso é feito através da chamada ao método startApp(). Na Listagem 1 é apresentado um exemplo deste método.

 

Listagem 1. Exemplo de método startApp()                                                      

 

public void startApp() {

        // some code here...

        display.setCurrent(splash);

}

               

Nesta listagem, a chamada mais importante é display.setCurrent(splash). Esta chamada de método determina qual de nossas telas será exibida no dispositivo móvel. Neste exemplo, ele irá exibir a tela Splash, como visto na Figura 2.

 

 

Figura 2. Tela Splash

 

A Tela Splash

A tela splash é a primeira tela que aparece quando a aplicação é iniciada. Ela é estendida da classe Canvas. A classe Canvas, assim como as chamadas API de baixo nível, permite controle total do display no nível de pixels. Para pintar algo, precisamos sobrepor o método paint(). Veja um exemplo na Listagem 2.

 

Listagem 2. Exemplo de método paint()                                                          

 

public void paint(Graphics g) {

       // sets background color

       g.setColor(255, 255, 255);

       // fill the screen with the color defined previously

       g.fillRect(0, 0, this.getWidth(),this.getHeight());

       // draw some image

       g.drawImage(screenshot, (this.getWidth() - 128) / 2,

           (this.getHeight() - 128) / 2,

           Graphics.TOP|Graphics.LEFT);

}

 

Após um intervalo de 5 segundos, ou após pressionar qualquer tecla, nosso jogo muda a tela para a tela do menu principal. Para lidar com o pressionamento das teclas nós temos que implementar a interface CommandListener. Todos os eventos de tecla pressionada serão tratados pela função commandAction (Listagem 3).

 

Listagem 3. Método commandAction()                                                            

 

public void commandAction(Command command, Displayable displayable) {

        // stops timer operation

        timer.cancel();

        /*

        switch the display to menu. parent

        is the Midlet object which actually does the job.

        */

        parent.setCurrent("MainMenu2");

}

                

Timer e TimerTask são duas classes que nos permitem executar a função após um período de tempo pré-definido. Nós usamos essas classes para trocar automaticamente o display para a próxima tela (Listagem 4).

 

Listagem 4. Utilizando as classes Timer e TimerTask                                        

 

public void startTimer() {

     // TimerTask defines the task or subroutine

     // to be executed.

     TimerTask gotoMenu = new TimerTask()  {

             public void run() {

                     timer.cancel();

                     parent.setCurrent("MainMenu2");

             }

     };

     // Timer class creates and manages threads on

     // which the tasks are executed

     timer = new Timer();

     timer.schedule(gotoMenu, 5000);

}

 

A Classe MainMenu

A classe MainMenu, exibida na Figura 3, mostra o menu principal do jogo.

 

Figura 3. Tela do menu principal

 

O meu principal possui cinco elementos:

·   Continue: Continua o jogo que foi parado anteriormente;

·   Start Game: Inicia um novo jogo;

·   Choose Level: Escolhe a velocidade do jogador do computador;

·   Instructions: Mostra uma tela de instruções;

·   About: Exibe uma tela “Sobre”.

 

Em JavaME, a classe List é responsável por exibir listas ou menus. Em nossa aplicação teremos a subclasse MainMenu. Como na classe Splash, nós precisamos implementar a interface CommandListener para lidar com o pressionamento de teclas.

 

A Classe MainScreen

MainScreen, exibida na Figura 4, é a classe que exibe o jogo de basquete realmente sendo jogado. A classe MainScreen é estendida a partir da classe Canvas.

 

Figura 4. Tela do jogo principal

 

Regras do Jogo

Como mencionado antes, este é um jogo standalone no qual o jogador joga contra o computador. Existem dois jogadores na tela. O jogador humano controla o jogador azul, que tenta colocar a bola na cesta do lado direito. O computador controla o jogador vermelho. Cada jogo dura 2 minutos, e o jogador que acertou mais bolas é o vencedor. O jogador humano controla o jogador azul através das teclas direcionais (setas) ou através das teclas de números: 2 para cima, 8 para baixo, 6 para direita, 4 para esquerda e 5 para arremessar a bola.

Elementos na Tela Principal

Vários elementos gráficos compõem esta tela. Isso inclui o plano de fundo, os jogadores, a bola, etc. Cada elemento deve ser um arquivo gráfico PNG; eles Estão ilustrados na Figura 5.

 

(a)

 

 

 

...

Quer ler esse conteúdo completo? Tenha acesso completo