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