Atenção: esse artigo tem um vídeo complementar. Clique e assista!

De que se trata o artigo:

Este artigo apresenta a especificação e o desenvolvimento de um jogo multiplayer para celular através da plataforma J2ME utilizando MIDP. Para o desenvolvimento, foi escolhido como jogo uma variação simplificada do Batalha Naval. Apresenta também, a especificação e implementação da aplicação servidora bem como um protocolo para comunicação entre eles, utilizando para isto, sockets.


Para que serve:

Apresentar o passo a passo seguido no desenvolvimento de jogos multiplayer para celulares.

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

Para aqueles interessados em trabalhar com o desenvolvimento de jogos multiplayer para celulares utilizando o JavaME.

O mercado de dispositivos móveis desponta como sendo um dos mais promissores e rentáveis dos últimos tempos devido em parte à facilidade de aquisição de um aparelho celular por qualquer pessoa. Apoiado neste mercado e através do avanço tecnológico contínuo dos dispositivos móveis, associados ao crescimento da infra-estrutura das redes de telecomunicação e de plataformas de desenvolvimento de aplicações móveis como o J2ME e o BREW, tornou-se possível o desenvolvimento de softwares mais complexos e de jogos com qualidade cada vez maiores.

Os jogos para telefones celulares estão evoluindo em um ritmo acelerado nos últimos anos. Como inicialmente os aparelhos possuíam poucos recursos, os primeiros jogos eram rudimentares e pouco numerosos. Com a crescente incorporação de características aos aparelhos, os jogos para celular foram se tornando mais complexos, com gráficos e sons mais elaborados e uma interatividade maior do que seus antecessores, possibilitando inclusive a interação entre múltiplos jogadores. A demanda e a oferta de jogos também aumentaram, de modo que atualmente o mercado de jogos para celulares constitui uma área rentável e em plena expansão.

Através de um aparelho celular é possível, hoje, acessar a Internet, permitindo com isso, o desenvolvimento de jogos multiplayer para celulares.

Desenvolver um jogo multiplayer para dispositivos móveis não é uma tarefa simples, pois devem ser superados vários desafios tecnológicos, como a alta latência das redes de telefonia móvel e a baixa capacidade de processamento dos dispositivos móveis.

Neste contexto, neste artigo iremos desenvolver uma versão simplificada do jogo Batalha Naval para celular em modo multiplayer onde um usuário poderá ter como adversário, o servidor do jogo ou outro cliente. O cliente poderá optar ainda por jogar individualmente contra outro jogador ou em duplas. No jogo em duplas, o servidor deverá formar as duplas e juntar as duplas adversárias.

Tecnologias Associadas

A partir de agora apresentaremos alguns aspectos teóricos relacionados aos recursos e tecnologias empregados no desenvolvimento deste artigo. Será abordado o tema da tecnologia Java, seguido de um aprofundamento na tecnologia J2ME. São tratadas na seqüência os assuntos de jogos para celular, jogos multiplayer e a arquitetura de servidores. Posteriormente, são abordados a descrição das características do jogo Batalha Naval e sua versão simplificada.

Tecnologia java

A tecnologia Java define uma linguagem de programação e uma plataforma de software, cujo principal objetivo é a portabilidade do código. Os programas desenvolvidos em Java rodam em diferentes ambientes graças a um componente da plataforma chamado JVM, que é um tipo de tradutor de código Java para instruções específicas de cada sistema e dispositivo.

Plataforma J2ME

A plataforma J2ME tem por objetivo definir um conjunto de tecnologias centradas no desenvolvimento de soluções para dispositivos cujos recursos são limitados, mas que por carregarem algum tipo de micro-processador são potencialmente capazes de realizar operações computacionais. A linha de dispositivos capazes de suportar a tecnologia J2ME varia desde pagers e celulares até grandes aparelhos domésticos como televisores digitais, refrigeradores e automóveis.

O J2ME é dividido em Configurations (Configurações) e Profiles (Perfis). Estes oferecem informações sobre as APIs de diferentes famílias de equipamentos (Figura 1).

Figura 1. Plataforma J2ME (Fonte: Andriolli (2008))

Na Figura 2 é apresentada a arquitetura para o desenvolvimento de aplicações J2ME ao qual, na camada mais básica encontramos o componente chamado de Dispositivo de Informação Móvel (MID). Em uma camada mais acima encontramos o sistema operacional nativo. Acima da camada que representa o sistema operacional nativo temos a Configuração de Dispositivo Conectado Limitado (CLDC) e a Configuração de Dispositivo Conectado (CDC). O Perfil de Dispositivo de Informação Móvel (MIDP) é o componente que, em termos de software, representa as limitações impostas por uma configuração. Como complemento ao perfil MIDP, ainda podemos considerar as classes específicas do Fabricante de Equipamento Original (OEM). Na última camada dos componentes da arquitetura J2ME temos três subcomponentes: os aplicativos MIDP, os aplicativos específicos do OEM e os aplicativos nativos.

Figura 2. Arquitetura das aplicações J2ME.

Configurações

Para suportar uma ampla variedade de produtos que se encaixam dentro do escopo do J2ME, a Sun introduziu o conceito de “configuração”. Uma configuração define uma plataforma Java para uma ampla variedade de dispositivos. A linha divisória de aplicação de uma configuração é, de modo geral, baseada na memória, no vídeo, na conectividade de rede e no poder de processamento disponível em um dispositivo. Há basicamente duas configurações típicas: CDC e CLDC.

Connected Device Configuration (CDC): esta configuração é voltada para dispositivos com no mínimo 512KB de memória para executar a máquina Java, 256KB de memória dinâmica para armazenar variáveis, além de recursos de conectividade de rede e largura de banda possivelmente persistente e alta;

Connected Limited Device Configuration (CLDC): esta configuração é voltada para dispositivos com 128KB de memória para executar a máquina Java, 32 KB de memória dinâmica para armazenar variáveis, possuindo interface restrita com o usuário, baixo poder de processamento, normalmente alimentado por bateria, conectividade de rede geralmente sem fio, largura de banda baixa e com acesso intermitente. Ela define uma máquina virtual Java reduzida, chamada de KVM e um conjunto também reduzido de APIs.

Em termos mais concretos, uma configuração define uma máquina virtual, um conjunto mínimo de bibliotecas e os recursos da linguagem Java que estão disponíveis para os dispositivos de uma determinada categoria.

Perfil MIDP

Um perfil atende às demandas específicas de uma certa família de dispositivos. Enquanto uma configuração visa aparelhos que possuem recursos de hardware semelhantes, um perfil é definido para dispositivos que executam tarefas semelhantes. Ao contrário de uma configuração, perfis incluem bibliotecas mais específicas e vários deles podem ser suportados pelo mesmo dispositivo. Além disso, as classes que fazem parte de um perfil tipicamente estendem aquelas definidas para uma configuração. O MIDP foi o primeiro perfil definido para a plataforma J2ME, tendo sido lançado em novembro de 1999. Esse perfil foi implementado sobre a configuração CLDC. Também para a configuração CDC foi desenvolvido um perfil, o qual ficou conhecido como Foundation Profile.

O perfil MIDP fornece funcionalidades para o desenvolvimento de aplicativos de uma ampla variedade de celulares, utilizando para isso, a configuração CLDC.

Midlet

Midlet é uma aplicação que implementa o perfil MIDP e roda sobre a máquina virtual KVM proposta pela configuração CLDC. Um Midlet pode utilizar tanto funções oferecidas no perfil MIDP como funções que o MIDP herda da CLDC. Uma aplicação MIDP deve conter no mínimo uma classe Midlet, podendo em alguns casos conter mais de um, sendo chamada de Midlet Suíte. A aplicação que segue o MIDP, para ser instalada no dispositivo, precisa ser empacotada, criando um Java Archive (JAR) que obrigatoriamente contém um arquivo de manifesto, englobando as informações sobre o Midlet contido no pacote JAR. Este arquivo contendo as informações sobre a aplicação, configuração e perfil utilizando na mesma, é denominado JAD.

Os elementos de um Midlet Suíte, cujo conjunto forma o software de gerenciamento da aplicação, e dos quais se espera que implementem as funções necessárias para instalar, selecionar, rodar e remover Midlets, são:

ambiente de execução: é compartilhado por todos os Midlets que estão na mesma Midlet Suíte, e qualquer Midlet pode interagir com outro que esteja no mesmo pacote;

empacotamento do Midlet suíte: um ou mais Midlets podem ser empacotados num único arquivo JAR, que contém as classes compartilhadas e os arquivos de recursos pelos Midlets, além de um arquivo manifesto descrevendo seu conteúdo. Existem vários atributos pré-definidos que permitem identificação de um Midlet, com nome, versão, tamanho de dados, descrição, etc.

descritor de aplicação: é utilizado para gerenciar o Midlet e é usado pela própria Midlet para atributos de configuração específica. O descritor permite que seja verificado se o Midlet é adequado ao aparelho antes de se carregar todo o arquivo JAR do Midlet Suíte. Ele também permite que parâmetros sejam passados para os Midlets sem modificar os arquivos JAR.

ciclo de vida da aplicação: um Midlet não deve possuir um método public void static void main(). O software de gerenciamento de aplicação deve suprir a classe inicial necessária pelo CLDC para iniciar o Midlet. Quando um Midlet é instalado, ele é mantido no aparelho e fica pronto para uso. Quando é rodado, uma instância é criada através de seu construtor público sem argumentos, e seus métodos são chamados para passar pelos estados do Midlet. Quando ele é destruído, os recursos utilizados podem ser recuperados, incluindo os objetos criados e suas classes.

...
Quer ler esse conteúdo completo? Tenha acesso completo