Projet : un jeu de Sudoku
Transcription
Projet : un jeu de Sudoku
Département IMA / 3A (S5) Programmation Structurée 2013/2014 Projet : un jeu de Sudoku Objectifs Ce projet de programmation structurée, a pour objectif de réaliser en binôme, un premier logiciel avec les notions acquises au S5 (et uniquement celles-ci). Dans ce projet, vous mettrez en oeuvre les notions vues en cours de Programmation Structurée (conception, algorithmique, développement, critiques et documentation). Ce projet est à rendre à votre responsable de TP pour le VENDREDI 10 JANVIER 2014, 18h (attention, délai de rigueur, pénalités de 5 points pour les retardataires pour chaque tranche de 24h de retard, une tranche entamée étant comptée comme complète), par email (similaire à celle utilisée pour le controle TP), dans une archive comportant votre code, un makefile utilisable sur vos machines de TP, et un rapport au format PDF (5 pages maximum, clair et précis donnant notamment explicitement les limitations de votre solution). IMPORTANT : nous disposons, tout comme vous, d’internet et des diverses sources d’informations disponibles. Nous disposons également d’une expérience et d’outils qui font que le plus souvent nous retrouvons facilement vos sources d’inspirations. Nous répétons ici l’importance d’un travail autonome et honnête. Import, maquillage, reprise (simplifiée ou pas), travail communautaires, ou tout autre variation sur le même thème ne font pas partie de ce qui est demandé ici, et seront donc notés suivant des critères tout à faire spécifiques et bien plus durs que ceux utilisés normalement. Descriptif global du sujet Le Sudoku (http ://fr.wikipedia.org/wiki/Sudoku ) est un jeu de grille, ou le joueur doit remplir une grille de 81 cases, composée de 3x3 sous-grilles, chaque sous-grilles étant elle-même de 3 cases sur 3. Chaque case contient un chiffre entre 1 et 9. Au départ, le joueur se voit présenté une grille partiellement remplie, et doit étapes par étapes trouver comment remplir les cases pour que la grille soit parfaite. Une grille est dite parfaite si : — chaque ligne de la grille contient tous les chiffres de 1 à 9 ; — chaque colonne de la grille contient tous les chiffres de 1 à 9 ; — chaque sous-grille de la grille contient tous les chiffres de 1 à 9 ; On va ici procéder en quatre phases : 1. Mettre en place la fonctionnalité de création de la matrice parfaite que le joueur va essayer de trouver (dans le cadre de ce projet, on se limitera à une matrice définie "en dur" dans votre code) ; 2. Mettre la place la fonctionnalité de création de la matrice à trou que le joueur va remplir au fur-et-à-mesure du jeu, à partir de la matrice parfaite crée précédement ; 3. Mettre en place la fonctionnalité d’affichage de la matrice courante ; 1 4. Mettre en place le programme principal de jeu ; 5. Bonus : proposer une seconde version de la toute première fonctionnalité (définir une grille parfaite), à faire uniquement si le reste est complet et fonctionne. On se limitera ici aux fonctionnalités décrites ci-dessus ; seules celles-ci sont suffisantes pour obtenir la note maximale à ce projet (sans avoir besoin du bonus pour cela), si le codage fonctionne, que le code est clair et bien commenté, et que le rapport est également de bonne qualité. On ne cherchera notamment pas à mettre en place de fonctions d’Undo, ou de résolution automatique de grille. 1 Créer une grille parfaite Mettre en place une procédure visant à créer une matrice de 9x9 cases, stockant la matrice "solution", que le joueur va essayer de trouver. On pourra ici utiliser la matrice parfaite suivante : 1 7 4 3 9 6 2 5 8 2 2 8 5 1 7 4 3 6 9 3 9 6 2 8 5 1 4 7 4 1 7 6 3 9 5 8 2 5 2 8 4 1 7 6 9 3 6 3 9 5 2 8 4 7 1 7 4 1 9 6 3 8 2 5 8 5 2 7 4 1 9 3 6 9 6 3 8 5 2 7 1 4 Créer la grille de jeu à partir de la grille parfaite La grille de référence servira de base pour créer une grille à trou, qui est celle qui sera montrée à l’utilisateur et remplie au fur et à mesure des tours. Cette fonctionnalité sera paramétrée par un entier compris entre 1 et 3, suivant le niveau de difficulté désiré de la grille (une grille est d’autant plus difficile que le nombre de trous initial est important). Pour une même grille parfaite et le même niveau de difficulté, deux appels à cette fonctionnalité pourront fournir deux grilles de jeu différentes. 3 Afficher la grille de jeu courante Mettre en place une fonction prenant en argument la grille de jeu courante et l’affichant d’une manière compréhensible par l’utilisateur. 4 Permettre au joueur de jouer Mettre en place le programme principal permettant au joueur de jouer. 5 Bonus : Seconde version de la génération de la grille parfaite Cette fonction sera mise en place uniquement si le reste est complet et fonctionne correctement. On proposera, à partir de la matrice donnée à la question 1, une fonction proposant d’autres matrices, par exemple en remarquant que les entiers donnés peuvent être considérés comme des indices dans un vecteur, stockant une permutation aléatoire des entiers de 1 à 9. 2