import java.util.*; public class GameState { private String word; private char[] hiddenWord; private int errors; private Set triedLetters; private static final int MAX_ERRORS = 9; /* Constructeur : initialise le mot à deviner */ public GameState(String wordToGuess) { this.word = wordToGuess.toLowerCase(); this.hiddenWord = new char[word.length()]; for (int i = 0; i < word.length(); i++) { if (word.charAt(i) == ' ') { hiddenWord[i] = ' '; // espaces visibles dans les mots difficiles } else { hiddenWord[i] = '_'; } } this.triedLetters = new HashSet<>(); this.errors = 0; } /* Tente une lettre dans le mot */ public void tryLetter(char letter) { letter = Character.toLowerCase(letter); triedLetters.add(letter); boolean found = false; for (int i = 0; i < word.length(); i++) { if (word.charAt(i) == letter) { hiddenWord[i] = letter; found = true; } } if (!found) { errors++; } } /* Vérifie si une lettre a déjà été essayée */ public boolean hasTriedLetter(char letter) { letter = Character.toLowerCase(letter); return triedLetters.contains(letter); } /* Vérifie si le joueur a gagné */ public boolean isWon() { for (char c : hiddenWord) { if (c == '_') { return false; } } return true; } /* Vérifie si le joueur a perdu */ public boolean isLost() { return errors >= MAX_ERRORS; } /* Retourne le nombre d'erreurs */ public int getErrors() { return errors; } /* Retourne le mot caché avec espaces entre lettres */ public String getHiddenWord() { StringBuilder sb = new StringBuilder(); for (int i = 0; i < hiddenWord.length; i++) { sb.append(hiddenWord[i]); if (i < hiddenWord.length - 1) { sb.append(' '); } } return sb.toString(); } /* Retourne le mot original */ public String getWord() { return word; } }