Projet 2 : Jeu de Taquin en C
(Niveau intermédiaire)
3A FISE et FISA 2024-2025
Version Date Créé/modifié par Commentaires
1.0 22/09/2024 Radhia GADDOURI
Table des matières
1. Introduction ............................................................................................................. 2
2. Structure du Projet .................................................................................................. 2
3. Objectifs pédagogiques .......................................................................................... 2
4. Fonctionnalités requises et plan de réalisation .................................................... 3
5. Fonctionnalités Bonus suggérées.......................................................................... 5
6. Critères d'Évaluation ............................................................................................... 7
7. Livrables .................................................................................................................. 7
8. Remarques importantes ......................................................................................... 7
CAMPUS D’IVRY-SUR-SEINE - 74 bis avenue Maurice Thorez - 94200 Ivry-sur-Seine • +33 (0)1 43 90 21 21
ESIEA, 9 rue Vésale 75005 Paris – Association loi 1901 – N° W751037789 – SIRET 311 349 138 00017 – APE 8542Z
1. Introduction
Vous allez réaliser une version console du jeu de taquin (ou "15 puzzle") en utilisant
le langage C. L'objectif de ce projet est de renforcer vos compétences en
programmation C, en particulier la manipulation de tableaux, la gestion des entrées
utilisateur, et la manipulation de fichiers. Suivez attentivement les consignes ci-
dessous pour mener à bien ce projet.
2. Structure du Projet
• main.c : Contient la fonction principale et gère le flux du jeu.
• taquin.h : Contient les définitions des fonctions et les structures de données.
• taquin.c : Contient l'implémentation des fonctions utilisées dans le jeu.
• sauvegarde.txt : (optionnel) Utilisé pour sauvegarder et charger l'état du jeu.
3. Objectifs pédagogiques
1. Manipulation des Tableaux :
• Travailler avec des tableaux 2D pour gérer et afficher la grille de jeu.
2. Gestion des Entrées Utilisateur :
• Apprendre à traiter les mouvements du joueur et valider les actions via la
console.
3. Conception Modulaire :
• Organiser le code en plusieurs fichiers (main.c, taquin.h, taquin.c) pour une
meilleure lisibilité et gestion du projet.
4. Gestion des Fichiers :
• Sauvegarder et charger l'état du jeu avec des fichiers (lecture, écriture, gestion
des erreurs).
5. Algorithmique :
• Implémenter des algorithmes pour mélanger la grille, vérifier la victoire, et
garantir la solvabilité du puzzle.
6. Débogage et Optimisation :
2 | esiea.fr
ESIEA, 9 rue Vésale 75005 Paris – Association loi 1901 – N° W751037789 – SIRET 311 349 138 00017 – APE 8542Z
• Identifier et corriger les erreurs, optimiser les performances du programme.
7. Gestion du Temps et des Données (Bonus) :
• Intégrer un chronomètre et gérer l'historique des mouvements.
8. Travail Collaboratif :
• Apprendre à collaborer efficacement sur GitLab en utilisant des outils de
gestion de versions.
9. Interface Utilisateur :
• Concevoir une interface console intuitive et interactive.
4. Fonctionnalités requises et plan de réalisation
Étape 1 : Initialisation et Affichage de la Grille
1. Créer la grille de jeu :
o Déclarez un tableau 2D de taille 4x4 pour représenter la grille de jeu.
o Remplissez la grille avec des nombres de 1 à 15 et laissez une case vide
(représentée par 0 ou un espace).
2. Fonction d'affichage :
o Implémentez une fonction void afficherGrille(int grille[4][4]) qui affiche
la grille dans la console.
o La grille doit être formatée de manière claire, avec des séparations entre
les cases.
Étape 2 : Mélange de la Grille
1. Mélanger la grille de manière aléatoire :
o Implémentez une fonction void melangerGrille(int grille[4][4]) qui
mélange la grille de manière aléatoire tout en s'assurant que la grille est
dans une configuration solvable.
o Utilisez des mouvements valides pour mélanger la grille (par exemple,
simulez 100 mouvements aléatoires valides pour garantir une grille
solvable).
3 | esiea.fr
ESIEA, 9 rue Vésale 75005 Paris – Association loi 1901 – N° W751037789 – SIRET 311 349 138 00017 – APE 8542Z
Étape 3 : Gestion des Mouvements
1. Saisie des mouvements :
o Implémentez une fonction void deplacerCase(int grille[4][4], char
direction) qui prend en paramètre la grille et une direction ('H' pour haut,
'B' pour bas, 'G' pour gauche, 'D' pour droite).
o Vérifiez que le mouvement est valide (la case à déplacer doit être
adjacente à la case vide).
2. Mise à jour de la grille :
o Après chaque mouvement valide, mettez à jour la grille et affichez la
grille mise à jour.
Étape 4 : Détection de la Victoire
1. Vérifier l'état de la grille :
o Implémentez une fonction int verifierVictoire(int grille[4][4]) qui retourne
1 si la grille est dans l'ordre correct et 0 sinon.
o La condition de victoire est que les nombres soient en ordre croissant
de gauche à droite et de haut en bas, avec la case vide en bas à droite.
Étape 5 : Sauvegarde et Chargement de la Partie
1. Fonction de sauvegarde :
o Implémentez une fonction void sauvegarderPartie(int grille[4][4]) qui
sauvegarde l'état actuel de la grille dans un fichier sauvegarde.txt.
o Assurez-vous que le fichier est correctement ouvert et fermé après
l'opération.
2. Fonction de chargement :
o Implémentez une fonction void chargerPartie(int grille[4][4]) qui lit l'état
de la grille depuis le fichier sauvegarde.txt.
o Assurez-vous que le fichier existe avant de tenter de le lire.
Étape 6 : Boucle Principale du Jeu
1. Créez la boucle principale :
4 | esiea.fr
ESIEA, 9 rue Vésale 75005 Paris – Association loi 1901 – N° W751037789 – SIRET 311 349 138 00017 – APE 8542Z
o Dans main.c, implémentez une boucle qui affiche la grille, demande à
l'utilisateur un mouvement, applique le mouvement, et vérifie si le
puzzle est résolu.
o Si le puzzle est résolu, affichez un message de félicitations et terminez
le programme.
2. Ajouter un menu de commande :
o Ajoutez des options pour sauvegarder et charger la partie, quitter le jeu,
et redémarrer une nouvelle partie.
5. Fonctionnalités Bonus suggérées
1. Bonus de Difficulté Moyenne
a. Mode Chronomètre
• Description : Ajouter une fonctionnalité de chronomètre pour enregistrer le
temps total pris par le joueur pour résoudre le puzzle.
• Consignes :
o Utiliser la bibliothèque <time.h> pour gérer le chronomètre.
o Afficher le temps écoulé après chaque mouvement.
o Afficher le temps total pris pour résoudre le puzzle lorsque le joueur
gagne.
o Sauvegarder le temps dans le fichier de sauvegarde pour le reprendre
après une interruption.
b. Historique des Mouvements
• Description : Implémenter une fonctionnalité pour afficher l'historique des
mouvements du joueur.
• Consignes :
o Utiliser une structure de données (comme un tableau dynamique ou une
liste chaînée) pour stocker chaque mouvement effectué par le joueur.
o Ajouter une commande (par exemple, H) pour afficher l'historique des
mouvements dans la console.
5 | esiea.fr
ESIEA, 9 rue Vésale 75005 Paris – Association loi 1901 – N° W751037789 – SIRET 311 349 138 00017 – APE 8542Z
o Permettre au joueur de revenir en arrière d'un ou plusieurs mouvements
en utilisant une commande (par exemple, R pour revenir d'un
mouvement).
c. Détection de Puzzle Insolvable
• Description : Détecter si la grille générée est insoluble après le mélange.
• Consignes :
o Implémenter un algorithme pour vérifier si la configuration actuelle du
puzzle est solvable.
o Si le puzzle est insoluble, mélanger à nouveau jusqu'à obtenir une
configuration solvable.
o Expliquer dans les commentaires du code pourquoi certaines
configurations sont insolubles (parité des inversions, etc.).
2. Bonus de Difficulté Avancée
a. Interface Graphique avec Bibliothèque SDL
• Description : Créer une interface graphique pour le jeu de taquin en utilisant la
bibliothèque SDL (Simple DirectMedia Layer).
• Consignes :
o Installer la bibliothèque SDL et configurer l'environnement de
développement.
o Utiliser la SDL pour afficher la grille et les cases numérotées
graphiquement.
o Gérer les entrées utilisateur à partir des clics de souris ou des touches
de clavier pour déplacer les cases.
o Afficher des animations pour les mouvements des cases et ajouter des
effets sonores pour une meilleure expérience utilisateur.
b. Ajout de Niveaux de Difficulté
• Description : Permettre au joueur de choisir parmi plusieurs niveaux de
difficulté (grille 3x3, 4x4, 5x5, etc.).
• Consignes :
6 | esiea.fr
ESIEA, 9 rue Vésale 75005 Paris – Association loi 1901 – N° W751037789 – SIRET 311 349 138 00017 – APE 8542Z
o Modifier le code pour gérer des grilles de différentes tailles.
o Adapter l'affichage et les fonctions de vérification pour fonctionner
correctement avec différentes tailles de grilles.
o Ajouter un menu au début du jeu pour sélectionner la taille de la grille.
o Afficher le score (nombre de mouvements et temps) pour chaque taille
de grille à la fin du jeu.
6. Critères d'Évaluation
1. Fonctionnalité complète : Le jeu doit être entièrement fonctionnel, avec toutes
les fonctionnalités décrites ci-dessus.
2. Gestion des erreurs : Le programme doit gérer correctement les entrées
invalides et afficher des messages d'erreur appropriés.
3. Qualité du code : Le code doit être bien structuré, avec des commentaires
clairs et pertinents, et suivre les bonnes pratiques de programmation.
4. Interaction utilisateur : L'interface en ligne de commande doit être claire et
facile à utiliser.
5. Documentation : Le code doit être accompagné d'une documentation
adéquate, y compris des commentaires expliquant les fonctions et les blocs
de code.
7. Livrables
• Code source complet (main.c, taquin.h, taquin.c).
• Fichier README avec instructions de compilation et d'exécution.
• Rapport de projet détaillant l'implémentation, les défis rencontrés, les
solutions apportées et la gestion de projet.
• (Optionnel) Démonstration vidéo montrant le fonctionnement de jeu.
8. Remarques importantes
• Composition des groupes projet et travail collaboratif : Vous pouvez travailler
en binôme ou en groupe de 3 personnes maximum, à condition que tous les
membres de l'équipe appartiennent à la même classe TD (TD34, TD35, TD36,
7 | esiea.fr
ESIEA, 9 rue Vésale 75005 Paris – Association loi 1901 – N° W751037789 – SIRET 311 349 138 00017 – APE 8542Z
etc.). Assurez-vous bien de bien répartir les tâches et à collaborer de manière
efficace.
• Dépôt Livrable : Les livrables doivent être déposés exclusivement sur la
plateforme GitLab. Aucun dépôt ne sera accepté par mail, Teams ou tout autre
moyen de communication. Voici le lien, accessible à tous via votre compte 365
: Gitlab.esiea.fr
• Date limite pour le dépôt des livrables : Jeudi 19 décembre 2024 à 23h59.
• Date des soutenances du projet C : lundi 6 et mardi 7 janvier 2025.
8 | esiea.fr
ESIEA, 9 rue Vésale 75005 Paris – Association loi 1901 – N° W751037789 – SIRET 311 349 138 00017 – APE 8542Z