Présentation du projet

Dans le cadre d'un projet personnel, j'ai développé un jeu d'échecs complet en Java avec une interface graphique JavaFX. L'objectif était d'implémenter les règles du jeu d'échecs de façon rigoureuse tout en respectant une architecture logicielle propre.

Stack technique

Technologie Rôle
Java Langage principal
JavaFX Interface graphique
JUnit 4 Tests unitaires
Hamcrest Assertions pour les tests

Architecture MVC

Le projet suit strictement le pattern Modèle-Vue-Contrôleur, avec une séparation nette des responsabilités entre les trois packages.

modele/ - Contient toute la logique métier du jeu, sans aucune dépendance à JavaFX. La classe centrale est Board, qui gère le plateau 8x8, les tours de jeu, le calcul des coups légaux et la détection d'échec/échec et mat. Chaque pièce (Pawn, Rook, Knight, Bishop, Queen, King) hérite d'une classe abstraite Piece et implémente sa propre méthode isValidMove().

vue/ - La classe ChessBoardView étend GridPane (JavaFX) et s'occupe uniquement de l'affichage : rendu des cases, images des pièces, mise en évidence de la sélection, affichage des coups possibles (cercles), et popup de promotion de pion. Elle ne contient aucune logique de jeu.

controleur/ - ChessGameController fait le lien entre le modèle et la vue. Il gère les clics utilisateur, orchestre la sélection des pièces, déclenche les déplacements sur le modèle, et met à jour la vue en conséquence. Il gère aussi les cas particuliers comme la promotion ou l'affichage temporaire d'un bandeau d'échec au roi.

util/ - Contient les enums PieceType et PieceColor, ainsi que ImageLoader qui charge les images des pièces.

Diagramme de packages

Main
 ├── modele/
 │    ├── Board.java         → plateau, tours, échec/mat, coups légaux
 │    ├── Piece.java         → classe abstraite commune
 │    ├── Pawn / Rook / Knight / Bishop / Queen / King
 ├── vue/
 │    └── ChessBoardView.java → affichage JavaFX, événements UI
 ├── controleur/
 │    └── ChessGameController.java → logique des clics, liaison modèle↔vue
 └── util/
      ├── PieceType.java
      ├── PieceColor.java
      └── ImageLoader.java

Fonctionnalités implémentées