Aller au menu - Aller au contenu

Fiche d'œuvre

Retour au concours

Auteur

Œuvre

Téléchargement
Rendu le 31/07/2008 à 23:32:59

Titre : ZeroSudoku
Concours : Le Sudoku : des nombres en folie !

Description de l'auteur

ZeroSudoku


ZeroSudoku a été conçu avec simplicité et généralisation en vue. Ainsi, le programme peut gérer et résoudre des grilles de tailles arbitraires : 2x2, 9x9, 16x16, ... même 100x100 ! Bien sur, pour des raisons pratiques et de performance, la taille a été limitée à 25x25, mais rien ne vous empêche de modifier (facilement) cette limite si vous comptez étudier ou modifier le code :-°

J'ai crée un tout nouveau widget interactif capable d'afficher et de saisire les nombres dans une grille de n'importe quelle taille. Il est très flexible, réutilisable, et son apparence facilement modifiable.


25x25 en plein action !

Fonctionnalités



Voici les fonctionnalités qui sont déjà implémentées :
  • Affichage d'une grille dans une interface graphique
  • Sélection à la souris et saisie des nombres au clavier
  • Fonctions annuler/refaire
  • Résolution rapide de grilles (Algorithme X de Donald Knuth)
  • Grilles de tailles différentes : 4x4, 9x9, 16x16, 25x25
  • Vérification des grilles complétées
  • Ouverture/Enregistrement des fichiers
  • Création manuelle de grilles
  • Génération automatique de grilles

Ce qui reste à faire



Il me reste encore de nombreuses fonctionnalités que j'aimerais mettre en place :
  • Aide à l'utilisateur (affichage des nombres possibles pour une case, affichage des erreurs ...)
  • Plusieurs niveaux de difficultés.
  • Résolution des grilles dans des threads séparées (pour ne pas planter le programme si ça prends trop de temps :p )
  • Modification facile de l'interface graphique
  • Traduction du programme en Français (euh oui, il n'est actuellement disponible qu'en Anglais :euh: )


Format des fichiers de sauvegarde



J'ai décidé d'implémenter mon propre format de fichiers malgré les nombreux qui ont été proposés. En effet j'ai besoin d'un format léger et adapté aux fonctionnalités de mon programme (grilles de plusieurs tailles par exemple). Voici donc les spécifications du format ZeroSudoku ("*.zs", mais l'extension n'est pas du tout obligatoire) :
  • Le fichier ne contient que des nombres entiers (au moins au début dans la partie principale, après vous pouvez mettre ce que vous voulez ;) )
  • Tous les nombres doivent être séparés par au moins un espace et/ou un retour à la ligne. Seule exception : quand le nombre suivant est négatif, cette règle peut être omise. En bref, les nombres doivent pouvoir êtres discernés.
  • Le premier nombre désigne l'ordre N de la taille de la grille, N2xN2. Pour une grille classique de 9x9 par exemple, ce nombre doit être 3. Notez que ce nombre doit être strictement positif, sinon la grille sera considérée invalide.
  • Les nombres suivant correspondent aux nombres de la grille, lus dans l'ordre de gauche à droite, de haut en bas. Un nombre positif représente une donnée de la grille (un nombre déjà inscrit), un zéro une case vide, et un nombre négatif un nombre inscrit par le joueur (un -3 signifie que le joueur a inscrit 3 dans cette case).
  • Enfin, le nombre 1 doit nécessairement suivre la grille. Cette règle a été ajoutée pour pouvoir vérifier l'intégrité du fichier.

Ce format permet une grande flexibilité dans l'organisation visuelle du fichier. Par exemple, une même grille peut être représentée des deux façons suivantes :

Code : Autre
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
3

0 0 0  0 0 0  0 0 0
0 1 0  6 2 0  0 9 0
0 0 2  0 0 9  3 1 0

0 0 4  0 0 6  0 8 0
0 0 8  7 0 2  1 0 0
0 3 0  8 0 0  5 0 0

0 6 9  1 0 0  4 0 0
0 8 0  0 7 3  0 5 0
0 0 0  0 0 0  0 0 0

1

ou bien

Code : Autre
1
3 0 0 0 0 0 0 0 0 0 0 1 0 6 2 0 0 9 0 0 0 2 0 0 9 3 1 0 0 0 4 0 0 6 0 8 0 0 0 8 7 0 2 1 0 0 0 3 0 8 0 0 5 0 0 0 6 9 1 0 0 4 0 0 0 8 0 0 7 3 0 5 0 0 0 0 0 0 0 0 0 0 1

Impression du jury

Côté code



Rien à dire, du bon travail a été fait sur le code.
Entièrement écrit en anglais (et, pour une fois, dans un anglais correct), le code fait usage de certains concepts évolués du C++ et montre clairement une certaine maîtrise du langage.

Il faudra un peu de temps pour se repérer parmi tous les fichiers, mais l'architecture se veut logique et les classes communiquent entre elles correctement.

Côté indentation, c'est propre. C'est aéré.
Quand aux commentaires, ils sont utiles et intelligemment disposés. On apprécie. :)


Côté utilisateur



L'interface est propre, simple et sans chichis.

On peut remplir facilement la grille via un widget personnalisé.

On lance un nouveau sudoku pré-défini parmi une sélection de fichiers, ou bien on génère une grille. Dans ce dernier cas, on a le choix entre plusieurs types de grilles, de 2x2 à 5x5. Comme la génération peut être longue, l'auteur a eu la (très) bonne idée d'afficher une barre de progression et de laisser la possibilité d'annuler le processus. Bravo, c'est vraiment ce qu'il fallait faire dans ce cas.

On apprécie la possibilité d'annuler / répéter nos actions.

On peut faire valider la grille, malheureusement si la grille n'est pas complète le comportement est hasardeux : il ne détecte pas nos erreurs lorsque nous en avons fait.

La grille peut être résolue par le programme très rapidement.
On aurait apprécié la possibilité d'avoir des indices, mais l'option reste mystérieusement grisée, comme le menu préférences. Un manque de temps pour l'implémentation ?

Dans tous les cas, c'est un bon programme, une base très solide sur laquelle il faudrait continuer : ajouter la gestion des candidats, des préférences, des meilleurs scores, pourquoi pas laisser la possibilité d'imprimer le Sudoku, etc. :)

Détail des notes

Critère M@teo21 Moyenne
Total 34
Interface graphique 9 9
Vérification de la grille 5 5
Lisibilité du code 6 6
Aide à l'utilisateur 0 0
Lecture de la grille dans un fichier 4 4
Génération aléatoire de la grille 4 4
Résolution automatique de la grille 6 6