|
Trouver une ressource
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 !
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>
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
- 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
Sources en rapport avec celle ci
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
Récupérer une valeur d' Access via un codage Javascript [ par mareuh ]
Bonjour, je suis novice en progarmmation javascript, et j'ai besoin de dévélopper une application en javascript qui récupère des données dans une base
Quelqu'un d'assez fort en javascript sait il faire ??? [ par AUZUR ]
Bonjour tout le monde, voila je débute en javascript, et je dois développer une fonction pour mon entreprise, qui doit gérer les caractères spéciaux.
Comment manipuler un XML déjà en mémoire via une routine en javascript? [ par zazalamouche ]
Voici quelques info sur mon problème:J'ai un fichier XML qui contient des données et un fichier XSL qui contient le format d'affichageLe XML référence
probleme fonction javascript et validation w3c [ par anthonydb ]
Bonjour à tous voilà je vous expose mon probléme j'ai une fonction javascript qui me permet de mettre a jour des listes liées sans avoir a cliquer sur
Problème alignement [ par overstorex ]
Bonsoir,J'espère que je suis au bonne endroit pour poster cette demande d'aide.je suis un néophyte en script,je m'en excuse .<img src="http://www.java
Problème chargement image javascript [ par Travailleuuse06 ]
Bonjour,je suis devant un très gros problème que je n'arrive pas à résoudre. J'ai une page html où j'ai un <img src="image">Dans ma partie jav
Détecter est afficher les coordonées de la page du navigateur ??? [ par supergrey ]
Bon, déjà je précise qu'en javascript je suis un newbie. Je voudrais afficher dans la barre de titre du navigateur , la position de la fenetre du navi
texte initial dans un champ "input" [ par aztec78 ]
bonjour,voici mon problème :j'ai un petit programme en javascript qui transforme un texte d'un formulaire en zone de texte à modifier lorsque l'on cli
|
|