Accueil > > > SUDOKY - SUDOKU EN JAVASCRIPT
SUDOKY - SUDOKU EN JAVASCRIPT
Information sur la source
Description
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
Source
- <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 AmRouNiX (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>
<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 AmRouNiX (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>
Historique
- 29 juillet 2008 15:30:11 :
- ajout du zip
- 18 septembre 2008 08:04:58 :
- -correction pour la saisie des chiffres sur PC portable (utilisation des chiffres en haut du clavier)
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Jeux dhtml javascript [ par Cyreb ]
Voila, je regarde depuis longtemps les sources proposé sur ce site et je m'interesse aux jeux en javascripts, pourquoi ne pas créer de veritable proje
placer une image à la place d'une fenêtre d'Alerte - Comment modifier mon code javascript svp? [ par RomantikA ]
Bonjour, veuillez m'excuser pour cette question peut être stupide et/ou imprécise, mais je désirerais savoir s'il est possible de modifier un code jav
Du dinamique avec du JavaScript [ par minimoysmini ]
Salut, Voila je connais pas mal de truc en informatique. Je c'est programmer en C#,HTML,JavaScript et CSS. Puis j'ai eu envie de créer un jeux sur i
Du dynamique avec du javascript [ par minimoysmini ]
Salut, Voila je connais pas mal de truc en informatique. Je c'est programmer en C#,HTML,JavaScript et CSS. Puis j'ai eu envie de créer un jeux su
La fonction "Saut" dans un jeux 2D [ par DrSlump75 ]
Bonjours à tous ! Depuis quelques semaines je me suis lancé avec quelques camarades dans un petit jeu de plateforme 2D en Javascript sur navigateur. L
one page javascript application ? [ par alxidali ]
Bonjour a tous . j'ai une petite question j’espère que quelqu'un pourra m'aider ! 1 - comment faire une très grande application JavaScript (pro
Cherche à changer un id quand l'url se modifie!!! [ par ayolos ]
Bonjour à toutes et à tous, voilà, j'utilise un CMS (expression engine 2.2.2), il génère mes page en php et authorise le javascript, le problème est
Envoyer variable Javascript vers une autre page (par URL) [ par midoxe ]
Bonjour, je travail sur une application web, et je me bloque sur ce problème : le clique sur un lien provoque l'ouverture d'une fenetre javascript q
Calcul de taux de marge en javascript [ par sbataille ]
Bonjour, Je suis commerciale et je dois régulièrement définir un prix de vente d'une formation en fonction du prix "d'achat" de l'intervenant et de l
javascript [ par wikilili ]
bonjour svpp je veux savoir si il est possible de programmer mon propre interface pour par exemple boite de dialogue et associer a elle une methode j
|
Derniers Blogs
SLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPSSLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPS par Vko
Retrouvez les slides et les démo de ma session Fast & Furious XAML Apps. A ceux qui se posent la question : "est-ce que le code de la DataGrid est disponible?", je vous répondrais "pas encore". Je vais mettre en place un projet codeplex pour part...
Cliquez pour lire la suite de l'article par Vko XNA IS DEAD!XNA IS DEAD! par richardc
Depuis la semaine dernière (et grâce aux TechDays 2012), je me penche activement sur la nouvelle version de Windows, aka Windows 8. Vous me direz, il était temps puisque la première preview date de Septembre dernier.
OK. Remarquez, on n'en est qu'aux...
Cliquez pour lire la suite de l'article par richardc TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 !TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 ! par ROMELARD Fabrice
Speakers: Fabrice Meillon et Stanislas Quastana Cette session est basée entièrement sur celle donnée lors de la BUILD cet hiver. Il n'y a pas d'ajout d'information en rapport avec cet évènement passé. Windows 8 Server sera intégralem...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [HTML5] AUTOUR DU W3C : NOUVEAUX STANDARDS ET WEB MOBILE (LILLE)[HTML5] AUTOUR DU W3C : NOUVEAUX STANDARDS ET WEB MOBILE (LILLE) par Gio
Je m'y prends un peu tard je sais, mais bon je suis développeur web et donc hyper fainéant ! Toujours dans le cadre des technologies émergentes, ici HTML5, parce qu'on aime HTML5 chez Wyg , nous seront présent, le vieux ( Aurélien V.) et moi, pour pr...
Cliquez pour lire la suite de l'article par Gio
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|