Implémentation complète d'un jeu d'échecs en C++ orienté objet, avec gestion des règles avancées, détection d'échec et mat, et interface en ligne de commande.
Accédez au dépôt GitHub du projet.
Dans le cadre du seconde semestre de ma première année à Télécom Physique Strasbourg, ce projet a consisté à concevoir et implémenter un jeu d'échecs complet en C++ orienté objet. L'objectif pédagogique principal était la maîtrise de la POO : héritage, polymorphisme, surcharge d'opérateurs, gestion dynamique de la mémoire et copie profonde.
Le projet a aboutit à une partie d'échecs jouable en terminal, avec affichage Unicode des pièces et respect de l'intégralité des règles officielles, y compris les cas les plus complexes.
L'architecture repose sur une classe abstraite Piece dont héritent les six types de pièces :
en_passant dans l'échiquier.La détection d'échec et mat repose sur la simulation de chaque coup possible. Pour cela, l'échiquier est
cloné via un operator= et une méthode clone() sur chaque pièce, garantissant une
copie complètement indépendante de l'état de jeu :
Classe abstraite + implémentation des 6 pièces avec leur logique de déplacement
Grille 8×8, gestion des déplacements, captures, roque, promotion, en passant
Boucle de jeu, alternance des tours, détection de fin de partie, commandes spéciales
Représentation d'une case (ligne, colonne) avec conversion notation algébrique (ex. e4)
Point d'entrée : initialisation et boucle principale
Compilation modulaire, cible de tests et de nettoyage
Ce projet m'a permis de maîtriser concrètement les piliers de la POO en C++ : la conception
d'une hiérarchie d'héritage cohérente, le polymorphisme via fonctions virtuelles pures,
la surcharge de operator= pour la copie profonde, et la gestion manuelle
de la mémoire avec new / delete.
La partie la plus exigeante a été l'implémentation de la détection d'échec et mat : simuler l'intégralité des coups légaux sur une copie de l'échiquier demande une architecture propre et une gestion mémoire irréprochable pour éviter toute fuite ou double libération.
La prise en passant et le roque ont également nécessité de maintenir un état de jeu
persistant (drapeaux hasMoved, case en_passant) au-delà
du simple état de la grille, ce qui a renforcé la réflexion sur la modélisation des données.