Files
TD3_DEV51_brigitte_aissi/readme.md
2025-10-12 15:36:24 +02:00

3.4 KiB
Raw Blame History

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 dentré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<Character>) 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<Character>) Vérifie si le mot est deviné 3 (for + if + continue)
InputHandler.getLetter(Scanner, Set<Character>) 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 dune lettre saisie 9 (if/else multiples + for)
HangedGameGUI.updateWordDisplay() Met à jour laffichage 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 dentré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 dune simplification. La séparation logique (game logic, affichage, gestion du timer) est bien faite, ce qui facilite la maintenance et lévolution.