mise en place de hell le vrai difficile

This commit is contained in:
2025-10-08 16:49:49 +02:00
parent 92aa82e7c7
commit 4f38105062
6 changed files with 41 additions and 15 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -235,7 +235,7 @@ public class Action {
* et relance une partie avec cette difficulté en utilisant PlayButtonListener. * et relance une partie avec cette difficulté en utilisant PlayButtonListener.
*/ */
private void showDifficultyDialog() { private void showDifficultyDialog() {
String[] options = {"Facile", "Moyen", "Difficile"}; String[] options = {"Facile", "Moyen", "Difficile", "Hell"};
// Boîte de dialogue avec trois options // Boîte de dialogue avec trois options
int choice = JOptionPane.showOptionDialog( int choice = JOptionPane.showOptionDialog(
@@ -262,6 +262,9 @@ public class Action {
case 2: case 2:
newDifficulty = "difficile"; newDifficulty = "difficile";
break; break;
case 3:
newDifficulty = "hell";
break;
default: default:
newDifficulty = "moyen"; newDifficulty = "moyen";
break; break;

View File

@@ -29,9 +29,10 @@ public class Display {
JButton easyButton = new JButton("Facile"); JButton easyButton = new JButton("Facile");
JButton mediumButton = new JButton("Moyen"); JButton mediumButton = new JButton("Moyen");
JButton hardButton = new JButton("Difficile"); JButton hardButton = new JButton("Difficile");
JButton hellButton = new JButton("Hell");
// Mise en forme des boutons // Mise en forme des boutons
JButton[] buttons = { easyButton, mediumButton, hardButton }; JButton[] buttons = { easyButton, mediumButton, hardButton, hellButton};
for (JButton button : buttons) { for (JButton button : buttons) {
button.setAlignmentX(Component.CENTER_ALIGNMENT); button.setAlignmentX(Component.CENTER_ALIGNMENT);
button.setPreferredSize(new Dimension(300, 100)); button.setPreferredSize(new Dimension(300, 100));
@@ -43,6 +44,7 @@ public class Display {
easyButton.addActionListener(new PlayButtonListener(frame, "facile")); easyButton.addActionListener(new PlayButtonListener(frame, "facile"));
mediumButton.addActionListener(new PlayButtonListener(frame, "moyen")); mediumButton.addActionListener(new PlayButtonListener(frame, "moyen"));
hardButton.addActionListener(new PlayButtonListener(frame, "difficile")); hardButton.addActionListener(new PlayButtonListener(frame, "difficile"));
hellButton.addActionListener(new PlayButtonListener(frame, "hell"));
// Ajout des composants à la fenêtre // Ajout des composants à la fenêtre
frame.add(Box.createVerticalGlue()); frame.add(Box.createVerticalGlue());
@@ -53,6 +55,8 @@ public class Display {
frame.add(mediumButton); frame.add(mediumButton);
frame.add(Box.createVerticalStrut(20)); frame.add(Box.createVerticalStrut(20));
frame.add(hardButton); frame.add(hardButton);
frame.add(Box.createVerticalStrut(20));
frame.add(hellButton);
frame.add(Box.createVerticalGlue()); frame.add(Box.createVerticalGlue());
// Affichage de la fenêtre // Affichage de la fenêtre

View File

@@ -6,16 +6,17 @@ import java.util.*;
/** /**
* Classe gérant la logique du jeu du pendu. * Classe gérant la logique du jeu du pendu.
* *
* Cette classe choisit un mot aléatoire selon la difficulté, * Cette classe sélectionne un mot (ou une combinaison de mots) aléatoire
* garde en mémoire le mot secret, les lettres devinées, * selon la difficulté, conserve l'état du jeu (mot secret, lettres devinées,
* les lettres incorrectes, et le nombre de vies restantes. * 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 { public class Random_word {
/** Mot secret que le joueur doit deviner */ /** Mot secret que le joueur doit deviner */
private String secretWord; 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; private char[] hiddenWord;
/** Lettres correctement devinées par le joueur */ /** 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é * Constructeur : sélectionne un mot aléatoire selon la difficulté
* et initialise les structures du jeu. * 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 * @throws RuntimeException si aucun mot n'a pu être choisi
*/ */
public Random_word(String difficulty) { 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) { if (this.secretWord == null) {
throw new RuntimeException("Impossible de choisir un mot aléatoire !"); 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()]; 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.lettersGuessed = new HashSet<>();
this.incorrectLetters = new HashSet<>(); this.incorrectLetters = new HashSet<>();
} }
@@ -90,7 +109,7 @@ public class Random_word {
line = line.trim(); line = line.trim();
if (!line.isEmpty()) { if (!line.isEmpty()) {
count++; 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) { if (random.nextInt(count) == 0) {
randomWord = line; randomWord = line;
} }
@@ -105,10 +124,10 @@ public class Random_word {
/** /**
* Tente une lettre proposée par le joueur. * 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 * @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) { public String guessLetter(char letter) {
letter = Character.toLowerCase(letter); letter = Character.toLowerCase(letter);
@@ -118,11 +137,11 @@ public class Random_word {
return "Vous avez déjà essayé cette lettre !"; return "Vous avez déjà essayé cette lettre !";
} }
// Si la lettre est dans le mot secret // Lettre correcte
if (secretWord.indexOf(letter) >= 0) { if (secretWord.indexOf(letter) >= 0) {
lettersGuessed.add(letter); 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++) { for (int i = 0; i < secretWord.length(); i++) {
if (secretWord.charAt(i) == letter) { if (secretWord.charAt(i) == letter) {
hiddenWord[i] = letter; hiddenWord[i] = letter;