Temos duas maneiras de fazer isso. Uma é deixar o initializer adicionar a palavra por meio do JOptionPane, a outra é ler a palavra de um arquivo de texto. Vamos escolher a segunda forma.
Dessa maneira, vamos modificar nosso diagrama adicionando o ReadFile.
A classe ReadFile pode ser que precise ler múltiplos arquivos, sendo assim, a classe deve permitir que o usuário escolha o arquivo.
O arquivo escolhido pode ter várias frase ou palavras a cada linha, ou seja, a classe ReadFile deve escolher aleatoriamente uma linha do arquivo.
ReadFile.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.net.URL; import javax.Swing.JOptionPane; public class ReadFile { FileReader inputFile; String filePath; String fileName; public ReadFile() {} public void selectFile() { Object[] selectionValues = { "wheel1.txt", "wheel2.txt" }; String initialSelection = ""; Object selection = JOptionPane.showInputDialog( null, 30, "Selecione o arquivo que você quer usar", "Selecione um arquivo", JOptionPane.QUESTION_MESSAGE, null, selectionValues, initialSelection); filePath = "../txt/" + selection; URL url = getClass().getResource(filePath); fileName = url.getPath(); try{ //Criar objeto do FileReader inputFile = new FileReader(fileName); }catch(FileNotFoundException e){ } } public String readContent() { BufferedReader bufferedReader = BufferedReader(inputFile); String line = null; int numLines = 3; int lineNum; int count; lineNum = (int) (Math.random() * numLines); try{ count = 0; while((line = bufferedReader.readLine()) != null) { if(count == lineNum) { //pegue uma linha aleatória break; } count++; } bufferedReader.close(); }catch(IOException e){ } return line; } } |
A classe ReadFile tem dois métodos: selectFile() e readContent(). O método selectFile() define um Object[] array para guardar dois nomes de arquivos.
Object[] selectionValues = {“wheel1.txt”, “wheel2.txt”};
JOptionPane.showInputDialog() mostra os dois arquivos de texto e o usuário deve escolher um.
O método readContent() utiliza a variável “numLines = 3” para indicar que o arquivo de texto contém três linhas o qual o random irá gerar um número entre 1 e 3 e pegar uma para o jogo.
Essa classe satisfaz o objetivo do jogo, porém, se o usuário quiser adicionar um novo arquivo de texto ou o número de linhas do arquivo for maior que três, não será possível fazer a mudança.
Então vamos fazer a modificação do arquivo.
ReadFileV2.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.net.URL; import javax.Swing.JOptionPane; public class ReadFileV2 { private FileReader inputFile; String filePath; String fileName; public ReadFile() {} public void selectFile() { String aFileName = JOptionPane.showInputDialog( "Digite o nome do arquivo"); filePath = "../txt/" + aFileName; URL url = getClass().getResource(filePath); fileName = url.getPath(); try{ //Criar objeto do FileReader inputFile = new FileReader(fileName); }catch(FileNotFoundException e){ } } public String readContent() { BufferedReader bufferedReader = BufferedReader(inputFile); String line = null; int numLines; int lineNum; int count; String lineNumStr = JOptionPane.showInputDialog( "Quantas linhas tem o arquivo?" ); numLines = Integer.parseInt(lineNumStr); lineNum = (int) (Math.random() * numLines); try{ count = 0; while((line = bufferedReader.readLine()) != null) { if(count == lineNum) { //pegue uma linha aleatória break; } count++; } bufferedReader.close(); }catch(IOException e){ } return line; } } |
Fonte: Learning Java with Games
Deixe um comentário