abrir - dpi@ufv

Propaganda
UNIVERSIDADE FEDERAL DE VIÇOSA
CENTRO DE CIÊNCIAS EXATAS E TECNOLÓGICAS
DEPARTAMENTO DE INFORMÁTICA
INF 492 – Computação Móvel
MEJAVA 21
Leandro Castanheira de C. Ferreira M50278
Fernando da Silva Stein M50289
Thiago Emanuel C. de Oliveira M50294
Especificação do projeto realizado na
disciplina INF 492 – Computação Móvel
VIÇOSA
MINAS GERAIS – BRASIL
FEVEREIRO/2007
Índice
1.
Introdução:.................................................................................................................... 3
2.
Motivações..................................................................................................................... 4
3.
Motivações: ................................................................................................................... 5
4.
Tecnologias Usadas:...................................................................................................... 6
4.1
J2ME..................................................................................................................................... 6
4.2
Bluetooth ............................................................................................................................... 7
4.3
Eclipse e EclipseME............................................................................................................. 8
5.
O Jogo 21 .................................................................................................................... 10
6.
A Aplicação ................................................................................................................. 11
7.
Módulos....................................................................................................................... 13
8.
Telas do Jogo............................................................................................................... 16
9.
Dificuldades Encontradas ........................................................................................... 23
10.
Discussão e Conclusões........................................................................................... 24
11.
Referências Bibliográficas....................................................................................... 25
2
1. Introdução:
Esse documento tem por finalidade descrever o projeto final da disciplina INF 492
(Computação Móvel) lecionada no semestre 2 do ano letivo de 2006, contendo as motivações,
tecnologias, dificuldades e soluções para a implementação do mesmo.
O projeto deveria basear-se em uma aplicação para dispositivos móveis, com alguma
interface de comunicação e uma boa interface gráfica. Tendo isso como objetivo, o grupo
decidiu criar um game de cartas que use a tecnologia de comunicação bluetooth, levando-se
em conta o desafio que a aplicação nos fornece na questão da comunicação e da interface com
o usuário.
O game escolhido foi um clássico do baralho mundial, o Blackjack, conhecido
popularmente no Brasil por 21 (Vinte e Um). O jogo tem como objetivo que os jogadores
alcancem os 21 pontos, ou o mais próximo possível, sem ultrapassá-los.
3
2. Motivações
Com o advento das redes digitais de telefonia móvel, os aparelhos celulares surgem
como consoles de mão, com jogos bem definidos e de boa jogabilidade. Em vários
continentes, os jogos por celular já fazem sucesso: usuários do Japão, dos EUA e alguns
países da Europa, podem realizar downloads de diversos jogos de esportes, de aventura, de
ação, entre outras categorias. No Brasil, existe também, um grande potencial para jogos em
celulares, já que os preços desses aplicativos são acessíveis à população brasileira e pela
grande população de jovens, a qual mais consome esse tipo de produto.
Levando-se em conta este mercado crescente o grupo escolheu para implementação
um jogo para celular.
A escolha do jogo 21 (Vinte e Um) foi tomada por ser um jogo que não se joga
sozinho, atendendo ao objetivo do grupo de usar a comunicação entre os celulares oponentes
da partida.
A comunicação entre os oponentes será feita através do bluetooth, já que ela permite
uma distância necessária entre os aparelhos para que se oculte a visão do oponente, e também
pelo seu baixo custo para o usuário. Além disso, talvez tenha sido a maior motivação do
grupo o desafio de realizar essa forma de comunicação.
4
3. Motivações:
Este projeto tem como finalidade desenvolver o Jogo 21 para dispositivos móveis,
mais especificamente celulares, para dois jogadores, cada um com utilizando um celular.
Implementar a comunicação bluetooth entre os aparelhos, para realizar-se a interação
entre os dois jogadores e implementar uma interface gráfica com o usuário através da
linguagem JAVA.
E promover o contado do grupo com a implementação de uma aplicação para
embarcados, em prol da ampliação dos conhecimentos dos mesmos.
5
4. Tecnologias Usadas:
4.1
J2ME
O Java Plataform, Micro Edition (Java ME) ou J2ME É uma tecnologia que
possibilita o desenvolvimento de software para sistemas e aplicações embarcadas, ou seja,
toda aquela que roda em um dispositivo de propósito específico, desempenhando alguma
tarefa que seja útil para o dispositivo.
É a plataforma Java para dispositivos compactos, como celulares, PDAs, controles
remotos e uma outra gama de dispositivos. Java ME é uma coleção de APIs do Java definidas
através da JCP (Java Community Proccess).
A comunidade JCP adotou duas abordagens para especificar as necessidades dos
pequenos dispositivos - a sua arquitetura computacional.
Primeiro eles definiram o ambiente de execução Java (do inglês Java run-time
environment) e um conjunto de classes básicas, chamadas de core, que operam sobre cada
dispositivo. Isso foi denominado Configurações (do inglês Configurations). Uma
configuração define a JVM (Java Virtual Machine) para um pequeno e específico dispositivo
computacional. Há duas configurações para um dispositivo embarcado, uma para dispositivos
com maior capacidade computacional (do inglês High-end consumer devices), denominado
CDC (Connected Device Configuration). A outra com menor capacidade computacional (do
inglês Low-end consumer devices), denominado CLDC (Connected Limited Device
Configuration).
A segunda abordagem foi definida como um perfil (do inglês profile). Um perfil
consiste em um conjunto de classes que possibilita os desenvolvedores de software
implementar as aplicações de acordo com as características das aplicações dos pequenos
dispositivos computacionais. Foi denominado o MIDP (Mobile Information Device Profile),
oferecendo recursos como rede, componentes de interface, armazenamento local, etc.
Neste projeto utilizou-se o Wireless Toolkit 2.5 para CLDC.
6
4.2
Bluetooth
Bluetooth é uma tecnologia de baixo custo para a comunicação sem fio entre
dispositivos eletrônicos a curtas distâncias.
Começou a ser desenvolvida em 1994, pela Ericsson, e a partir de 1998 pelo Bluetooth
Special Interest Group (SIG), consórcio inicialmente estabelecido pela Sony, Ericsson, IBM,
Intel, Toshiba e Nokia, hoje este consórcio inclui mais de 2000 empresas.
O nome Bluetooth é uma homenagem ao rei da Dinamarca e Noruega Harald Blåtand em inglês Harold Bluetooth (traduzido como dente azul, embora em dinamarquês signifique
de tez escura). Blåtand é conhecido por unificar as tribos norueguesas, suecas e
dinamarquesas. Da mesma forma, o protocolo procura unir diferentes tecnologias, como
telefones móveis e computadores. O logotipo do Bluetooth é a união de duas runas nórdicas
para as letras H e B, suas iniciais.
É usado para comunicação entre pequenos dispositivos de uso pessoal, como PDAs,
telefones celulares de nova geração, computadores portáteis, mas também é utilizado para a
comunicação de periféricos, como impressoras, scanners, e qualquer dispositivo dotado de um
chip Bluetooth.
Dispositivos Bluetooth operam na faixa ISM (Industrial, Scientific, Medical) centrada
em 2,45 GHz que era formalmente reservada para alguns grupos de usuários profissionais.
Nos Estados Unidos, a faixa ISM varia de 2400 a 2483,5 MHz. Na maioria da Europa a
mesma banda também está disponível. No Japão a faixa varia de 2400 a 2500 MHz. Os
dispositivos são classificados de acordo com a potência e alcance, em três níveis: classe 1
(100 mW, com alcance de até 100 m), classe 2 (2,5 mW e alcance até 10 m) e classe 3, (1 mW
e alcance de 1 m, uma variante muito rara). Cada dispositivo é dotado de um número único de
48 bits que serve de identificação.
Os dispositivos Bluetooth se comunicam entre si e formam uma rede denominada
piconet, na qual podem existir até oito dispositivos interligados, sendo um deles o mestre
(master) e os outros dispositivos escravos (slave); uma rede formada por diversos "masters"
(com um número máximo de 10) pode ser obtida para maximizar o número de conexões. A
banda é dividida em 79 portadoras espaçadas de 1 Megahertz, portanto cada dispositivo pode
transmitir em 79 diferentes freqüências; para minimizar as interferências, o dispositivo
"master", depois de sincronizado, pode mudar as freqüências de transmissão dos seus “slaves"
por até 1600 vezes por segundo.
Em relação à sua velocidade pode chegar a 721 Kbps e possui três canais de voz.
7
As desvantagens desta tecnologia são o seu raio de alcance, 10 metros e o número
máximo de dispositivos que podem se conectar ao mesmo tempo.
O Bluetooth ganhou popularidade quase sempre associada aos charmosos headsets –
aqueles auriculares/microfones sem fio – para celulares que deixam seus usuários com ar de
filme de ficção científica.
Bluetooth é um padrão de comunicação por rádio de baixo consumo elétrico e curto ou
curtíssimo alcance. O mesmo vale para a troca de dados entre equipamentos e um computador
igualmente equipado. Pode ser um desses notebooks com o padrão integrado, cada vez mais
comum, ou um desktop munido de um adaptador USB-Bluetooth (popularmente chamado de
dongle), acessório parecido com um memory key que pode ser encontrado em lojas de
informática.
4.3
Eclipse e EclipseME
Eclipse é uma plataforma (IDE) focada no desenvolvimento de ferramentas e
aplicações de software. Hoje o Eclipse é a IDE Java mais utilizada no mundo. Possui como
características marcantes o uso da SWT e não do Swing como biblioteca gráfica, a forte
orientação ao desenvolvimento baseado em plug-ins e o amplo suporte ao desenvolvedor com
centenas de plug-ins que procuram atender as diferentes necessidades de diferentes
programadores.
EclipseME é um plugin para o Eclipse que auxilia no desenvolvimento de MIDlets
J2ME. Ele faz o trabalho pesado de conectar a plataforma de desenvolvimento Eclipse com o
Toolkit Wireless dos MIDlets J2ME, permitindo ao desenvolvedor focar-se no
desenvolvimento de sua aplicação, no lugar de se preocupar com as necessidades especiais do
desenvolvimento com o J2ME.
O EclipseME oferece ao desenvolvedor:
•
Suporte múltiplo ao toolkit wireless;
•
Suporte às definições e componentes da plataforma;
•
Criação de suítes de desenvolvimento de projetos em MIDlet J2ME;
•
Criação de novas MIDlets;
•
Editor de descritor de aplicações Java (JAD);
•
Pré-verificação incremental automática;
•
Suporte do Eclipse para o envio ao emulador;
8
•
Suporte de debug de MIDlet;
•
Compactação e ofuscação de pacotes JAR;
•
Servidor de testes de aplicações “No Ar” (OTA);
•
Assinatura automática de MIDlets,dentre outras funcionalidades.
Neste projeto foi usado o Eclipse versão 3.2.2 e o EclipseME versão 1.6.2.
9
5. O Jogo 21
O jogo 21 ou Blackjack criado pelo grupo é disputado por dois jogadores
obrigatoriamente. Ao iniciar o jogo, são distribuídas duas cartas a cada jogador. No turno de
cada jogador, ele tem o direito de escolher entre pedir uma carta nova ou parar de pedir cartas.
Uma vez decidido parar de pedir cartas, ele não poderá pedir mais nenhuma carta ate o fim do
jogo.
A vez de um jogador inicia assim que o outro jogador compra uma carta ou pára de
jogar (o mesmo que parar de pedir novas cartas). Para um turno de um jogador terminar,
existem duas condições: a primeira é quando o oponente ainda não parou, assim, o turno
acaba após a compra de uma carta. A segunda condição acontece quando o oponente já não
quer mais cartas, fazendo com que o jogador tenha o direito de comprar o quantas cartas ele
desejar seguidamente e assim quando decidir parar, conseqüentemente o jogo também
termina.
Após o termino do jogo, é avaliada a pontuação das mãos dos jogadores. A vitória do
jogo é dada ao jogador que realizar 21 pontos. O jogador que fizer mais de 21 pontos perde
independente da pontuação do adversário, salvo o adversário também tenha ultrapassado os
21 pontos, nesse caso é considerado empate. Caso os dois jogadores tenham pontuação menor
que 21, o vencedor será aquele q tiver mais pontos. E se os dois obtiverem a mesma
pontuação também é declarado o empate.
A pontuação das cartas é avaliada da seguinte maneira:
•
As cartas de 2 a 10, têm o valor do seu respectivo número.
•
As cartas valente(J), dama(Q) e rei(K) valem 10 pontos cada.
•
A carta ÁS, tem o valor de 11 pontos caso a soma da mão não ultrapasse 21. Caso
isso acontecer, ela passará a valer 1 ponto.
10
6. A Aplicação
A aplicação criada é única, tanto para quem está oferecendo o serviço (servidor),
quanto para quem o está recebendo (cliente), diferentemente dos exemplos encontrados pelo
grupo na Internet. Ao se iniciar a aplicação o usuário tem que decidir se ele será cliente ou
servidor, para o jogo começar de fato, as duas opções de usuários já tem que ter sido
escolhida.
A grande diferença entre os dois tipos de usuários são as seguintes:
•
Servidor: Apesar do nome, ele funciona somente para iniciar a conexão e gerenciar
a interface de um dos jogadores, oferecendo a ele a opção de pedir uma nova carta ou escolher
parar de pedir cartas.
•
Cliente: Além das opções de pedir carta e parar de pedir cartas como o servidor, é
ele quem gerencia a lógica do jogo. É ele quem sorteia as cartas, e as distribui para os dois
jogadores, além de distribuir as cartas solicitadas durante o jogo. Ele faz a avaliação do
vitorioso do jogo.
Ao começar o jogo a vez é dada ao cliente, e esse turno será trocado como explicado
na seção 5 deste documento, bem como o fim do jogo.
Na estrutura interna do programa, há duas matrizes que armazenam as cartas das mãos
dos jogadores. No usuário cliente, essas matrizes são manipuladas, adicionando a elas cartas
quando solicitadas, servindo também para desenhar as cartas na tela. Já no usuário servidor,
elas são usadas únicas e exclusivamente para desenhar as respectivas cartas na tela.
Para manter a sincronia do jogo entre os celulares, as decisões são processadas da
seguinte forma:
•
As decisões de comandos do servidor são passadas para o cliente que tomará as
decisões cabíveis.
•
As decisões de comando do cliente são tratadas pelo próprio cliente.
•
A sincronia da tela se dá pelas mensagens de atualização do cliente para o
servidor, que são dois tipos de mensagens: uma de autorização de turno do servidor, e a outra
de atualização dos vetores de cartas do servidor. As mensagens de atualização de vetor são
criadas no cliente a partir dos vetores locais, transmitidas pela conexão bluetooth para o
servidor como string, onde são interpretadas e assim atualizando o vetor no servidor.
•
Decisão de vitória no jogo é realizada pelo cliente e passada ao servidor
somente a resposta final dessa decisão.
11
Existem duas figuras: uma com os naipes do baralho, e uma com os números das
cartas (de 2 a 10, AS, J, Q e K). Para criar a imagem de uma carta, após decidido qual carta
será mostrada, o programa recorta o respectivo naipe na figura de naipes e o respectivo
número na figura de números.
12
7. Módulos
São descrito a seguir os módulos criados para esta aplicação:
Gerencia as cartas já distribuídas, garantindo que não se sorteie duas
vezes a mesma carta.
Principais Métodos:
Baralho.java
•
public Carta sorteiaCarta() - Sorteia uma carta do baralho.
•
private int sorteiaDeZeroA(int limiteSuperior) - Sorteia
números entre 0 e um valor especificado, inclusive.
Inicializa a conexão com o bluetooth para o cliente.
Principais Métodos:
•
public BTCliente(TelaCliente parent) - Construtor do
BTcliente.
BTCliente.java
•
private void searchForServices(Vector deviceList, String
UUIDStr) - Procura por serviços.
•
public void inquiryCompleted(int inqType) - Inicia o serviço
de busca.
•
private void showInquiryCode(int inqCode) - Mostra o
resultado da busca.
Inicializa a conexão com o bluetooth para o servidor.
BTServidor.java
Principais Métodos:
•
public void run() - Chamada quando inicia a aplicação.
Representa uma carta do baralho.
Principais Métodos:
•
public Carta(char letra, int naipe) - Cria uma carta com letra
e naipe definidos, já "virada" (visível).
•
Carta.java
private synchronized Image getImgNaipe() - Recupera o
bitmap correspondente ao naipe da carta.
•
private synchronized Image getImgValor() - Recupera o
bitmap correspondente ao valor da carta.
•
public void desenhaCarta(Graphics g) - Renderiza a carta.
13
Responsável pela lógica do Cliente.
Principais Métodos:
•
public FormCliente(ServiceRecord sr, BTCliente ecm2,
Display d) – Construtor da classe.
•
public void vectorToString (Vector Serv, Vector Cli) - Cria
uma string com os vetores.
FormCliente.java
•
public void stringToVector (String msg) - Cria o vetor com a
string.
•
protected void paint(Graphics g) - Função responsável por
desenhar na tela.
•
private int contaPontos(Vector a) - Conta o total de pontos de
um vetor de cartas.
Responsável pela lógica do Servidor.
Principais Métodos:
•
public
FormServidor(TelaServidor
parent,
BTServidor
echoServer) - Construtor da classe.
FormServidor.java
•
protected void paint(Graphics g) - Função responsável por
desenhar na tela.
•
public void stringToVector (String msg) - Cria as cartas a
partir de uma string.
Classe que procura a lista de serviços disponíveis.
Principais Métodos:
•
public ListaServicos21(Hashtable st, BTCliente ecm, Display
d, MeJava21MIDlet parent) - Construtor da classe.
ListaServicos21.java
•
private void buildList(Hashtable st) - Constrói a lista dos
nomes dos serviços.
•
public void commandAction(Command c, Displayable d) Trata os comandos do menu.
MeJava21MIDlet.java
MIDLet para a aplicação.
Gerencia o formulário do cliente.
TeleCliente.java
Principais Métodos:
•
public TelaCliente(MeJava21MIDlet parent) - Construtor da
14
classe.
•
void completeInitialization(boolean isBTReady) - Garante a
inicialização do bluetooth.
•
public void showServices(Hashtable searchTable) - Mostra
os seviços disponíveis.
Gerenciar mensagens via bluetooth para o Cliente.
Principais Métodos:
•
public void run() - Função de sistema que realiza a conexão
com o servidor.
TelaJogoCliente.java
•
public String echoMessage(String msg) - Envia mensagem
para o servidor e fica aguardando uma resposta.
•
private boolean sendMessage(String msg) – Envia uma
mensagem.
•
private String readData() - Trata resposta recebida e é
responsável por esperar uma resposta.
Gerencia o formulário do cliente.
Principais Métodos:
•
TelaServidor(MeJava21MIDlet parent) - Construtor da
classe.
TelaServidor.java
•
void completeInitialization(boolean isBTReady) - Garante a
inicialização do bluetooth.
•
synchronized public void showMessage(String msg) - Envia
uma mensagem para o cliente.
Gerenciar mensagens via bluetooth para o Servidor.
Principais Métodos:
•
public Threaded21(StreamConnection conn, TelaServidor
ecm) - Construtor da classe.
Threaded21.java
•
private void processClient() - Função responsável por
recebimento das mensagens do cliente.
•
private String readData() - Trata resposta recebida e é
responsável por esperar uma resposta.
15
8. Telas do Jogo
Figura 1 – Telas iniciais
Nessa primeira imagem, são exibidas as telas iniciais do jogo, quando os jogadores
optam em ser ou Cliente ou Servidor, lembrando que sempre deve haver um servidor antes de
um cliente, para que esse possa encontrar o serviço e iniciar o jogo.
16
Figura 2 – Primeira tela da mesa após realizada a conexão
Nessa imagem é exibido o momento inicial do jogo, após a decisão dos jogadores
entre serem servidor/cliente. Percebe-se que a aplicação já sorteia as cartas iniciais de cada
jogador e, além disso, dá a vez de começar a jogar para o cliente.
17
Figura 3 – Tela com menu para parar de pedir novas cartas
Nessa imagem, é exibida o menu do cliente, com suas opções nova carta/ parar. Notase ainda que já houve alguma jogabilidade, uma vez que cada jogador já comprou uma carta.
18
Figura 4 – Tela com menu para pedir novas cartas
Na imagem acima, um dos jogadores já optou por parar de comprar cartas, restando ao
outro jogador continuar comprando cartas ou parar de jogar. Ao decidir parar, o aplicativo
calcula o vencedor do jogo.
19
Figura 5 – Telas com mais cartas
Nessa imagem o jogador da esquerda decidiu comprar mais uma carta, ficando com 4
cartas.
20
Figura 6 – Telas com resultado do jogo empatado
Na tela acima, os dois jogadores já optaram por parar de comprar cartas. Assim o
algoritmo calculou os pontos de cada um e verificou que os dois haviam estourado o limite de
pontos.
21
Figura 3 – Telas com resultado do jogo onde há um vencedor
Essa imagem mostra um caso onde há um vencedor no jogo. O jogador da direita, com
suas cartas obteve 20 pontos (note que um As teve o valor de 11 pontos e o outro somente
valor 1), enquanto o jogador da esquerda obteve 19 pontos.
22
9. Dificuldades Encontradas
Uma primeira dificuldade encontrada pelo grupo foi à inexperiência, assim como os
recursos restritos do J2ME. Para contornar esse problema, o grupo estudou exemplos que
usavam o J2ME assim como consultou as documentações encontradas nos sites da Sun.
Outra dificuldade foi a implementação da comunicação por bluetooth. Mais uma vez,
o grupo recorreu a exemplos de aplicações que realizavam esse tipo de conexão. Entretanto
nenhum exemplo encontrado atendia as necessidades da aplicação, assim foram misturadas
várias soluções para obter a utilizada no jogo.
O armazenamento das imagens das cartas também foi um obstáculo, uma vez que a
memória do dispositivo dos aparelhos móveis é curta. A solução encontrada pelo grupo para
tal dificuldade foi a criação de duas imagens, uma com os naipes e outra com os números, e
toda vez que há a necessidade de montar uma carta, a aplicação realiza recortes nessas figuras
maiores, acham o que precisam e montam a carta necessária.
23
10. Discussão e Conclusões
Ao término do projeto, pode-se dizer que, foi criado um aplicativo conforme proposto
pelo grupo, com grandes idéias para a manipulação da interface visual, e a superação da
dificuldade da conexão via bluetooth.
Ela foi de grande enriquecimento para os membros do grupo, dando a esses a idéia
básica de implementação para dispositivos moveis. Essa aplicação, caso investido mais tempo
e dedicação, pode-se tornar uma aplicação comercializável, já que ela gera um grande
entretenimento.
24
11. Referências Bibliográficas
Eclipse.org, Eclipse SDK - http://www.eclipse.org - último acesso fevereiro de 2007
EclipseME.org, Plugin EclipseME – http://.eclipseme.org - último acesso fevereiro de 2007
Sun.com, Wirelles Tool Kit – http://java.sun.com/javame/index.jsp - último acesso fevereiro
de 2007
25
Download