import java.util.Random; import java.util.Set; import java.util.HashSet; import java.util.Locale; import java.util.Scanner; public class Jeu { // liste des etats a afficher private static final String[] stages = new String[] { "=========\n", " |\n" + " |\n" + " |\n" + " |\n" + " |\n" + "=========\n", " +---+\n" + " |\n" + " |\n" + " |\n" + " |\n" + " |\n" + "=========\n", " +---+\n" + " | |\n" + " |\n" + " |\n" + " |\n" + " |\n" + "=========\n", " +---+\n" + " | |\n" + " O |\n" + " |\n" + " |\n" + " |\n" + "=========\n", " +---+\n" + " | |\n" + " O |\n" + " | |\n" + " |\n" + " |\n" + "=========\n", " +---+\n" + " | |\n" + " O |\n" + " /|\\ |\n" + " |\n" + " |\n" + "=========\n", " +---+\n" + " | |\n" + " O |\n" + " /|\\ |\n" + " / \\ |\n" + " |\n" + "=========\n" }; // fonction pour masquer le mot generer aleatoirement static String maskWord(String secretWord, Set foundLetters) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < secretWord.length(); i++) { char original = secretWord.charAt(i); char c = Character.toLowerCase(original); if (!Character.isLetter(c)) { sb.append(original); } else if (foundLetters.contains(c)) { sb.append(original); } else { sb.append('_'); } if (i < secretWord.length() - 1) sb.append(' '); } return sb.toString(); } // fonction qui permet d'afficher les etats du pendu static void drawHangman(int errors) { int idx = Math.min(Math.max(errors, 0), stages.length - 1); System.out.println(stages[idx]); } // fonction qui permet de savoir si la partie est gagnee static boolean isWin(String secretWord, Set foundLetters) { for (int i = 0; i < secretWord.length(); i++) { char c = Character.toLowerCase(secretWord.charAt(i)); if (Character.isLetter(c) && !foundLetters.contains(c)) return false; } return true; } public static void main(String[] args) { String[] words = { "ordinateur", "voiture", "maison", "soleil", "lumiere", "fromage", "chocolat", "montagne", "rivière", "plage", "oiseau", "papillon", "musique", "chateau", "livre", "telephone", "aventure", "mystere", "foret", "fleur", "chapeau", "nuage", "horloge", "chaise", "fenetre", "paysage", "bouteille", "parapluie", "clavier", "souris", "brouillard", "village", "histoire", "cerise", "pomme", "banane", "poisson", "arbre", "cascade", "cheval" }; Random random = new Random(); String secretWord = words[random.nextInt(words.length)]; Set foundLetters = new HashSet<>(); Set triedLetters = new HashSet<>(); int errors = 0; int maxErrors = stages.length - 1; Scanner scanner = new Scanner(System.in); System.out.println("=== Jeu du Pendu ==="); while (true) { drawHangman(errors); System.out.println("Mot: " + maskWord(secretWord, foundLetters)); System.out.println("Lettres essayées : " + triedLetters); System.out.println("Erreurs : " + errors + "/" + maxErrors); System.out.print("Propose une lettre: "); String input = scanner.nextLine().trim().toLowerCase(Locale.ROOT); if (input.length() != 1 || !Character.isLetter(input.charAt(0))) { System.out.println("Entrez une seule lettre."); continue; } char letter = input.charAt(0); if (triedLetters.contains(letter)) { System.out.println("Déjà essayé."); continue; } triedLetters.add(letter); boolean hit = false; for (int i = 0; i < secretWord.length(); i++) { if (Character.toLowerCase(secretWord.charAt(i)) == letter) { foundLetters.add(letter); hit = true; } } if (!hit) { errors++; System.out.println("Mauvaise lettre."); } else { System.out.println("Bonne lettre !"); } if (isWin(secretWord, foundLetters)) { System.out.println("\nTu as trouvé " + secretWord); drawHangman(errors); break; } if (errors >= maxErrors) { drawHangman(errors); System.out.println("\nPerdu ! Le mot était " + secretWord); break; } } scanner.close(); } }