Boa noite estou com algumas dificuldades em ler um arquivo em java e retornar uma palavra, em que o utilizador tem de adivinhar essa palavra. O codigo que desenvolvi lê um conjunto de palavras e contem um contador que conta todas as vezes que se carrega na letra, no entanto eu pretendo que o contador conte apenas as letras que nao pertencem à palavra a adivinhar.
[CÓDIGO]
class WordsBank extends JFrame implements ActionListener{
private final static String[] words = { "Adventure", "Hungary", "Pizza", "Madrid", "Flower",
"Chicken", "Israel", "Romania", "Denmark", "Australia" };
private final Random rand = new Random();
public String getRandomWord() {
return words[rand.nextInt(words.length)];
}
class ChosenWord {
private String word;
private boolean[] chars_guessed;
public ChosenWord(String word){
this.word = word.toLowerCase();
chars_guessed = new boolean[word.length()];
}
public boolean isEntireWordGuessed() {
for (boolean b : chars_guessed) {
if (!b)
return false;
}
return true;
}
public void charGuess(char guess) {
int index = word.indexOf(guess);
while (index >= 0) {
chars_guessed[index] = true;
index = word.indexOf(guess, index + 1);
}
}
@Override
public String toString(){
StringBuilder formatted_word = new StringBuilder();
for(int index = 0; index < word.length(); index++) {
if (chars_guessed[index]) {
formatted_word.append(word.charAt(index));
} else {
formatted_word.append('_');
}
formatted_word.append(' ');
}
return formatted_word.toString();
}
}
class Game {
private final static String ALL_LETTERS = "abcdefghijklmnopqrstuvwxyz";
private final WordsBank words_bank = new WordsBank();
private final JFrame frame = new JFrame("Guess the Word");
private final JLabel puzzle_word;
private final ArrayList<JButton> letter_buttons = new ArrayList<>();
JButton[] buttons = new JButton[26];
private int number_guesses;
private ChosenWord chosen_word;
Game() {
frame.setSize(300, 300);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
puzzle_word = new JLabel("Puzzle: ");
panel.add(puzzle_word, BorderLayout.CENTER);
JPanel bottomPanel = new JPanel();
JButton[] buttons = new JButton[26];
String[] letters = { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J",
"K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V",
"W", "X", "Y", "Z" };
for (int i = 0; i < buttons.length; i++) {
buttons[i] = new JButton(letters[i]);
buttons[i].setSize(40, 40);
buttons[i].setActionCommand(letters[i]);
//buttons[i].addActionListener(this);
bottomPanel.add(buttons[i]);
}
panel.add(bottomPanel, BorderLayout.SOUTH);
frame.setContentPane(panel);
reset();
frame.setVisible(true);
}
private void reset() {
chosen_word = new ChosenWord(words_bank.getRandomWord());
number_guesses = 0;
for(JButton btn : letter_buttons) {
btn.setEnabled(true);
}
update_game_state();
}
private void guessLetter(ActionEvent evt) {
char guessed_letter = evt.getActionCommand().charAt(0);
handleUserLetterGuess(guessed_letter);
JButton button = (JButton) evt.getSource();
button.setEnabled(false);
if (chosen_word.isEntireWordGuessed()) {
for (JButton btn : letter_buttons) {
btn.setEnabled(false);
}
}
}
private void handleUserLetterGuess(char guessed_char){
number_guesses++;
chosen_word.charGuess(guessed_char);
update_game_state();
}
private void update_game_state() {
puzzle_word.setText("Puzzle: " + chosen_word + ", guesses: "+ number_guesses);
}
}