|
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
Perte d'accent après un form.submit en javascript. [ par guitoulefoux ]
<link rel="Fi
Centrer background en JavaScript [ par forget2212 ]
Bonsoir, J'ai un site web qui fonctionne en CSS et je veux introduire du JS pour le bas de la page (copyright) sur toutes mes pages. Mon fichier c
Javascript qui suit le défilement d'une fenêtre [ par moratonga ]
Bonjour,je suis l'animatrice d'un forum de collectionneurs qui va bientôt fêter ses 4 ans.Pour l'événement, j'aimerais intégrer un javascript qui anim
|
Téléchargements
Logiciels à télécharger sur le même thème :
Comparez les prix Nouvelle version
|