Le sudoku que je viens de télécharger sur cette page à l'air super sympa!!!
Je vous le recommande, chers internautes.
<select id="niveau" name="type" onchange="AjoutOptionAuSelect(this);"> <option value="20">Facile (20 cases vides)</option> <option value="30" selected>Normal (30 cases vides)</option> <option value="40">Expert (40 cases vides)</option> <option value="autre">Personnalisé</option> </select> <a href="javascript:generateSudoku(); return false;">Générer</a> <div id="erreur" style="display: none"></div> <div id="resultat"> <h2>Base</h2> <div id="grille_a_faire"></div> <h2>Solution</h2> <div id="grille_solution"></div> </div>
<script type="text/javascript"> function generateSudoku () { // Á compléter }; function AjoutOptionAuSelect(this_select) { if (this_select.value == "autre") { var saisie; var pass = false; do { if (pass) alert("La valeur est incorrecte. Elle ne doit comporter que des chiffres."); saisie = prompt("Nombre de cases vides :"); if (saisie == null) return false; pass = true; } while (saisie.match(/[^0-9]/i) && saisie != "") this_select.options[this_select.length] = new Option(saisie + ' case' + (saisie > 1 ? 's' : '') + ' vide' + (saisie > 1 ? 's' : ''), saisie, true, true); for (var i=0; i < this_select.options.length; i++) { if (this_select.options[i].value == saisie) { this_select.options[i].selected = true; } } } }; </script>
var nb_case_vide = document.getElementById("niveau").value; var nb_max_loop = 1000;
var grille = new Array(); var lignes = new Array(); var colonnes = new Array(); var carres = new Array(); var i_while = 0; var grille_complete = false;
outerwhile: // Point de référence while ((i_while < nb_max_loop) && !grille_complete) // Boucle tant que la grille n'est pas complète et que l'on n'a pas dépassé le maximum de boucle { i_while++; // On ajoute 1 à la boucle // ... };
continue outerwhile;
for (var i = 1; i <= 9; i++) { grille[i] = new Array(); // On crée chaque ligne de la grille lignes[i] = new Array(); // On crée un array pour les lignes colonnes[i] = new Array(); // On crée un array pour les colonnes for (var j = 1; j <= 9; j++) { grille[i][j] = 0; // On passe toutes les cases à 0 lignes[i][j] = j; // On complète toutes les possibilités de la ligne colonnes[i][j] = j; // On complète toutes les possibilités de la colonne }; }; for (var i = 1; i <= 3; i++) { carres[i] = new Array(); // On crée les trois lignes de carrés for (var j = 1; j <= 3; j++) { carres[i][j] = new Array(); // On crée les trois colonnes de carrés dans chaque ligne de carré for (var k = 1; k <= 9; k++) { carres[i][j][k] = k; // Et on complète toutes les possibilités du carré }; }; };
for (var y = 1; y <= 9; y++) { for (var x = 1; x <= 9; x++) { // ... }; };
var possibilites = new Array(); var index = 0; for (var k = 1; k <= 9; k++) { if (!lignes[y][k]) continue; if (!colonnes[x][k]) continue; if (!carres[Math.ceil(y/3)][Math.ceil(x/3)][k]) continue; possibilites[index] = k; index++; };
if (possibilites.length == 0) continue outerwhile; var nb = possibilites[Math.floor((Math.random() * possibilites.length))]; grille[y][x] = nb; lignes[y][nb] = undefined; colonnes[x][nb] = undefined; carres[Math.ceil(y/3)][Math.ceil(x/3)][nb] = undefined;
grille_complete = true;
if (grille_complete) { // Á faire } else { var today = new Date; document.getElementById("resultat").style.display = 'none'; document.getElementById("erreur").style.display = 'block'; document.getElementById("erreur").innerHTML = today.getHours() + ":" + today.getMinutes() + ":" + today.getSeconds() + " : Echec après " + nb_max_loop + " tentatives."; }
//+ Jonas Raoni Soares Silva //@ http://jsfromhell.com/array/shuffle [rev. #1] function shuffle(array) { for(var j, x, i = array.length; i; j = parseInt(Math.random() * i), x = array[--i], array[i] = array[j], array[j] = x); return array; };
var cases_a_vider = new Array(); for (var i = 1; i <= 81; i++) { if (i <= nb_case_vide) cases_a_vider[i] = true; else cases_a_vider[i] = false; } cases_a_vider = shuffle(cases_a_vider);
var html = "<table cellpadding='0'><tbody>"; var html_enonce = "<table cellpadding='0'><tbody>"; var count = 0; for (var y = 1; y <= 9; y++) { html += "<tr>"; html_enonce += "<tr>"; for (var x = 1; x <= 9; x++) { count++; html += "<td>" + ((cases_a_vider[count]) ? '<span class="red">' + grille[y][x] + '</span>' : grille[y][x]) + "</td>"; html_enonce += "<td" + ((cases_a_vider[count]) ? ' class="vide"> ' : '>' + grille[y][x]) + "</td>"; }; html += "</tr>"; html_enonce += "</tr>"; }; html += "</tbody></table>"; html_enonce += "</tbody></table>"; document.getElementById("grille_a_faire").innerHTML = html_enonce; document.getElementById("grille_solution").innerHTML = html; document.getElementById("resultat").style.display = 'block'; document.getElementById("erreur").style.display = 'none';
Tags :
Article écrit il y a 8 mois - 1406 vues
http://www.dewep.net/Blog/Article-11/Creer-un-generateur-de-grilles-de-Sudoku-en-JavaScript
Le sudoku que je viens de télécharger sur cette page à l'air super sympa!!!
Je vous le recommande, chers internautes.
Gravatar vous permet de créer un compte basé sur votre adresse E-Mail, pour ensuite y ajouter un avatar. Lorsque vous postez un commentaire sur un blog supportant ce service, il vous suffit alors de renseigner votre E-Mail pour que votre avatar soit automatiquement ajouté. D'autres informations (votre nom, votre site, ...) peuvent aussi être récupérées sur votre profil Gravatar.
Sur ce blog, votre nom, votre avatar et votre site sont récupérés. Le champ "pseudo/nom" n'est d'aucune utilité si votre adresse E-Mail est associé à un compte Gravatar.
L'ensemble des articles est soumis à la licence CC BY-NC-SA 3.0 (Code Juridique).
Vous êtes donc libre de remixer et partager l'oeuvre aux conditions de l'attribuer (lien vers la page de l'article), de ne pas l'utiliser à des fins commerciales et de la partager avec une licence identique ou similaire.
Retrouvez-moi sur les principaux réseaux sociaux ! Si vous souhaitez être tenu informé de la publication de mes prochains articles, abonnez-vous au flux RSS, ou suivez-moi sur Twitter/Facebook.