diff --git a/out/fr/iut/Projet/Action.class b/out/fr/iut/Projet/Action.class index a61f84f..2f0fd28 100644 Binary files a/out/fr/iut/Projet/Action.class and b/out/fr/iut/Projet/Action.class differ diff --git a/out/fr/iut/Projet/Display.class b/out/fr/iut/Projet/Display.class index 6818981..8c59ebf 100644 Binary files a/out/fr/iut/Projet/Display.class and b/out/fr/iut/Projet/Display.class differ diff --git a/out/fr/iut/Projet/Random_word.class b/out/fr/iut/Projet/Random_word.class index b16ba00..5996aa7 100644 Binary files a/out/fr/iut/Projet/Random_word.class and b/out/fr/iut/Projet/Random_word.class differ diff --git a/src/fr/iut/Projet/Action.java b/src/fr/iut/Projet/Action.java index 53d28d7..bdcfb91 100644 --- a/src/fr/iut/Projet/Action.java +++ b/src/fr/iut/Projet/Action.java @@ -235,7 +235,7 @@ public class Action { * et relance une partie avec cette difficulté en utilisant PlayButtonListener. */ private void showDifficultyDialog() { - String[] options = {"Facile", "Moyen", "Difficile"}; + String[] options = {"Facile", "Moyen", "Difficile", "Hell"}; // Boîte de dialogue avec trois options int choice = JOptionPane.showOptionDialog( @@ -262,6 +262,9 @@ public class Action { case 2: newDifficulty = "difficile"; break; + case 3: + newDifficulty = "hell"; + break; default: newDifficulty = "moyen"; break; diff --git a/src/fr/iut/Projet/Display.java b/src/fr/iut/Projet/Display.java index 4ec26ba..829450d 100644 --- a/src/fr/iut/Projet/Display.java +++ b/src/fr/iut/Projet/Display.java @@ -29,9 +29,10 @@ public class Display { JButton easyButton = new JButton("Facile"); JButton mediumButton = new JButton("Moyen"); JButton hardButton = new JButton("Difficile"); + JButton hellButton = new JButton("Hell"); // Mise en forme des boutons - JButton[] buttons = { easyButton, mediumButton, hardButton }; + JButton[] buttons = { easyButton, mediumButton, hardButton, hellButton}; for (JButton button : buttons) { button.setAlignmentX(Component.CENTER_ALIGNMENT); button.setPreferredSize(new Dimension(300, 100)); @@ -43,6 +44,7 @@ public class Display { easyButton.addActionListener(new PlayButtonListener(frame, "facile")); mediumButton.addActionListener(new PlayButtonListener(frame, "moyen")); hardButton.addActionListener(new PlayButtonListener(frame, "difficile")); + hellButton.addActionListener(new PlayButtonListener(frame, "hell")); // Ajout des composants à la fenêtre frame.add(Box.createVerticalGlue()); @@ -53,6 +55,8 @@ public class Display { frame.add(mediumButton); frame.add(Box.createVerticalStrut(20)); frame.add(hardButton); + frame.add(Box.createVerticalStrut(20)); + frame.add(hellButton); frame.add(Box.createVerticalGlue()); // Affichage de la fenêtre diff --git a/src/fr/iut/Projet/Random_word.java b/src/fr/iut/Projet/Random_word.java index eab0ccb..f864803 100644 --- a/src/fr/iut/Projet/Random_word.java +++ b/src/fr/iut/Projet/Random_word.java @@ -6,16 +6,17 @@ import java.util.*; /** * Classe gérant la logique du jeu du pendu. * - * Cette classe choisit un mot aléatoire selon la difficulté, - * garde en mémoire le mot secret, les lettres devinées, - * les lettres incorrectes, et le nombre de vies restantes. + * Cette classe sélectionne un mot (ou une combinaison de mots) aléatoire + * selon la difficulté, conserve l'état du jeu (mot secret, lettres devinées, + * lettres incorrectes, nombre de vies) et fournit des méthodes pour deviner + * des lettres et vérifier l'état du jeu. */ public class Random_word { /** Mot secret que le joueur doit deviner */ private String secretWord; - /** Tableau représentant le mot caché avec les lettres découvertes */ + /** Tableau représentant le mot caché avec les lettres découvertes et espaces */ private char[] hiddenWord; /** Lettres correctement devinées par le joueur */ @@ -31,19 +32,37 @@ public class Random_word { * Constructeur : sélectionne un mot aléatoire selon la difficulté * et initialise les structures du jeu. * - * @param difficulty Niveau de difficulté ("facile", "moyen", "difficile") + * @param difficulty Niveau de difficulté ("facile", "moyen", "difficile", "hell") * @throws RuntimeException si aucun mot n'a pu être choisi */ public Random_word(String difficulty) { - this.secretWord = getRandomWord(difficulty); + if (difficulty.equalsIgnoreCase("hell")) { + // En mode Hell, on choisit deux mots faciles et on les concatène avec un espace + String firstWord = getRandomWord("facile"); + String secondWord = getRandomWord("facile"); + + if (firstWord == null || secondWord == null) { + throw new RuntimeException("Impossible de choisir deux mots pour le mode Hell !"); + } + + this.secretWord = firstWord + " " + secondWord; + } else { + // Pour les autres difficultés, on choisit un seul mot correspondant + this.secretWord = getRandomWord(difficulty); + } if (this.secretWord == null) { throw new RuntimeException("Impossible de choisir un mot aléatoire !"); } - this.lives = 8; // nombre de vies par défaut + this.lives = 8; // nombre de vies par défaut this.hiddenWord = new char[secretWord.length()]; - Arrays.fill(this.hiddenWord, '_'); // initialise le mot caché avec des underscores + + // Initialise le mot caché : underscore pour les lettres, espace conservé + for (int i = 0; i < secretWord.length(); i++) { + hiddenWord[i] = (secretWord.charAt(i) == ' ') ? ' ' : '_'; + } + this.lettersGuessed = new HashSet<>(); this.incorrectLetters = new HashSet<>(); } @@ -90,7 +109,7 @@ public class Random_word { line = line.trim(); if (!line.isEmpty()) { count++; - // Choix aléatoire d'une ligne avec la méthode de Reservoir Sampling + // Choix aléatoire d'une ligne avec Reservoir Sampling if (random.nextInt(count) == 0) { randomWord = line; } @@ -105,10 +124,10 @@ public class Random_word { /** * Tente une lettre proposée par le joueur. - * Met à jour l'état du jeu (mot caché, lettres incorrectes, vies). + * Met à jour l'état du jeu (mot caché, lettres incorrectes, vies restantes). * * @param letter lettre proposée - * @return message d'information pour le joueur + * @return message d'information pour le joueur (succès, erreur ou fin de partie) */ public String guessLetter(char letter) { letter = Character.toLowerCase(letter); @@ -118,11 +137,11 @@ public class Random_word { return "Vous avez déjà essayé cette lettre !"; } - // Si la lettre est dans le mot secret + // Lettre correcte if (secretWord.indexOf(letter) >= 0) { lettersGuessed.add(letter); - // Remplace les underscores correspondants par la lettre devinée + // Remplace les underscores par la lettre devinée for (int i = 0; i < secretWord.length(); i++) { if (secretWord.charAt(i) == letter) { hiddenWord[i] = letter;