81 en ligne Comparateur | Sites | Forum | PhpBB | Actu | Glossaire | Codes | Tips | Liens | Livres | Lettre  

 Recherche

 Newsletter





 

sudoky - jeux du sudoku en javascript

Code JavaScript par master-killer



  <Accueil>  Déjà 696 codes ! 
AJAX [5]AS 2.0 [1]ASP [111]ASP.NET [34]CSharp [11]CSS [14]
D [1]Delphi [5]DHTML [3]Divers [5]HTML [16]JavaScript [154]
JSP [9]Maths [1]PHP [256]PHP5 [18]PowerShell [22]Regex [4]
SQL [2]V.Basic [4]VBScript [13]VS.NET [5]WPF [1]XML [1]



master-killerJavaScript - 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] : "&nbsp;";
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 ? "&nbsp;" : 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]:"&nbsp;";
}
}
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]
Commentaires
gerphil
gerphil
24/11/08

génial !! bravo master
master-killer
master-killer
25/11/08

merci c'est gentil ! :)

Pour participer, il faut d'abord vous identifier !
284 visiteurs ont déjà participé dont :
DB77 [47]fmarie [26]Fabrice69 [25]CedX [25]Didier [22]
tedheu [21]Bisou [20]mohman [17]jreaux62 [16]romuluslepunk [15]
foxmaster [15]Vonscott [12]iubito [10]Redo [9]Balin [8]
poppy [7]fmaunier [6]cyrillus [6]pseudomenace [6]david96 [6]
CrazyCat [5]antoun [5]Pozzy [5]TBliss [5]Aurelien [5]
daoudi [5]Ours [5]bahdot [5]houcem_tsp [4]Chrigou [4]
debackp [4]lex [4]hyoucef [4]Jips [4]zut69 [3]
salem [3]berguerand01 [3]phenixbd [3]twins20 [3]kandal [3]
mhaido [3]mcorgnet [3]philouonline [3]master-killer [3]Maclearner [3]
crocxx [3]laetyboop [3]Poucet [3]olivierland94 [3]

Didier Téléchargez gratuitement et légalement des logiciels Microsoft ! Si, si ;)
  • Visual Studio 2010
  • Office 2010
  • Expression Studio 3
  • SQL Server 2008
  • et d'autres...

Au fil des news  
Adobe - Adobe lance des applications Photoshop Express....
PHP - Détermination de l'intersection entre 2 segments
Magazines - Le N°132 de Programmez est disponible
Les alertes dans SharePoint 2007 - Comment SharePoint 2007 gère les User Alerts
Une des fonctionnalités de base de SharePoint, aussi bien dans Windows SharePoint Services (WSS) ...
Adobe - Photoshop.com Mobile pour Android 1.2
Adobe - Adobe dévoile une technologie de lecture.......
PHP - Experts PHP : participez au Forum PHP 2010 !
PHP - Fobec.com - Code source PHP & javascript
Foliotage alphabétique - Lister sur la première lettre d'un champ
Pour faire suite à l'article de JPierre sur la pagination alphabétique, voici, en ASP et en PHP, ...
Dreamweaver CS4 + Php + Mysql - Pagination alphabétique
Je vous propose la création d'une barre de navigation ou pagination alphabétique pour filtrer les ...
Adobe - HTML5 dans Dreamweaver CS5
VBScript - Déterminer si un chemin est absolu ou relatif
VBScript - Lire/écrire un fichier texte
Magazines - Le N°130 de Programmez est disponible
Hebergement - Hébergement à prix libre
Adobe - Adobe Creative Suite 5
PHP - Calcul de la date de Pâques
Magazines - Le N°128 de Programmez est disponible
Magazines - Le N°127 de Programmez est disponible
Dreamweaver CS4 + Php + Mysql - Trucs et Astuces - Part 6
Pour continuer dans le même style, je vous propose une suite au précédent article. Rechercher tous ...
Adobe - Adobe Photoshop.com Mobile pour iPhone 1.1
JavaScript - Ajouter une page dans vos favorites
Dreamweaver CS4 + Php + Mysql - Trucs et Astuces - Part 5 -
Je vous propose cette fois deux astuces. Comment exporter une feuille de style avec l'aide de ...
SharePoint Personalization Site Links - Les liens personnalisés des MySite SharePoint
Nous avons vu dans les articles précédents comment agrémenter les pages de recherche afin de ...
Magazines - Le n°126 de Programmez est disponible
Outils - Traducteur en ligne automatique pour site web
Adobe - Adobe Photoshop.com Mobile pour Iphone
Magazines - Le n°125 de Programmez est disponible
Adobe - Adobe AIR 2 et Flash Player 10.1version bêta
Les conférences autour des technologies Microsoft - Liste non exhaustive des grands évènements
Nous allons essayer de regrouper un grand nombre des évènements autour des technologies Microsoft ...
Magazines - Le n°124 de Programmez est disponible
PHP - Forum PHP 2009
Composants - eFace - XAML en Java
WPF - Désactiver le bouton de réduction d'une fenêtre
Magazines - Le n°123 de Programmez est disponible
Magazines - Le n°122 de Programmez est disponible
Auditer une ferme SharePoint - Assurer le bon fonctionnement de SharePoint
Dans le cadre de la bonne gestion de son environnement SharePoint, il est utile de faire un ...
SQL Server 2008 Report Builder 2.0 - Installation et utilisation de Report Builder 2.0
Dans le cadre de la création de rapports pour SQL Server Reporting Services 2008, un outil est ...
Magazines - Le HS N° 1 de Web Design est disponible
Outils - EntityBuilder
  Tutorial : HTML | Scripting | ASP-PHP | ASP.net | SQL Server | XML
Sharepoint | XAML | Pocket | Dreamweaver | VML | Divers
  Scripts : Scripting | ASP-PHP | ASP.net | Divers
  Boutique | Annuaire | Bannières | Météo | Tribune | Partenariats | Recherches
v4.3 © Didier YVER
2001-2010
 
 

Corpo Sciences de Reims Partitions gratuites Carte, météo, annonces
Groupes Utilisateurs Microsoft MVP ASP-magazine TechNet DotNet Project