Gravando configurações em RMS

4 respostas
STRAUSS69

Preciso de uma pequena ajuda.Colocarei primeiro o codigo.Este código está na midlet da minha aplicação e criei uma variavel chamada "indice"

private void open() {
    try {

        nivel = RecordStore.openRecordStore("Nivel", true);
    }
    catch (RecordStoreNotFoundException e) {
        System.out.println("-- RecordStore inexistente");
    }
    catch (RecordStoreException e) {
        System.out.println("-- Outro erro");
    }
}
private void close() {
    try {
        nivel.closeRecordStore();
    }
    catch( RecordStoreNotOpenException e ){
        System.out.println("-- O Record Store esta fechado");
    }
    catch( RecordStoreException e ){
        System.out.println("-- Outro erro");
    }
}
public void SaveNivel(){
open();
 try {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        DataOutputStream dos = new DataOutputStream(baos);
        dos.writeInt(indice);

        dos.flush();
        byte[] data = baos.toByteArray();
[size=9][/size][size=12][/size][color=cyan][/color][color=darkred][/color]
        if(nivel.getNumRecords()!=0){
        //atualiza o id com o valor do indice da variavel o sobrescrevendo
        nivel.setRecord(1,data, 0, data.length);
        }
        else{
            //adiciona caso não tenha nada salvo
         nivel.addRecord(data, 0, data.length);
           }
        baos.close();
        dos.close();

    }
    catch (IOException e) {
        System.out.println("-- Erro de IO");
    }
    catch (RecordStoreFullException e) {
        System.out.println("-- Não existe espaço disponível");
    }
    catch( RecordStoreNotOpenException e ){
        System.out.println("-- O Record Store esta fechado");
    }
    catch( RecordStoreException e ){
        System.out.println("-- Outro erro");
    }
close();
}
public void load_nivel(byte[]data){

   ByteArrayInputStream bais = new ByteArrayInputStream(data);
    // creates a data input stream to read from
    DataInputStream dis = new DataInputStream(bais);

try{
indice=dis.readInt();
dis.close();
}

catch(IOException ex){

}

}
public void load_data(){
      try {
    open();
      // checka se ta vazio

      if (nivel.getNumRecords() != 0) {

        load_nivel(nivel.getRecord(1));

      }
      close();
    } catch (RecordStoreException ex) {
    }




}

Esta mesma variavel sera usada para armazenar valores que lhe serão atribuídas atraves de um comando no form do nivel. Eis o codigo.

public void commandAction(Command cmd, Displayable display)
    {

        if(display==mainNivel){

            if(cmd.getCommandType()==Command.BACK)
            {
           display(this.initMainForm());

            }
            if(cmd==comSelect){

            switch(mainNivel.getSelectedIndex()){
                case 0:
                    mostrarMsgNivel();
                    indice=1;
                    SaveNivel();


                case 1:
                    mostrarMsgNivel();
                    indice=2;
                    SaveNivel();


                case 2:
                    mostrarMsgNivel();
                    indice=3;
                    SaveNivel();


                }
            }
        }

pronto ou seja no form nivel o usuario clica no primeiro item da lista e a variavel indice recebe 1,clica na segundo item e recebe 2 e assim por diante,depois salva esta variavel com o record store e a sobrescreve caso seja necessário.Agora vão para o canvas do meu jogo, se alguma coisa tiver errada aew em cima por favor podem concertar.

Há um método no Canvas chamada valorizaJogada responsável por valorizar a jogada do usuario no jogo da velha.

public void valorizaJogada( int col, int lin)
   {
   
      linhaSelec = colunaSelec = 0;

        for( int i=0; i<3; i++ ){
            for( int j=0; j<3; j++ ){
                if( ( linhaSelec == lin ) && ( colunaSelec ==col ) ){
                    if ( caixa[i][j] == 0 ){
                        caixa[i][j] = 1;
                        verificaGanhador();
                        repaint();
  
              if ( ( vencedor != 'x' ) && ( jogada <= 5 )){
                           nivelFacil();
                            repaint();
                        }
                 
                        break;
                    }
                }
                else{
                    colunaSelec = colunaSelec + 83;
                }
            }

            linhaSelec  = linhaSelec + 100;
            colunaSelec = 0;
        }


     }
Bem minha duvida é bm nessa parte aqui.
if ( ( vencedor != 'x' ) && ( jogada <= 5 )){
                           nivelFacil();
                            repaint();
                        }
Quero fazer essa comparação comparando com o valor armazenado no meu record store,para da entrada nos metodos dos niveis .Tipo pensei muitas coisas,as eu queria algo mais ou menos assim:
public void valorizaJogada( int col, int lin)
   {
   ...
        
              if ( ( vencedor != 'x' ) && ( jogada <= 5 )&&(midlet.nivel.getRecord(1)==0)){
                           nivelFacil();
                            repaint();
                        }
                 
                   }

...
     }

Crio uma variavel do tipo midlet chama o RS da mesma classe vjo o que tm gravado no seu id.Se for igual a 0 nivl facil,igual 1 nivl mdio e assim por diante.Porem o codigo acima da erro tem outras formas que tb n deu,como chamar o método de leitura da variavel dentro do metodo valoriza Jogada e então fazer a comparação .Bem qualquer ajuda é bem vinda,para resolver este dilema.

Desde já agradeço. :wink:

4 Respostas

nathanpc

Por favor, poderei te ajudar, mas coloque as code tags nesse código.

nathanpc

Bem, você está usando uma outra classe que está localizada em midlet.nivel, onde está localizado o RecordStore?
Se não, você pode fazer bem assim:

public void valorizaJogada( int col, int lin) { ... if ( ( vencedor != 'x' ) && ( jogada <= 5 )&&(midlet.nivel.getRecord(1)==0)){ nivelFacil(); repaint(); } } ... }
Espero que ajude,
Nathan Paulino Campos

STRAUSS69

JA TENTEI ISSO MAS NAO DEU

nathanpc

Hum, vou dar uma analizada melhor on seu código!

Criado 28 de agosto de 2009
Ultima resposta 29 de ago. de 2009
Respostas 4
Participantes 2