sudoky - jeux du sudoku en javascript |
Code JavaScript par master-killer |
| |
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 {
if (masque[id*9+index] == true) /*test binaire sur le masque*/ { htm+="<td class='tabloInterieur' ><b>"+chiffres[parseInt(grille.charAt(id*9+index))]+"</b></td>"; grilleUser[id*9+index]=chiffres[parseInt(grille.charAt(id*9+index))]; } else { /*htm+= chiffres[parseInt(grille.charAt(id*9+index))];*/ htm+= "<td class=\"tabloInterieur\" id='c_"+(id*9+index)+"' onmouseover=\"choix(this,0);\" onmouseout=\"choix(this,1);\" onclick=\"choix(this,2);\">"; /*if (isChiffre(grilleUser[id*9+index]))*/ htm+=isChiffre(grilleUser[id*9+index]) ? grilleUser[id*9+index] : " "; htm+="</td>"; } } } htm+="</tr>\n"; } htm+="</table>"; return htm; }
/*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"; } } }
/*Affiche les réponses de la grille*/ function reponse(code) { for (i=0;i<81;i++) { if (masque[i]!=true) if (code&&!isChiffre(grilleUser[i])) { document.getElementById("c_"+i).innerHTML=chiffres[parseInt(grille.charAt(i))]; } else { document.getElementById("c_"+i).innerHTML=isChiffre(grilleUser[i])?grilleUser[i]:" "; } } verif(code); } </script> </head> <body onkeydown="toucher(event);" onload="initGrille(true,false);"> <br><center> <b>SuDoKy V1.1 par MaSTeR-KiLLeR (A. Selim)</b><br><br> <table> <tr><td><div id="grille"></div></td><td align="center"> <a href="#" onclick="javascript:initGrille(true,true);" style="color:green;"><b>nouvelle grille</b></a><br><br> <a href="#" onclick="javascript:initGrille(false,true);" style="color:red;"><b>recommencer</b></a><br><br> <b>niveau</b> <select id='level' onchange="initGrille(true,true);" > <!--<option value='0'>Debug</option>--> <option value='1'>Faible</option> <option value='2' selected >Moyen</option> <option value='3'>Difficile</option> <option value='4'>Diabolique</option> <option value='5'>Impossible</option></select><br><br> <a href="#" onmouseover="javascript:verif(true);" onmouseout="javascript:verif(false);" style="color:blue;"><b>verifier</b></a><br><br><br> <a href="#" onmouseover="javascript:reponse(true);" onmouseout="javascript:reponse(false);" style="color:blue;"><b>reponse</b></a><br> </td></tr></table> </center> </body> </html> |
Proposé par master-killer le 29/10/2008 [vu 6151 fois]
 gerphil 24/11/08 | génial !! bravo master |  master-killer 25/11/08 | merci c'est gentil !  |
|
Pour participer, il faut d'abord vous identifier !
| | 284 visiteurs ont déjà participé dont : | |
|
|