×
Namespaces

Variants
Actions
Revision as of 08:33, 31 July 2013 by hamishwillee (Talk | contribs)

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

From Nokia Developer Wiki
Jump to: navigation, search
Article Metadata

Exemplo de código
Artigo
Tradução:
Por maiconherverton
Última alteração feita por hamishwillee em 31 Jul 2013

Cada jogo deve ter um sistema de High score para permitir aos jogadores desafiarem outros jogadores ou a eles próprios.

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

60 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.

×