diff --git a/PenduJudeChrist/Display.class b/PenduJudeChrist/Display.class index 330b250..c7ce3c6 100644 Binary files a/PenduJudeChrist/Display.class and b/PenduJudeChrist/Display.class differ diff --git a/PenduJudeChrist/GameLogic.class b/PenduJudeChrist/GameLogic.class index e260f55..8be871f 100644 Binary files a/PenduJudeChrist/GameLogic.class and b/PenduJudeChrist/GameLogic.class differ diff --git a/PenduJudeChrist/HangedGameGUI$1.class b/PenduJudeChrist/HangedGameGUI$1.class index d08cc58..c8e75e6 100644 Binary files a/PenduJudeChrist/HangedGameGUI$1.class and b/PenduJudeChrist/HangedGameGUI$1.class differ diff --git a/PenduJudeChrist/HangedGameGUI.class b/PenduJudeChrist/HangedGameGUI.class index 4cdb60a..17614f0 100644 Binary files a/PenduJudeChrist/HangedGameGUI.class and b/PenduJudeChrist/HangedGameGUI.class differ diff --git a/PenduJudeChrist/InputHandler.class b/PenduJudeChrist/InputHandler.class index 220fab2..f70238d 100644 Binary files a/PenduJudeChrist/InputHandler.class and b/PenduJudeChrist/InputHandler.class differ diff --git a/PenduJudeChrist/ScoreManager.class b/PenduJudeChrist/ScoreManager.class index a1f7012..241ffc0 100644 Binary files a/PenduJudeChrist/ScoreManager.class and b/PenduJudeChrist/ScoreManager.class differ diff --git a/PenduJudeChrist/TimerManager.class b/PenduJudeChrist/TimerManager.class index c2f43e1..7c3d284 100644 Binary files a/PenduJudeChrist/TimerManager.class and b/PenduJudeChrist/TimerManager.class differ diff --git a/PenduJudeChrist/WordSelector.class b/PenduJudeChrist/WordSelector.class index 565bb72..ff53ed9 100644 Binary files a/PenduJudeChrist/WordSelector.class and b/PenduJudeChrist/WordSelector.class differ diff --git a/PenduWIlfried/ChooseWord.class b/PenduWIlfried/ChooseWord.class index c692875..b6d5680 100644 Binary files a/PenduWIlfried/ChooseWord.class and b/PenduWIlfried/ChooseWord.class differ diff --git a/PenduWIlfried/GameState.class b/PenduWIlfried/GameState.class index 0e74776..8bc3ce8 100644 Binary files a/PenduWIlfried/GameState.class and b/PenduWIlfried/GameState.class differ diff --git a/PenduWIlfried/HangmanPanel.class b/PenduWIlfried/HangmanPanel.class index 8a59c90..eb72496 100644 Binary files a/PenduWIlfried/HangmanPanel.class and b/PenduWIlfried/HangmanPanel.class differ diff --git a/PenduWIlfried/main$1.class b/PenduWIlfried/main$1.class index ad72706..53e8818 100644 Binary files a/PenduWIlfried/main$1.class and b/PenduWIlfried/main$1.class differ diff --git a/PenduWIlfried/main$2.class b/PenduWIlfried/main$2.class index 977d36b..5cf9828 100644 Binary files a/PenduWIlfried/main$2.class and b/PenduWIlfried/main$2.class differ diff --git a/PenduWIlfried/main$3.class b/PenduWIlfried/main$3.class index 7ea91fa..27ebd87 100644 Binary files a/PenduWIlfried/main$3.class and b/PenduWIlfried/main$3.class differ diff --git a/PenduWIlfried/main.class b/PenduWIlfried/main.class index 437b1e0..aa423ed 100644 Binary files a/PenduWIlfried/main.class and b/PenduWIlfried/main.class differ diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..0ebf54f --- /dev/null +++ b/readme.md @@ -0,0 +1,54 @@ +# Exercice 5 – Mesure de métriques et profiling du programme Hangman + +# PenduWilfried + +## 1. Calcul de la complexité cyclomatique + +| Classe / Méthode | Description | Complexité cyclomatique | +|------------------|------------|------------------------| +| `ChooseWord.chooseTheWord(String)` | Choisit un mot selon la difficulté | 4 | +| `ChooseWord.getFilenameByDifficulty(String)` | Retourne le fichier selon difficulté | 4 | +| `ChooseWord.isValidForDifficulty(String, String)` | Vérifie si le mot est valide pour la difficulté | 4 | +| `GameState.tryLetter(char)` | Essaie une lettre et met à jour le score | 3 | +| `GameState.updateScore()` | Calcule le score en fonction du temps et des erreurs | 3 | +| `GameState.getDifficultyMultiplier()` | Retourne multiplicateur selon difficulté | 4 | +| `GameState.isWon()` | Vérifie si le joueur a gagné | 2 | +| `HangmanPanel.paintComponent(Graphics)` | Dessine le pendu selon erreurs | 9 | +| `main.handleLetterInput()` | Gestion saisie utilisateur et mise à jour UI | 9 | +| `main.showEndGameMessage(boolean, int)` | Affiche message de fin de jeu | 3 | +| `main.main(String[])` | Point d’entrée du programme | 1 | + +**Conclusion :** +La majorité des fonctions ont une complexité modérée (<10). Les fonctions `paintComponent` et `handleLetterInput` sont plus complexes, ce qui pourrait justifier une refactorisation pour améliorer la lisibilité. + + +# PenduJude + +## 1. Calcul de la complexité cyclomatique + + +| Classe / Méthode | Description | Complexité cyclomatique | +|------------------|------------|------------------------| +| `Display.showWord(String, Set)` | Affiche le mot avec lettres devinées | 3 (for + if/else) | +| `Display.showLives(int, int)` | Affiche le nombre de vies | 1 | +| `GameLogic.isWordGuessed(String, Set)` | Vérifie si le mot est deviné | 3 (for + if + continue) | +| `InputHandler.getLetter(Scanner, Set)` | Gestion de la saisie utilisateur | 5 (while + if multiples + continue) | +| `ScoreManager.calculateScore(int, long, String)` | Calcule le score final | 5 (switch + if) | +| `TimerManager.start()` | Démarre le chronomètre | 1 | +| `TimerManager.getElapsedTimeMillis()` | Retourne le temps écoulé | 1 | +| `WordSelector.loadWordsForDifficulty(String, String)` | Charge les mots depuis un fichier | 3 (try/catch + while) | +| `WordSelector.pickWord(String)` | Retourne un mot aléatoire selon difficulté | 2 (if) | +| `HangedGameGUI.processGuess()` | Traitement d’une lettre saisie | 9 (if/else multiples + for) | +| `HangedGameGUI.updateWordDisplay()` | Met à jour l’affichage du mot | 3 (for + if/else) | +| `HangedGameGUI.drawHangman(Graphics)` | Dessine le pendu selon erreurs | 11 (chaîne de if) | +| `HangedGameGUI.checkGameEnd()` | Vérifie la fin du jeu | 2 (if) | +| `HangedGameGUI.endGame(boolean)` | Affiche le message de fin et score | 5 (if/else + JOptionPane) | +| `HangedGameGUI.main(String[])` | Point d’entrée | 1 | + +**Conclusion :** +Certaines méthodes GUI (`drawHangman`, `processGuess`) ont une complexité élevée (>9). Les autres fonctions sont simples et bien encapsulées. Une refactorisation pourrait améliorer la lisibilité et la maintenabilité. +Le code est **fonctionnel et structuré**, avec quelques méthodes complexes qui pourraient bénéficier d’une simplification. La séparation logique (game logic, affichage, gestion du timer) est bien faite, ce qui facilite la maintenance et l’évolution. + + + +