JavaScript - sudoky - jeux du sudoku en javascript
jeu du sudoku en javascript (V1.1) -5.080.320 grilles possibles, en 243 lignes de code !
-génération du tableau
-saisie des chiffres au clavier
-light, efficace, et simple a comprendre
-ok pour firefox
JavaScript Pour pouvoir le télécharger, connectez-vous ! ;)
<html> <head> <style> .tabloInterieur{width:20px;height:20px;font-family:Tahoma;font-size:12px;color:black;text-align:center;border:1px #c0c0c0 solid;cursor:pointer;} .tabloInterieur b{color:blue;cursor:pointer;} .tabloExterieur{border:2px #c0c0c0 solid;text-align:center;} td{font-family:Tahoma;font-size:12px;} a{font-family:Tahoma;font-size:12px;text-decoration:none;} </style> <script language="javascript"> /*14 grilles possibles + remplacement des chiffres de 1-9 par d'autres chiffres ca fait beaucoup de combinaisons !!!*/ var puzzles = new Array ( "123745698459681732678392145269584371513267948784913526937412856826375194451869237", "126895374437621985958473126457983612193246578862517394269548731314769852785231649", "142685973936217458857394612329451867174862593568973241298534716745621389136789425", "158469372362587914794312658637215984259648173841973526726841593435796821189235467", "269548731314769852785231649126895374437621985958473126457983612193246578862517394", "362175948845963217179248635713296854458731629962584713439527681576184392821396457", "386751942574928361291364875614837529793245186528619743478293165659817432132456987", "418957632297643581563812794286571394354928716179436285723845169865139472941627358", "452371986618429573379865241734629815162845397598713624293148567754236981186957432", "531428679628579143749163825986217345214835967537496281792854163381796452654312978", "753896412196274538482153679385624971421759683967318245248567139365912847791834526", "872351946139264758654987321269587134843612975175439268418725693526391487793846512", "921437568583629174674158392283746195765912438419835267674319852251847396983526741", "954126783836759124172834956295431678371568492648297315849567312215983647763421589");
var niveaux = /*nombre de chiffre qui vont apparaitre en fonction du niveau (affichage symétrique, donc faire *2)*/ { 0 : 41, /*affiche tout (pour debuger et tester...)*/ 1 : 17, /*faible*/ 2 : 15, /*moyen*/ 3 : 13, /*difficile*/ 4 : 11, /*diabolique*/ 5 : 9 /* impossible*/ };
var grille,masque,chiffres,choixCase= null,grilleUser= new Array(81);
/*retourne un chiffre entre min & max*/ function aleatoire(min,maxi) {return (parseInt(Math.random()*1000)%(maxi-min+1)+min);}
/*test si c'est un chiffre*/ function isChiffre(nbre) { return (nbre!=null&&nbre>0&&nbre<=9); } /*creer un tableau 3x3*/ /*grille= liste des chiffres, chiffres = chiffre de 1 à 9 ds le désordre, masque = code binaire des emplacement des chiffres, id = index du tableau, sub = tableau principale / sous tableau */ function creerGrille3x3(grille,chiffres,masque,id,sub) { var htm="<table cellspacing=0 >"; var x,y; for (y=0;y<3;y++) { htm+="<tr>"; for (x=0;x<3;x++) { index = y*3+x; if (sub) { htm+="<td class='tabloExterieur' >"; htm+=creerGrille3x3(grille,chiffres,masque,index,false); /*recursif pour afficher les sous tableaux*/ htm+="</td>"; } else {
/*changement du style au passage de la souris + selection de la case selectionnée*/ function choix(source,code) { if (code == 0) {source.style.background=(source == choixCase) ? '#c0ffc0':'yellow'} else if (code == 1){ source.style.background=(source == choixCase) ? '#c0ffc0':''; } else { if (choixCase!=null) {choixCase.style.background='';} choixCase=source; choix(source,0); } }
/*retourne un chiffre qui n'appartient pas à la liste envoyé en paramètre*/ function uniqueChiffre(list) { var nbr=aleatoire(1,9); for(var a=0;a<list.length;a++){ if(list[a]==nbr){ nbr=aleatoire(1,9); a=0; } } return nbr; }
/*retourne les chiffres de 1 à 9 dans le desordre*/ function chiffreDesordre() { liste=new Array("0"); for(j=0;j<9;j++){ nvx_chiffre=uniqueChiffre(liste); liste.push(nvx_chiffre); } return liste; }
/*retourne un masque correspondant au niveau de difficulté*/ function getMasque(nbmax) { var list = new Array(81); for (i=0;i<nbmax;i++) { x = aleatoire(0,40); while (list[x]==true) { x = aleatoire(0,40); } list[x]=true; } for (i = 0; i<40; i++) { if (list[39-i]==true) list[41+i] = true; } return list; }
/*génère la grille*/ function creerGrille(niveau,nvx) { if (nvx) { grilleUser= new Array(81); grille = puzzles[aleatoire(0,13)]; nbChiffre = niveaux[parseInt(niveau)]; masque = getMasque(nbChiffre); chiffres = chiffreDesordre(); choixCase=null; } html=creerGrille3x3(grille,chiffres,masque,0,true); document.getElementById("grille").innerHTML = html; }
/*remise a zéro de la grille*/ function initGrille(code,msg) { grilleUser= new Array(81); if (!msg||confirm("êtes-vous sûr de réinitialiser la grille ?")) {creerGrille(document.getElementById('level').value,code);} }
/*récupère le code du clavier*/ function toucher(e) { var key = window.event ? e.keyCode : e.which; supp = (key==32||key==46||key==96||key==8||key==48); /*supprime le chiffre (touches : espace,del,0 ou back)*/ key -=(key<96)?48:96;
if (key>=1&&key<=9||supp) { if (choixCase==null) {alert("vous devez selectionner une case pour taper un chiffre");} else { choixCase.innerHTML = supp ? " " : key; grilleUser[parseInt(choixCase.id.split("_")[1])]= supp ? "" : key; } } }
/*verifie la grille*/ function verif(code) { for (i=0;i<81;i++) { if (isChiffre(grilleUser[i])&&masque[i]!=true) if (code&&parseInt(chiffres[parseInt(grille.charAt(i))])!=grilleUser[i]) { document.getElementById("c_"+i).style.color="red"; } else { document.getElementById("c_"+i).style.color="black"; } } }