This commit is contained in:
2025-10-08 12:23:02 +02:00
parent d074170b0f
commit 86537ff528
12 changed files with 1167 additions and 0 deletions

View File

@@ -0,0 +1,88 @@
import java.util.*;
public class GameState {
private String word;
private char[] hiddenWord;
private int errors;
private Set<Character> 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;
}
}