Cursos / Jogos Digitais / Programação Estruturada / Aula

arrow_back Aula 14 - Adicionando novos recursos ao jogo da velha

5. Salvando Dados em Arquivo

Agora que já criamos um tipo de dado do tipo registro para representar os dados de um jogador e que implementamos as funcionalidades básicas para um rank, precisamos definir em qual arquivo vão ser guardadas as informações de todos os jogadores, para que as mesmas não sejam perdidas entre uma partida e outra. Veja a seguinte declaração, que precisa ficar no início do corpo da classe JogoDaVelha:

A variável “arquivo” é utilizada para representar o arquivo a ser criado para armazenar os dados do rank. Lembre-se que, para usar as classes Java que manipulam arquivos, precisamos importá-las através de comandos como o seguinte:

Para cada classe utilizada, você deve ter certeza de que o seu respectivo comando de import foi utilizado. Para implementar a manipulação de arquivos (escrita e leitura), vamos criar duas novas rotinas. A primeira delas é a salvarJogadores(), como mostrado a seguir:

O código mostrado faz uso das classes ObjectOutputStream e FileOutputStream de Java. Ao criar um ObjectOutputStream, você deve passar um FileOutputStream que referencia o arquivo a ser criado (variável “arquivo”). Após isso, para salvar os registros basta chamar a rotina saida.writeObject() passando como parâmetro o array de registros “jogadores”. Não é fácil? Agora, todo esse código precisa estar dentro de um bloco try/catch, o qual você estudará bem no módulo de orientação a objetos, ficando nesta aula apenas o seu uso sem maiores explicações, já que isso vai além do contexto de nosso módulo.

Além da rotina para salvar registros, precisamos também de uma rotina para lê-los, chamada de lerJogadores():

Na rotina lerJogadores(), é preciso fazer uso das classes ObjectInputStream e FileInputStream, que funcionam de forma similar ao que foi mostrado na rotina salvarJogadores(), só que agora a função é de leitura, e não escrita. A leitura é feita através da função saida.readObject(). Como essa função é genérica (funciona para vários tipos de dados), precisamos especificar o tipo que sabemos estar contido no arquivo, o qual é Jogador[]. Especificado esse tipo, podemos atribuir o resultado à variável “jogadores”. Por fim, precisamos atualizar a variável quantidadeJogadores de acordo com a quantidade de jogadores retornado dentro do vetor!

Para o jogo funcionar em arquivo, precisamos fazer só mais alguns ajustes: chamar a rotina lerJogadores() no início da main; chamar a rotina salvarJogadores no final da main; alterar a classe Jogador da seguinte forma:

Essa alteração na classe Jogador é para que as rotinas que utilizamos (writeObject e readObject) possam funcionar, sendo que esse assunto vai ser aprofundado no módulo de orientação a objetos. E se você adicionou corretamente os import às classes que utilizamos, a lista de import do arquivo JogoDaVelha estará da seguinte forma:

Já o arquivo Jogador possuirá o seguinte import:

Agora sim! O nosso jogo está completo com as funcionalidades básicas que implementamos na aula anterior e os recursos de cadastro, contagem de tempo e ranking. Compile, execute o jogo e divirta-se!

Versão 5.3 - Todos os Direitos reservados