Preciso de uma ajuda para implementar um record para meu jogo de celular. O problema maior consiste nos dois valores que são salvos nesse record, além do nome do jogador é claro: o nível que foi concluído e o tempo gasto em minutos e segundos para concluir esse tal nível.
Ex: Alguém concluiu o nível 15 e outro o nível 10. Quem concluiu o nível 15 fica no lugar mais alto do record. Mas se ambos concluiram o nível 15, verifica-se quem concluiu em menos tempo, e esse fica no lugar mais alto do record. Além disso, quando surge um novo record deve-se reorganizar a tabela dos records, algo que não é tão trivial assim…
Alguma ajuda nessa epopéia?
Nunca mexi a fundo com RMS, então não sei como ordenar os dados via RMS (nem sei se é possível), mas não seria mais fácil fazer isso em tempo de execução? Cria um método pra pegar todos os dados do RMS e jogar em um vetor e ordenar pra exibição, quando um dado é alterado no RMS então tu faz a modificação e reorganiza os dados no vetor, acho que se teu jogo não contiver várias (e várias digo centenas) de linhas pra serem reorganizadas não vai ficar lento o processo.
Voce pode usar um “DataEnumeration” para ordenar os resultados da consulta do nivel de cada jogador, logo essa classe vai ficar semelhante ao uso do where na SQL.
"order by jogador.getNivelMaximo()";
O problema é que não é só o nível do jogador que determina se existe um novo recorde. O tempo gasto também conta, e é aí que as coisas complicam…
Ainda acho o meu jeito válido, faz um registro pra cada usuário separado por um “separador”, tipo:
ID|Nome|nivel|tempo (ID|Rafael|15|15:30)
Então quando tu precisa mostrar pro usuário tu recupera todos os dados, joga em arrays se for o caso, e ordena somente na tela, no rms deixa como está, quando tem que atualizar um nível tu procura onde tem o ID tal atualizar nivel.
O banco sempre fica com a mesma estrutura, tu só atualiza a visão.
Pra trabalhar fora do rms de forma mais fácil tu pode até criar uma classe tipo:
class personagem{
int ID;
String nome;
int level;
String tempo;
}
E quando for guardar no banco dai na linha onde tem o ID tal tu substitui por personagem.ID+"|"+personagem.nome+"|"+personagem.level+"|"+personagem.tempo
Essa é uma alternativa, deve existir várias…
Seria uma boa estratégia, mas lembre-se que não é só inserir um novo recorde, tem que ajustar os recordes que já existem…
ex: um novo recorde para o segundo lugar deve ser salvo.
O primeiro lugar não se altera.
O segundo vira terceiro lugar.
O terceiro vira quarto lugar.
O quarto vira quinto lugar.
Salva-se o novo segundo lugar.
Mais ou menos isso. Na teoria é fácil, difícil é implementar.
mas é justamente isso que eu to falando, no rms você deixa fora de ordem, quando você vai mostrar na tela dai você organiza, em tempo de execução.
ID|level
1|20
2|14
3|13
4|12
Quando você chama no menu pra mostrar os recordes aparece:
1|20
2|14
3|13
4|12
Agora alguém comecou um jogo novo e foi para o level 17, no rms fica:
1|20
2|14
3|13
4|12
5|17
Quando chamar no menu, em tempo de execução você vai odenar em um vetor e mostrar:
1|20
5|17
2|14
3|13
4|12
Não, você está se equivocando!
Você inseriu mais um registro no rms, é não é esse o objetivo. O objetivo é atualizar os cinco registros existentes e não inserir um sexto registro.
No seu caso eram 4 registros e você inseriu um quinto registro, em vez de atualizar os quatro já existentes, sendo que um deles ia sair da lista…
Tá mas e qual é a diferença entre alterar um registro e inserir um novo se tu não vai ordenar o rms e sim a visão ?
Se tu tem no rms:
1|20
2|14
3|13
4|12
Tu vai exibir na tela:
1|20
2|14
3|13
4|12
Se o usuário 3 subiu pro lvl 17, então no rms vai ficar:
1|20
2|14
3|17
4|12
E quando tu exibir na tela o método que tu criou vai ordenar e mostrar:
1|20
3|17
2|14
4|12
É a mesma coisa que tu ter uma instrução select em SQL e no final colocar order by lvl. A tabela no banco ta em qualquer ordem, quando tu chamar ele vai organizar pelo lvl.
Se tu tá trabalhando com um número fixo de registros então quando tu vai atualizar pra substituir um usuario tu não precisa nem remover o registro do outro do rms, basta escrever “por cima” e continuar utilizando os registros já criados (e desordenados no rms, já que tu ordena somente pra exibição).
Vou ver o que consigo fazer, embora implementar isso na prática seja mais complicado…
Não é tão complicado assim, se tu entendeu bem o conceito em meia tarde tu implementa e já testa.