begin process at 2012 05 28 12:51:11
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Divers

 > CAVALIERS SUR UN ÉCHIQUIER

CAVALIERS SUR UN ÉCHIQUIER


 Information sur la source

 Description

Faire passer un cavalier sur toutes les cases d'un échiquier.
....................................... ......................

Source

  • <HTML><HEAD><TITLE>Chevaux</TITLE><STYLE type="text/css">input{position:absolute;top:45px;left:415px;}div{position:absolute;top:100px;left:400px;}td{width:20px;height:20px;font-family:Verdana,Arial,Helvetica;font-size:12px;text-align:center;color:white}</STYLE></HEAD><BODY bgcolor="silver" onLoad="q.focus()" onKeyPress="q.focus()" onMouseUp="q.focus()">
  • <input type="button" value="Autre échiquier" name="q" onClick="history.go(0)" />
  • <SCRIPT language="JavaScript"><!--
  • //n minimum à 5
  • var n=8,a,b,x,y,xx,yy,c=new Array(n*n);
  • function affiche()
  • {
  • with(document)
  • {
  • clear();
  • var i,j;
  • write("<div><table border='1px' width='"+20*n+"px' height='"+20*n+"px' cellpadding='0' cellspacing='0'>");
  • for(j=0;j<n;j++)
  • {
  • write("<tr>");
  • for(i=0;i<n;i++)
  • {
  • if((i+j)%2)write("<td bgcolor='black'>"+c[n*i+j]+"</td>");
  • else write("<td bgcolor='white'><font color='black'>"+c[n*i+j]+"</font></td>");
  • }
  • write("</tr>");
  • }
  • write("</table></div>");
  • }
  • }
  • function ok(i,j){return ((i>=0)&&(i<n)&&(j>=0)&&(j<n)&&(c[n*i+j]==0))?1:0;}
  • function essai(c,i,j)
  • {
  • if((b&c)!=0)
  • {
  • b-=c;
  • if(ok(i,j))
  • {
  • var k=ok(i+2,j-1)+ok(i+2,j+1)+ok(i-2,j-1)+ok(i-2,j+1)+ok(i+1,j-2)+ok(i+1,j+2)+ok(i-1,j-2)+ok(i-1,j+2);
  • if(k<a)
  • {
  • xx=i;
  • yy=j;
  • a=k;
  • }
  • }
  • }
  • }
  • function choix()
  • {
  • a=9;
  • b=255;
  • do
  • {
  • switch(Math.floor(8*Math.random()))
  • {
  • case 0:essai(1,x+2,y-1);break;
  • case 1:essai(2,x+2,y+1);break;
  • case 2:essai(4,x-2,y-1);break;
  • case 3:essai(8,x-2,y+1);break;
  • case 4:essai(16,x+1,y-2);break;
  • case 5:essai(32,x+1,y+2);break;
  • case 6:essai(64,x-1,y-2);break;
  • case 7:essai(128,x-1,y+2);break;
  • }
  • }
  • while(b);
  • return a<=8;
  • }
  • function cherche()
  • {
  • var z;
  • for(x=0;x<n;x++)for(y=0;y<n;y++)c[n*x+y]=0;
  • z=x=y=0;
  • xx=Math.floor(n*Math.random());
  • yy=Math.floor(n*Math.random());
  • do
  • {
  • x=xx;y=yy;
  • c[n*x+y]=++z;
  • }
  • while(choix());
  • return z<n*n;
  • }
  • function init()
  • {
  • while(cherche());
  • affiche();
  • }
  • init();
  • //--></SCRIPT></BODY></HTML>
<HTML><HEAD><TITLE>Chevaux</TITLE><STYLE type="text/css">input{position:absolute;top:45px;left:415px;}div{position:absolute;top:100px;left:400px;}td{width:20px;height:20px;font-family:Verdana,Arial,Helvetica;font-size:12px;text-align:center;color:white}</STYLE></HEAD><BODY bgcolor="silver" onLoad="q.focus()" onKeyPress="q.focus()" onMouseUp="q.focus()">
<input type="button" value="Autre échiquier" name="q" onClick="history.go(0)" />
<SCRIPT language="JavaScript"><!--
//n minimum à 5
var n=8,a,b,x,y,xx,yy,c=new Array(n*n);
function affiche()
{
 with(document)
 {
  clear();
  var i,j;
  write("<div><table border='1px' width='"+20*n+"px' height='"+20*n+"px' cellpadding='0' cellspacing='0'>");
  for(j=0;j<n;j++)
  {
   write("<tr>");
   for(i=0;i<n;i++)
   {
    if((i+j)%2)write("<td bgcolor='black'>"+c[n*i+j]+"</td>");
    else write("<td bgcolor='white'><font color='black'>"+c[n*i+j]+"</font></td>");
   }
   write("</tr>");
  }
  write("</table></div>");
 }
}
function ok(i,j){return ((i>=0)&&(i<n)&&(j>=0)&&(j<n)&&(c[n*i+j]==0))?1:0;}
function essai(c,i,j)
{
 if((b&c)!=0)
 {
  b-=c;
  if(ok(i,j))
  {
	var k=ok(i+2,j-1)+ok(i+2,j+1)+ok(i-2,j-1)+ok(i-2,j+1)+ok(i+1,j-2)+ok(i+1,j+2)+ok(i-1,j-2)+ok(i-1,j+2);
	if(k<a)
	{
	 xx=i;
	 yy=j;
	 a=k;
	}
  }
 }
}
function choix()
{
 a=9;
 b=255;
 do
 {
  switch(Math.floor(8*Math.random()))
  {      
	case 0:essai(1,x+2,y-1);break;
	case 1:essai(2,x+2,y+1);break;
	case 2:essai(4,x-2,y-1);break;
	case 3:essai(8,x-2,y+1);break;
	case 4:essai(16,x+1,y-2);break;
	case 5:essai(32,x+1,y+2);break;
	case 6:essai(64,x-1,y-2);break;
	case 7:essai(128,x-1,y+2);break;
  }
 }
 while(b);
 return a<=8;
}
function cherche()
{
 var z;
 for(x=0;x<n;x++)for(y=0;y<n;y++)c[n*x+y]=0;
 z=x=y=0;
 xx=Math.floor(n*Math.random());
 yy=Math.floor(n*Math.random());
 do
 {
  x=xx;y=yy;
  c[n*x+y]=++z;
 }
 while(choix());
 return z<n*n;
}
function init()
{
 while(cherche());
 affiche();
}
init();
//--></SCRIPT></BODY></HTML>



 Sources du même auteur

Source avec Zip CRÉATION DE SUDOKU EN JAVASCRIPT
Source avec Zip RÉSOLUTION D'ÉQUATIONS DU 4IÈME DEGRÉ
Source avec Zip JEU DE SOKOBAN
Source avec Zip CALENDRIER AVEC FÊTES LÉGALES FRANÇAISES
CARRÉS MAGIQUES

 Sources de la même categorie

Source avec Zip Source avec une capture SLIDESHOW IMAGES ET TEXTES EN PUR JAVASCRIPT par ansuzpeorth
Source avec Zip INPUT TEXT AUTOMATIQUE CREATION SUPPRESSION par lycanges
Source avec Zip Source avec une capture TABLE_SV : TABLEAU DYNAMIQUE, MONTRER/CACHER COLONNE SUR DEM... par synanceia
COLONNES ADAPTABLES EN HAUTEUR par dronoide
Source avec Zip VECTEURS ET MATRICES: OUTILS GRAPHIQUES UTILES par william voirol

 Sources en rapport avec celle ci

8 DAMES SUR UN ÉCHIQUIER par pabbati

Commentaires et avis

Commentaire de Arto_8000 le 03/10/2007 23:22:21

L'algorythme est intéressant, ça serait bien si tu avais de la documentation avec la source à nous faire partager. Sinon le seul détail que j'ai remarqué côté javascript, c'est que ce serait plus pratique si tu aurais utilisé un tableau à 2 dimensions au lien d'un tableau à 1 seule dimension pour la variable c.

Côté HTML, c'est pas super propre. Faut pas utiliser des tags avec des majuscules et des minuscules en même temps, c'est l'un ou l'autre. Idéalement c'est en minuscule pour rendre le tout plus lisible. La balise script doit contenir l'attribut type (recommendation w3c). Idéalement on essaie d'espacer le tout pour que ça soit plus lisible.

Commentaire de bultez le 04/10/2007 10:14:27

réellement pas mal.
pas simple à résoudre ça "à la main".
il existe des solutions fermées ( le 65ème
coup permettrait de revenir à la case de départ )
et ouvertes ( donc dans le cas contraire )
ce ne serait pas "plus mieux" si on voyait un
cavalier se déplacer au fur et à mesure ?
@+

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,326 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales