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

Documents pareils