ELCa11 - Projet : Sudoku¶
Objectif¶
Développer en binôme, avec Qt et QML, une réplique fonctionnelle du jeu Sudoku.
Pour les modalités générales (livrables, critères d’évaluation, conseils), voir le readme du projet.

Règles du jeu¶
La grille de Sudoku est un carré de 9 × 9 cases, subdivisé en 9 blocs de 3 × 3 cases chacun. Une grille initiale est partiellement remplie avec des chiffres de 1 à 9. Le joueur doit compléter la grille en respectant trois contraintes :
- chaque ligne contient les chiffres
1à9(une seule fois chacun) ; - chaque colonne contient les chiffres
1à9(une seule fois chacun) ; - chaque bloc 3 × 3 contient les chiffres
1à9(une seule fois chacun).
Les chiffres de la grille initiale sont fixes : le joueur ne peut ni les modifier ni les supprimer. Il ne peut intervenir que sur les cases initialement vides.
La partie est gagnée quand toutes les cases sont remplies et que les trois contraintes ci-dessus sont respectées.
Fonctionnalités minimales attendues¶
- [ ] Affichage de la grille
9 × 9avec mise en évidence visuelle des 9 blocs (par ex. bordures plus épaisses). - [ ] Distinction visuelle (gras, couleur) entre les chiffres de la grille initiale (non modifiables) et les chiffres saisis par le joueur.
- [ ] Saisie d’un chiffre dans une case vide, modification d’un chiffre saisi, suppression d’un chiffre saisi — mais aucune action possible sur les chiffres initiaux.
- [ ] Vérification de la partie : la grille est complète et toutes les contraintes sont respectées (= partie gagnée).
- [ ] Détection des erreurs (par exemple, deux fois le même chiffre dans une ligne, une colonne ou un bloc).
- [ ] Chargement d’une grille initiale depuis un fichier (cf. format ci-dessous).
Précision : il n’est pas demandé de programmer une IA pour résoudre la grille ou pour en générer une de toutes pièces. Le programme doit seulement aider l’utilisateur à remplir la grille.
Format des grilles initiales¶
Les grilles initiales sont fournies sous forme de fichiers texte avec extension .csv. Quatre niveaux sont proposés :
Format :
- la première ligne est un commentaire (commence par
#), à ignorer ; - les 9 lignes suivantes représentent les 9 lignes de la grille, du haut vers le bas ;
- chaque ligne contient 9 cases séparées par le caractère
|(pipe) ; - chaque case contient soit un chiffre de 1 à 9, soit le caractère
.(point) pour une case vide.
Extrait :
# Grille extraite de https://qqwing.com/generate.html
.|9|.|.|.|4|.|.|.
.|.|.|.|.|.|.|.|8
.|.|.|.|.|.|.|3|6
.|7|6|.|3|.|.|4|.
9|.|3|.|.|7|.|.|2
2|.|8|9|.|.|.|.|5
.|8|7|4|.|.|.|.|.
.|.|.|.|.|8|.|2|.
.|2|.|.|.|.|7|.|9
Extensions possibles¶
Une fois les fonctionnalités minimales en place :
- Indication visuelle d’erreur : marquer en rouge tout chiffre saisi qui viole une contrainte (ligne, colonne ou bloc).
- Choix de la difficulté : menu permettant de changer de grille (débutant / facile / intermédiaire / expert) en cours d’utilisation.
- Sauvegarde / chargement d’une partie en cours, pour la reprendre plus tard.
- Compteur d’erreurs : nombre de fois où le joueur a placé un chiffre incorrect (avec une éventuelle limite avant défaite).
- Aide ponctuelle : sur demande du joueur, révéler aléatoirement un chiffre correct (avec un quota limité par partie).
- Chronomètre : afficher le temps écoulé depuis le début de la partie, et conserver le meilleur temps par niveau.