Number Memory

Présentation du projet

Explication du projet

Ce projet a pour objectif de développer un petit jeu de mémorisation de nombres en Java. L'utilisateur dispose de 5 secondes pour mémoriser une suite de chiffres qui s'affiche brièvement à l'écran. Il doit ensuite réécrire correctement la suite dans un champ de saisie.
À chaque réussite, la longueur de la suite augmente de 1.

Objectifs

  • Utiliser l’IHM de Java (Swing) pour développer une application interactive.
  • Structurer une logique de jeu simple.
  • Appliquer des bonnes pratiques de développement en Java.
  • Apprendre à gérer des timers et des événements utilisateurs

Outils utilisés

  • Java
  • Swing - Pour l'IHM
  • IntelliJ IDEA Community Edition - IDE

Le jeu

Le jeu affiche une séquence de chiffres générée aléatoirement, que l’utilisateur doit mémoriser. Il dispose d’un chronomètre de 5 secondes pour la lire, après quoi elle disparaît. Il doit alors la ressaisir dans un champ prévu à cet effet. S’il réussit, le niveau augmente et la séquence s’allonge. Sinon, le jeu affiche un message de défaite. Le jeu se répète indéfiniment jusqu’à une erreur.

Cette vidéo montre une démonstration du jeu Number Memory en action. Vous pouvez voir comment le nombre s'affiche, le chrono défile, et comment l'utilisateur doit saisir la suite de chiffres avant la fin du temps imparti.

Architecture et conception

Capture écran version 1

Schéma UML du Number Memory.

Le projet complet suit un schéma MVP, et repose sur trois classes principales : NumberMemoryModel, NumberMemoryView, et Controleur.

Fonctionnement

  1. Le niveau commence à 1.
  2. Un nombre aléatoire est généré selon le niveau (ex. : niveau 3 → 3 chiffres).
  3. Ce nombre est affiché pendant 5 secondes avec un chrono.
  4. Il est ensuite masqué, et l’utilisateur doit le retaper.
  5. Si la réponse est correcte → niveau suivant.
  6. Si la réponse est incorrecte → le jeu affiche "Perdu !" et s’arrête.
Début du jeu

Affichage initial du nombre à mémoriser avec le chronomètre

Phase de saisie

Phase de saisie du nombre par l'utilisateur

Résultat

Passage au niveau suivant

Qualité du code et bonnes pratiques

  • Utilisation du modèle MVP (Modèle–Vue–Présentateur) pour structurer le projet
  • Code modulaire et facilement maintenable : chaque classe a une responsabilité précise
  • Noms de classes, variables et méthodes clairs et explicites
  • Interaction Swing bien isolée dans la vue
  • Pas de duplication de code inutile, logique centralisée
Exemple de code

Code de la classe NumberMemoryModel

Tests et améliorations

Tests

  • Affichage correct des chiffres selon le niveau
  • Fonctionnement du chronomètre testé manuellement
  • Vérification des saisies utilisateur
  • Gestion correcte des cas de victoire et de défaite

Améliorations possibles

  • Amélioration de l’interface graphique pour plus de clarté et d'esthétique
  • Remplacer Thread.sleep par un Swing Timer pour éviter les blocages de l’interface
  • Ajouter un système de scores ou de sauvegarde
  • Ajouter des sons ou animations

Bilan personnel

Ce projet m’a permis de comprendre concrètement l’organisation d’un programme Java avec interface graphique, et d’explorer le modèle MVP. J’ai appris à structurer mon code de manière modulaire, à gérer des entrées utilisateurs, et à utiliser les composants Swing pour créer une interface simple mais fonctionnelle.

Points forts : structure claire, logique simple, projet abouti.
Difficultés : gestion des timers bloquants, design de l’IHM limité par Swing.
Axes d’amélioration : UI plus moderne, gestion non-bloquante du temps, meilleure modularisation.