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.
*/
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;

View File

@@ -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

View File

@@ -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;