Namespaces

Variants
Actions

Please note that as of October 24, 2014, the Nokia Developer Wiki will no longer be accepting user contributions, including new entries, edits and comments, as we begin transitioning to our new home, in the Windows Phone Development Wiki. We plan to move over the majority of the existing entries over the next few weeks. Thanks for all your past and future contributions.

Como criar um sistema de 'High score' com Java ME

From Wiki
Jump to: navigation, search
Article Metadata

Exemplo de código
Artigo
Tradução:
Por maiconherverton
Última alteração feita por lpvalente em 19 Jan 2014

Cada jogo deve ter um sistema de High score para permitir aos jogadores desafiarem outros jogadores ou a eles próprios. Este artigo demonstra uma maneira de implementar essa funcionalidade em Java ME.

O Java ME usa o Record Management System (RMS), permitindo aos desenvolvedores salvar e restaurar dados em sessões de aplicações diferentes. Assim, para a criação rápida de um sistema High score com nome e pontos do usuário, você pode usar o seguinte código.

Contents

Código fonte

Adicionando um novo Hiscore

...
// Abrimos o recordstore
RecordStore highscore = RecordStore.openRecordStore("High Score", true);
 
// Para adicionar um novo ''hiscore'' usamos uma ''String'' separada por virgula
String str = new String("John,3400");
byte [] strb = str.getBytes();
int id = highscore.addRecord(strb, 0, strb.length);
 
highscore.closeRecordStore();
...

Recuperando as pontuações

...
RecordStore highscore = RecordStore.openRecordStore("High Score", true);
 
// Para ler todas as ''hiscores'' salvas no RMS
RecordEnumeration enum = highscore.enumerateRecords(null, null, false);
int id;
byte[] record;
String str;
while (enum.hasNextElement( )) {
id = enum.nextRecordId( );
record = highscore.getRecord(id);
str = new String(record);
// Opera com ''string'' (str) para extrair o nome e os pontos
}
highscore.close();
...

Como recuperar os dados classificados corretamente

Para classificar os resultados do maior para o menor, uma opção é implementar a interface RecordComparator, e usá-la ao chamar o método enumerateRecords() da classe RecordStore.

A implementação básica de um RecordComparator que classifica os resultados armazenados é a seguinte:

...
class ScoresComparator implements RecordComparator
{
public int compare(byte[] arg0, byte[] arg1)
{
int score0 = 0, score1 = 0;
 
for(int i = 0; i < arg0.length; i++)
{
if(arg0[i] == ',')
{
score0 = Integer.parseInt(new String(arg0, i + 1, arg0.length - i - 1));
}
}
for(int i = 0; i < arg1.length; i++)
{
if(arg1[i] == ',')
{
score1 = Integer.parseInt(new String(arg1, i + 1, arg1.length - i - 1));
}
}
 
if(score0 < score1)
return 1;
else if(score0 == score1)
return 0;
else
return -1;
}
}
...

Assim, a chamada anterior para enumerateRecords() vai mudar:

RecordEnumeration enumerador = highscore.enumerateRecords (null, ScoresComparator novo (), false);


Download

Você pode baixar o exemplo mostrando no código apresentado neste artigo aqui: Media: HighScoreDatabaseMIDlet.zip

Notas de implementação

  • Você deve usar try-catch para capturar exceções e mensagens sobre a operação de E/S ou lançar uma exceção (throws).
  • Quando estiver escrevendo ou lendo dados do RMS, você deve usar threads separadas para evitar o bloqueio da thread principal do MIDlet.

Links relacionados

"Data Handling" section on Java ME Developer's Library

This page was last modified on 19 January 2014, at 01:07.
329 page views in the last 30 days.

Was this page helpful?

Your feedback about this content is important. Let us know what you think.

 

Thank you!

We appreciate your feedback.

×