Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

UNE PARTIE DE SUDOKU ? CHOISSISSEZ LA DIMENSION, LE NIVEAU DE DIFFICULTÉ ET LE TYPE DE GRILLE ! SOLUTION UNIQUE !


Information sur la source

Catégorie :Jeux Classé sous : sudoku, grille, jeu, carré magique, solution unique Niveau : Initié Date de création : 27/03/2008 Date de mise à jour : 10/06/2008 10:05:33 Vu / téléchargé: 6 537 / 292

Note :
6 / 10 - par 2 personnes
6,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (13)
Ajouter un commentaire et/ou une note


Description

Cliquez pour voir la capture en taille normale
Ce script génère des grilles de Sudoku (illimitées) et permet de jouer en ligne.

Toutes les grilles ont une solution unique.

Niveau de difficulté : facile / moyen et difficile
Grilles 4*4 / 6*6 / 8*8 / Sodoku 9*9 / 10*10 / 12*12 / 14*14 / 16*16 (Numéros et lettres)

Pour expliquer un peu le fonctionnement global de ce script :
Celui-ci calcul une grille pleine, supprime des valeurs dans la grille et vérifie à l'aide de méthodes de résolutions différentes si la grille est valide. Elle est valide si elle contient une seule solution !

Démo du script sur : http://www.sudoku.lioninformatique.com/
 

Conclusion

Options :
Type de grille(dimension + numérique ou alphabétique) /  Niveau de difficulté / Nouvelle grille / Abandonner avec affichage de la solution ou corriger le jeu.

Remarques :
Les algos de résolution utilisent des raisonnements humain (pas de tests par hypothèse, pas de tests aléatoires).  Toutes les valeurs sont déductibles... On peut ainsi déduire le niveau de difficulté de la grille plus facilement.

Les méthodes de résolutions utilisées pour le moment sont :
- valeurs interdites
- solitaire nu
- paires nues visibles
- paires nues cachées

Je voudrais ajouter triples nues visibles et cachés, X-Wing et Swordfish. X-Wing et Swordfish risquent d'être un peu lourd pour du php...

J'ai fait ce choix de raisonnement (résolution) pour que les grilles de sudoku soient agréables à résoudre. Je pense qu'une résolution par hypothèse serait trop compliqué et trop aléatoire. On pourra peut-être utiliser cette méthode pour le niveau démoniaque. Pour le diabolique les algos X-Wing et Swordfish devrait être suffisantes.


 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

04 avril 2008 11:15:07 :
- Correcteur en ligne avec affichage du nombre d'erreurs (le correcteur ne donne pas la solution pour le moment). - Refresh de la page si le calcul d'une grille est trop long
04 avril 2008 11:29:10 :
Une petite erreur de version
17 avril 2008 11:30:08 :
- Test si le navigateur peut executer le javascript. Dans le cas contraire un message d'erreur s'affiche. - Ajout d'une barre de progression pendant le chargement d'une grille pour faire patienter le visiteur.
17 avril 2008 11:35:33 :
- Barre de progression pendant le chargement d'une grille - Test si le navigateur peut executer le javascript. - Ajout d'un chrono
19 avril 2008 16:15:44 :
- Insertion d'un générateur de grilles pleines. - Nombre de grilles : illimité !
21 avril 2008 12:46:45 :
Petite correction de code
21 avril 2008 12:47:23 :
Petite correction de code
26 avril 2008 00:12:28 :
- Suppression barre de progression et test javascript. - Généralisation de la class sudoku à tous les types de grilles (dimensions).
26 avril 2008 00:35:41 :
- Header refresh avant timeout pour le calcul d'une grille pleine (pour la grille 16*16 essentiellement).
26 avril 2008 00:37:01 :
Le Zip n'était pas passé...
27 avril 2008 16:14:13 :
- Petite correction d'affichage
06 mai 2008 11:31:23 :
- Optimisation de certaines parties du code
07 mai 2008 15:57:29 :
- Pour les littéraires, il est désormais possible de jouer avec les lettres de l'alphabet plutôt que des numéros.
15 mai 2008 20:11:33 :
-> Valid XHTML 1.0 Transitional -> Fichier exemple.php pour integrer le sudoku sur son site -> Optimisation du code
22 mai 2008 15:53:41 :
> Niveau de difficulté -Facile --> Déduction par valeurs interdites -Moyen --> Déduction par valeurs interdites + déduction par valeurs possibles ("solitaire nu" visible ou caché) -Difficile -> Même méthodes que pour facile et moyen + déduction par Paires Nues (verticale et horizontale)
26 mai 2008 12:24:26 :
Optimisation des algos de résolution. Le script est beaucoup plus rapide.
26 mai 2008 12:26:32 :
Optimisation des algos de résolution. Script beaucoup plus rapide.
28 mai 2008 10:57:06 :
Correction bug. Les grilles n'étaient plus unique. Erreur dans la suppression des inconnus.
10 juin 2008 10:05:34 :
Ajout d'algos de résolution

Commentaires et avis

signaler à un administrateur
Commentaire de coucou747 le 28/03/2008 00:14:59

Code ci-dessous de coucou747
http://www.phpcs.com/codes/RESOLUTION-SUDOKU-METHODE-DEDUCTION_35308.aspx

:) faut le dire quand tu fais un truc du genre :) ca peut me donner envie d'upgrader mon code :)

j'aime bien ton code, mais pour creer une grille, a mon avis, tu devrais faire un algo genre :

:- pour chaque case, tu definis une liste de possibilites
:- pour chaque case, tu melanges l'ordre des possibilites
:- tu fixes une case a une valeur (la premiere dans la liste des possibilites)
:- tu fais les deductions qui conviennent
:- tu recommences jusqu'a trouver une incoherence ou terminer la fin de la grille
:- quand t'as une incoherence, tu ne prends plus la premiere mais la seconde possibilite

je ne sais pas si je suis clair, ca te fait une fonction recursive...

si j'ai le temps, je ferais ca en C ou en ocmal, ou les deux

merci pour cette source :)

signaler à un administrateur
Commentaire de neo2k2 le 28/03/2008 10:22:52 8/10

Juste 2 petites remarques sur cette source fort sympathique (8/10).

:- le niveau n'est pas moyen ou difficile mais facile... (45sec. pour la première grille)
:- tu pourrais ajouter un timer à partir de la première frappe dans une case pour calculer le temps de résolution (ou sous forme d'un bouton begin et d'aun autre end)

Beau travail en tout cas et je pense bien que ton but est de générer des grilles, pas de les résoudre. Cependant, en fusionnant avec Coucou747, vous avez de quoi faire un très bon programme.

signaler à un administrateur
Commentaire de spipod le 28/03/2008 12:42:54 4/10

Perso j'écris mes programmes à l'ancienne.

Je trouve que tu t'es pris la tête.

Voici comment j'ai généré une grille completement en aléatoire et plus rapidement que ton source:

$nbt=0;
WHILE ($nbt<4900)
    {
    $nbt++;
    FOR ($i=1;$i<=9;$i++)
FOR ($j=1;$j<=9;$j++)
            $x[$i][$j]=0;
    FOR ($i=1;$i<=9;$i++)
FOR ($j=1;$j<=9;$j++)
            {
            if ($j==9) $c=100; else $c=0;
    $o=0;
    WHILE ($o==0)
       {
               $o=1;
       $c++;
       srand();
               IF ($c<=100)
                   $x[$i][$j]=rand(1,9);
       ELSE
   IF ($c<110)
                  $x[$i][$j]=$c-100;
   ELSE
       {
       $i=50;
       $j=50;
       $o=1;
                       }

               IF ($c<110)
                   {
   fOR ($n=1;$n<=($j-1);$n++)
       IF ($x[$i][$j]==$x[$i][$n])
                             $o=0;
   fOR ($n=1;$n<=($i-1);$n++)
       iF ($x[$i][$j]==$x[$n][$j])
                             $o=0;
   IF ($o==1)
                       {
                       $y=intval(($i-1)/3)*3;
       $z=intval(($j-1)/3)*3;
       FOR ($n=1;$n<=3;$n++)
           FOR ($m=1;$m<=3;$m++)
       IF ($x[$i][$j]==$x[$n+$y][$m+$z] AND ($i<>($n+$y) AND $j<>($m+$z)))
                                   $o=0;
                       }
                    }
                }
            }
    IF ($i<20) $nbt=5000;
    }
if ($nbt==5000)
    echo "Grille générée";



Ce n'est pas optimisé, pas commenté, mais je pense que cela pourrais t'aider.

signaler à un administrateur
Commentaire de nlion le 28/03/2008 14:09:33

Bonjour,

Merci pour les commentaires. Je prend note de vos remarques.

Pour répondre à neo2k2, je n'ai pas écris que les grilles avaient un niveau difficile. ;)
Certaines sont très faciles à résoudre, d'autres un peu moins. L'algo de resolution des grilles de coucou747 est par déduction, or le niveau difficile utilise une méthode par supposition.
Il faudrait un autre algo de résolution pour pouvoir changer le niveau (la solution pour changer le niveau de difficulté est là).

coucou747, je crois comprendre ton raisonement, en tout cas si tu le développes,
je serais très interressé de jeter un petit coup d'oeil dessus.
Une mise en commun de nos idées peut être très constructive en effet.

spipod, il faudrait m'expliquer la note lol 2 :( ? Je suis ouvert aux critiques et je ne suis pas vexé mais je t'avoue ne pas trop comprendre ta remarque. Mon script ne calcule pas de grilles complètes. Les grilles complètes sont stoquées sur un fichier. Je n'ai pas mis volontairement l'algo qui calcule ces grilles
car le temps d'execution était beaucoup trop long au total. J'ai préféré faire tourner mon générateur de grille complète à part et créer un fichier texte bien fournis avec les grilles trouvées. Pourquoi utiliser des grilles complètes pour créer des grilles incomplètes ? Pour avoir plus de chance que la grille de sudoku soit valide et validé par le solveur.

Oui, je me suis pris la tête en effet, mais c'est aussi le but du jeu. Et, je me suis encore plus pris la tête pour avoir de jolies grilles symétriques. Le fichier contient 2255 grilles pleines. Sur chaque grille pleine on peut créer beaucoups de sudokus. Mon but n'était pas de créer des grilles pleines mais de créer des sudokus (à solution unique).
J'attend ta version de sudoku avec impatience ;)

Bonne continuation à tous !

signaler à un administrateur
Commentaire de spipod le 28/03/2008 14:30:24

Salut,

Ne tiens pas compte de ma remarque. J'ai testé ton code sur ton site.

Le code que je t'ai montré génère des grilles complètes, et le temps de génération est rapide. teste-le.
La grille est complète, dans mon programme final, je vide des cases avant d'afficher son contenu.

signaler à un administrateur
Commentaire de nlion le 28/03/2008 14:42:51

Mon programme initial fonctionnait de la même manière, mais je me suis rendu compte qu'il y avait très souvent plusieurs solutions possibles. Donc ce n'était pas un sudoku. Quand tu fais un sudoku, que tu mets du temps à le résoudre et que tu te rends compte qu'il y a plusieurs solutions t'es super déçu. Le programme actuel est déjà lourd, si j'ajoute en plus le générateur de grilles complète, ça va faire beaucoup trop en charge (déjà testé).

A suivre...

Pour la note t'as été vraiment dure lol En fait chui' un peu vex... :)

signaler à un administrateur
Commentaire de spipod le 28/03/2008 15:01:50

J'ai bien regardé ton source, et le html que tu génères en final.

Je suis désolé, mais il y a beaucoup trop de code pour si peu. Mais il ne faut pas m'en vouloir, je suis un ancien (+ de 20 ans de code en tout genre) et anciennement les lignes de codes étaient comptées. Je vois que tu n'as pas testé le générateur que je t'ai donné. Donne moi quand même ton avis S.T.P.

signaler à un administrateur
Commentaire de spipod le 03/04/2008 14:18:54

http://jeanmichel.richer.free.fr/wudoku.php

signaler à un administrateur
Commentaire de nlion le 03/04/2008 16:22:38

http://jeanmichel.richer.free.fr/wudoku.php (-> plusieurs solutions possibles, mais est-ce important ?)
Demandes aux passionés de sudo et ils te répondront que ce n'est pas un sudoku.

Pas eu le temps de regarder ton code... Mon code est un peu long, mais je crois pas qu'on puisse le raccourcir beaucoup. Ha ! si enlever le moteur de templates... Ca serait dommage c'est quand même pratique et pour l'évolution de l'appli c'est plus facile.
Ta remarque : "beaucoup trop de code pour si peu". Je ne suis pas d'accord.  

Envois ta source sur http://www.phpcs.com qu'on puisse voir son fonctionnement ;)

A+

signaler à un administrateur
Commentaire de nlion le 15/05/2008 20:19:22

J'ai testé mon appli sur mobile, Windows XP, Vista, et OSX sur les explorateurs Firefox 2.0, internet explorer 6 et 7, opera...  et ça marche plutôt bien (sauf sur mon mobile les grilles plus grande que 9*9 ne sont pas très visibles pour le contenu des cases). Si vous testez le script, ça serait super sympa de me dire si ça marche bien sur votre os et explorateur (et m'envoyer ces infos). Merci d'avance !

signaler à un administrateur
Commentaire de spipod le 16/05/2008 08:23:36

Salut,

Je vois une nette évolution, domage que ce ne soit pas la version publiée dès le début ma note aurait été plus haute (~8).

Tu as opté pour un générateur, j'ai toujours pensé que c'était la meilleure solution.

Bravo pour le travail d'amélioration.

signaler à un administrateur
Commentaire de nlion le 16/05/2008 10:33:41

Merci SPIPOD ! Content que mon appli te convienne d'avantage ;)

Maintenant il reste le plus dure à faire le niveau de difficulté !
Le niveau de difficulté est régi par le nombre de suppositions. Et il faut qu'il y est une unique solution.
Ce n'est plus de la deduction mais de la supposition et de la deduction... Je suis sur une piste.

Pas évident... A suivre...

signaler à un administrateur
Commentaire de nlion le 19/05/2008 09:34:10

Pour info, si vous installez PHPSUDO sur free, vous devez cr?er un r?pertoire "sessions" ? la racine de votre h?bergement pour que le script fonctionne correctement.  
Sinon, vous aurez des erreurs type Warning: session_start().

Je donne cette info car j'ai eu plusieurs emails me disant que mon script ne fonctionnait pas.

++

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Jeu de rôle (RPG) en PHP. [ par LocalStone ] Salut à tous. Je pense qu'un bon nombre d'entre vous connaisse le célèbrissime jeu Démange ... Ce jeu de rôle - ou RPG pour être plus précis - est bas Grille de nombres [ par Tomcube ] Salu,J'shui en train de faire un script de loto.A peine commencé, déjà un truc qui m'énerve : la grille de nombres. Je veux faire la même grille que s Ladder de jeu [ par Mystermax ] Bonjour a tous,Je debute dans le PHP mais j'aime tester et m'ameliorer dans ce domaine.Je suis leader d'une equipe de jeu en reseau (Day of Defeat) et projet info jeu bataille [ par doudou54 ] bjr à tous!je suis étudiante et j'ai un projet d'info à faire sur vb et je galère à mort!!!c'est le jeu de la bataillej'ai les cartes mais pas la prog Vérifier état d'un serveur de jeu [ par Nerdz ] Bonjour,Je voudrais savoir comment on peut vérifier l'état d'un serveur de jeu. Savoir s'il est online ou offline.Merci d'avance Recrute des codeurs pour un jeu php/mysql [ par kschn ] En fait j'ai pas trouvé de section pour poster ce sujet ...Bon ben voila tout est ds le titre je recherche 2 codeurs intéréssés pour faire un jeu en p PHP et jeu flash ( scores ) [ par snakeeater1 ] bon bas voila je pose ma question ici,Est-ce que quelqu'un pourrai maider ? :voila je fait un jeu flash, et j'ai une table sur ma base de donnée ou il jeu grattage/php/mysql [ par krowers ] voila j'ai un jeu de grattage qui quand j'y joue et que je gagne 0.01 point cela s'ajoute normalement a ma base de donnée tandis que quand je gagne 0 [projet] RPG [ par LocalStone ] Salut à tous ! J'avais déjà écrit un post de ce genre, il y a peut-être un an de cela, mais mes compétences de jadis en PHP laissant désiré, ça a foir


Nos sponsors

Sondage...

CalendriCode

Septembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
2930     

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,36 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.