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 !

LABYRINTHE FACILE À UTILISER ET À MODIFIER


Information sur la source

Catégorie :Jeux Classé sous : labyrinthe, générateur, maze, jeux, javascript Niveau : Débutant Date de création : 29/03/2005 Date de mise à jour : 28/11/2005 00:59:01 Vu / téléchargé: 9 001 / 475

Note :
9,2 / 10 - par 5 personnes
9,20 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (19)
Ajouter un commentaire et/ou une note

Description

Cliquez pour voir la capture en taille normale
Comme le titre le dit c'est un labyrinthe dans lequel on peut se déplacer à l'aide des flèches situées sur le côté (2,4,6,8) ou pour les navigateurs qui ne supportent pas le event.keyCode il y a des boutons dans le bas du script pour se déplacer. Aussi j'ai intégré dans le zip un générateur de labyrinthe qui est aussi facile à utiliser.
 

Source

  • <HTML>
  • <HEAD>
  • <TITLE>..: Labyrinthe :..</TITLE>
  • <SCRIPT language="javascript">
  • positionFin = "19,24"
  • window.status = "Chargement de la page"
  • function départ()
  • {
  • window.status = "Création des murs"
  • créemur()
  • window.status = "Initiation de la case de départ"
  • document.getElementById("0,0").style.backgroundColor = "C80000"
  • document.getElementById("f0,0").color="C80000"
  • document.form.positionX.value = 0
  • document.form.positionY.value = 0
  • window.status = "Initiation de la case de la fin"
  • document.getElementById(positionFin).style.backgroundColor = "0AC814"
  • document.getElementById("f"+positionFin).color = "0AC814"
  • window.status = ""
  • }
  • function move(e)
  • {
  • y = document.form.positionY.value*1
  • x = document.form.positionX.value*1
  • if (e == 50 && check(y+1,x))
  • {
  • afficher(y+1,x)
  • }
  • if (e == 54 && check(y,x+1))
  • {
  • afficher(y,x+1)
  • }
  • if (e == 56 && check(y-1,x))
  • {
  • afficher(y-1,x)
  • }
  • if (e == 52 && check(y,x-1))
  • {
  • afficher(y,x-1)
  • }
  • }
  • function check(Y,X)
  • {
  • if (document.getElementById(Y+","+X)) return true
  • else return false
  • }
  • function afficher(Y,X)
  • {
  • effacer(document.form.positionY.value,document.form.positionX.value)
  • document.getElementById(Y+","+X).style.backgroundColor = "C80000"
  • document.getElementById("f"+Y+","+X).color="C80000"
  • document.form.positionX.value = X
  • document.form.positionY.value = Y
  • vérifier()
  • }
  • function effacer(Y,X)
  • {
  • document.getElementById(Y+","+X).style.backgroundColor = "FFFFFF"
  • document.getElementById("f"+Y+","+X).color = "FFFFFF"
  • }
  • function créemur()
  • {
  • position = new Array("1,1","2,2","0,1","2,1","4,0","4,2","5,2","4,3","2,3","2,4","6,2","6,1","8,1","8,2","8,3","8,4","7,4","6,4","2,6","3,6","4,6","5,6","6,6","7,6","4,5","6,7","8,5","8,6","0,3","0,4","0,5","0,6","0,7","0,8","1,8","2,8","3,8","4,8","6,9","7,9","8,9","8,8","9,8","4,9","4,10","4,11","5,11","6,11","6,0","9,3","10,3","10,4","10,5","10,6","11,6","11,7","11,8","11,9","11,10","10,10","10,11","9,11","8,11","10,0","10,1","11,1","12,1","12,3","12,4","13,4","13,5","14,1","14,2","14,3","14,4","15,2","16,0","16,1","16,2","13,7","13,8","13,9","13,10","13,11","13,12","12,12","14,7","15,7","15,6","16,6","16,5","16,4","18,1","18,2","18,3","18,4","18,5","18,6","19,4","4,13","5,13","6,13","7,13","8,13","9,13","10,13","19,8","18,8","17,8","17,9","16,9","15,9","17,10","18,10","18,11","18,12","18,13","17,13","16,13","16,12","15,12","15,11","13,13","14,14","13,14","10,14","11,14","1,10","2,10","2,11","2,12","2,13","3,13","0,12","0,14","0,15","1,15","11,15","11,16","12,16","13,16","15,16","16,16","16,15","17,15","18,15","19,15","19,17","18,17","18,18","17,18","16,18","15,18","14,18","13,18","12,18","11,18","10,18","9,18","9,17","9,16","8,16","8,15","7,15","6,15","5,15","5,14","2,15","3,15","3,16","3,17","4,17","5,17","6,17","6,18","7,18","3,19","4,19","4,20","5,20","6,20","7,20","8,20","9,20","10,20","11,20","12,20","10,21","10,22","11,22","12,22","13,22","14,22","14,21","14,20","15,20","16,20","17,20","18,20","17,21","17,22","18,22","19,22","15,22","1,17","1,18","1,19","1,20","1,21","1,23","0,23","2,21","2,22","2,23","3,22","5,22","5,23","5,24","7,21","7,22","7,23","9,22","10,24","12,23","14,24","16,24","15,22","18,23")
  • pos = position
  • for (i=0;i<position.length;i++)
  • {
  • pos[i] = pos[i].split(",")
  • if (check(pos[i][0],pos[i][1]))
  • {
  • document.getElementById(position[i]).style.backgroundColor = "000000"
  • document.getElementById("f"+position[i]).color = "000000"
  • document.getElementById(position[i]).id = ""
  • }
  • }
  • }
  • function vérifier()
  • {
  • if (document.form.positionY.value+","+document.form.positionX.value == positionFin)
  • {
  • alert("Vous avez gagné !")
  • }
  • }
  • </SCRIPT>
  • </HEAD>
  • <BODY onload="départ()" onkeypress="move(event.keyCode)">
  • <FORM name="form">
  • <INPUT type="hidden" name="hauteur">
  • <INPUT type="hidden" name="largeur">
  • <INPUT type="hidden" name="positionX">
  • <INPUT type="hidden" name="positionY">
  • </FORM>
  • <SCRIPT>
  • window.status = "Chargement du labyrinthe"
  • hauteur = 20
  • largeur = 25
  • backgcolor = "FFFFFF"
  • code ="<TABLE border='0'><TR>"
  • for (i=0;i<largeur+2;i++)
  • {
  • code+="<TD bgcolor='000000'></TD>"
  • }
  • code+="</TR>"
  • for (i=0;i<hauteur;i++)
  • {
  • code +="<TR><TD bgcolor='000000'></TD>"
  • for (x=0;x<largeur;x++)
  • {
  • code += "<TD id='"+i+","+x+"' bgcolor='"+backgcolor+"'><FONT color='"+backgcolor+"' id='f"+i+","+x+"'>---</FONT></TD>"
  • }
  • code+="<TD bgcolor='000000'></TD></TR>"
  • }
  • code+="<TR>"
  • for (i=0;i<largeur+2;i++)
  • {
  • code+="<TD bgcolor='000000'></TD>"
  • }
  • code+="</TR>"
  • code+="</TABLE>"
  • document.write(code)
  • document.form.hauteur.value = hauteur
  • document.form.largeur.value = largeur
  • </SCRIPT>
  • <FORM> <INPUT type="button" value="Haut" onclick="move(56)"><BR><INPUT type="button" value="Gauche" onclick="move(52)"><INPUT type="button" value="Droite" onclick="move(54)"><BR> <INPUT type="button" value="Bas" onclick="move(50)"></FORM>
  • Vous devez vous rendre à la case verte.
  • </BODY>
  • </HTML>
<HTML>
<HEAD>
<TITLE>..: Labyrinthe :..</TITLE>
<SCRIPT language="javascript">
positionFin = "19,24"
window.status = "Chargement de la page"
function départ()
{
window.status = "Création des murs"
créemur()
window.status = "Initiation de la case de départ"
document.getElementById("0,0").style.backgroundColor = "C80000"
document.getElementById("f0,0").color="C80000"
document.form.positionX.value = 0
document.form.positionY.value = 0
window.status = "Initiation de la case de la fin"
document.getElementById(positionFin).style.backgroundColor = "0AC814"
document.getElementById("f"+positionFin).color = "0AC814"
window.status = ""
}
function move(e)
{
y = document.form.positionY.value*1
x = document.form.positionX.value*1
if (e == 50 && check(y+1,x))
{
afficher(y+1,x)
}
if (e == 54 && check(y,x+1))
{
afficher(y,x+1)
}
if (e == 56 && check(y-1,x))
{
afficher(y-1,x)
}
if (e == 52 && check(y,x-1))
{
afficher(y,x-1)
}
}
function check(Y,X)
{
if (document.getElementById(Y+","+X)) return true
else return false
}
function afficher(Y,X)
{
effacer(document.form.positionY.value,document.form.positionX.value)
document.getElementById(Y+","+X).style.backgroundColor = "C80000"
document.getElementById("f"+Y+","+X).color="C80000"
document.form.positionX.value = X
document.form.positionY.value = Y
vérifier()
}
function effacer(Y,X)
{
document.getElementById(Y+","+X).style.backgroundColor = "FFFFFF"
document.getElementById("f"+Y+","+X).color = "FFFFFF"
}
function créemur()
{
position = new Array("1,1","2,2","0,1","2,1","4,0","4,2","5,2","4,3","2,3","2,4","6,2","6,1","8,1","8,2","8,3","8,4","7,4","6,4","2,6","3,6","4,6","5,6","6,6","7,6","4,5","6,7","8,5","8,6","0,3","0,4","0,5","0,6","0,7","0,8","1,8","2,8","3,8","4,8","6,9","7,9","8,9","8,8","9,8","4,9","4,10","4,11","5,11","6,11","6,0","9,3","10,3","10,4","10,5","10,6","11,6","11,7","11,8","11,9","11,10","10,10","10,11","9,11","8,11","10,0","10,1","11,1","12,1","12,3","12,4","13,4","13,5","14,1","14,2","14,3","14,4","15,2","16,0","16,1","16,2","13,7","13,8","13,9","13,10","13,11","13,12","12,12","14,7","15,7","15,6","16,6","16,5","16,4","18,1","18,2","18,3","18,4","18,5","18,6","19,4","4,13","5,13","6,13","7,13","8,13","9,13","10,13","19,8","18,8","17,8","17,9","16,9","15,9","17,10","18,10","18,11","18,12","18,13","17,13","16,13","16,12","15,12","15,11","13,13","14,14","13,14","10,14","11,14","1,10","2,10","2,11","2,12","2,13","3,13","0,12","0,14","0,15","1,15","11,15","11,16","12,16","13,16","15,16","16,16","16,15","17,15","18,15","19,15","19,17","18,17","18,18","17,18","16,18","15,18","14,18","13,18","12,18","11,18","10,18","9,18","9,17","9,16","8,16","8,15","7,15","6,15","5,15","5,14","2,15","3,15","3,16","3,17","4,17","5,17","6,17","6,18","7,18","3,19","4,19","4,20","5,20","6,20","7,20","8,20","9,20","10,20","11,20","12,20","10,21","10,22","11,22","12,22","13,22","14,22","14,21","14,20","15,20","16,20","17,20","18,20","17,21","17,22","18,22","19,22","15,22","1,17","1,18","1,19","1,20","1,21","1,23","0,23","2,21","2,22","2,23","3,22","5,22","5,23","5,24","7,21","7,22","7,23","9,22","10,24","12,23","14,24","16,24","15,22","18,23")
pos = position
for (i=0;i<position.length;i++)
{
pos[i] = pos[i].split(",")
if (check(pos[i][0],pos[i][1]))
{
document.getElementById(position[i]).style.backgroundColor = "000000"
document.getElementById("f"+position[i]).color = "000000"
document.getElementById(position[i]).id = ""
}
}
}
function vérifier()
{
if (document.form.positionY.value+","+document.form.positionX.value == positionFin)
{
alert("Vous avez gagné !")
}
}
</SCRIPT>
</HEAD>
<BODY onload="départ()" onkeypress="move(event.keyCode)">
<FORM name="form">
<INPUT type="hidden" name="hauteur">
<INPUT type="hidden" name="largeur">
<INPUT type="hidden" name="positionX">
<INPUT type="hidden" name="positionY">
</FORM>
<SCRIPT>
window.status = "Chargement du labyrinthe"
hauteur = 20
largeur = 25
backgcolor = "FFFFFF"
code ="<TABLE border='0'><TR>"
for (i=0;i<largeur+2;i++)
{
code+="<TD bgcolor='000000'></TD>"
}
code+="</TR>"
for (i=0;i<hauteur;i++)
{
code +="<TR><TD bgcolor='000000'></TD>"
for (x=0;x<largeur;x++)
{
code += "<TD id='"+i+","+x+"' bgcolor='"+backgcolor+"'><FONT color='"+backgcolor+"' id='f"+i+","+x+"'>---</FONT></TD>"
}
code+="<TD bgcolor='000000'></TD></TR>"
}
code+="<TR>"
for (i=0;i<largeur+2;i++)
{
code+="<TD bgcolor='000000'></TD>"
}
code+="</TR>"
code+="</TABLE>"
document.write(code)
document.form.hauteur.value = hauteur
document.form.largeur.value = largeur
</SCRIPT>
<FORM>           <INPUT type="button" value="Haut" onclick="move(56)"><BR><INPUT type="button" value="Gauche" onclick="move(52)"><INPUT type="button" value="Droite" onclick="move(54)"><BR>            <INPUT type="button" value="Bas" onclick="move(50)"></FORM>
Vous devez vous rendre à la case verte.
</BODY>
</HTML>

Conclusion

Voici le principe de mon script :
- Premièrment il crée un tableau vide avec les dimensions voulues.
- Deuxièment il crée les murs ( enlève le id des cases et les mets de couleur )
- Troisièment lorsque l'on se déplace si il ne trouve pas l'object vers lequel il se déplace il ne bouge pas, donc si on a enlevé le id où il y a des murs il ne peut pas se déplacer sur le mur.

Testé sur :
- Internet Explorer
- Modzilla
- Netscape
- Firefox
- Opéra

 

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

30 mars 2005 16:50:21 :
Petit problème de position dans le générateur.
30 mars 2005 19:09:09 :
Ajout d'un générateur aléatoire dans le zip.
31 mars 2005 02:48:19 :
Le générateur de labyrinthe aléatoire fonctionne mieux.
31 mars 2005 19:10:56 :
Le générateur aléatoire est enfin finaliser et presque parfait.
31 mars 2005 21:03:23 :
Petite correction
28 novembre 2005 00:59:01 :
Ajout de mot clé

Commentaires et avis

signaler à un administrateur
Commentaire de coucou747 le 29/03/2005 18:27:07

si tu faisait un labyrinthe aléatoire, ça serait plus interessant...

signaler à un administrateur
Commentaire de Arto_8000 le 29/03/2005 18:30:20

Mieux que ça tu peux le faire toi-même. C'est dans le zip.

signaler à un administrateur
Commentaire de Romain128 le 29/03/2005 19:05:04

Le generateur semble buger un peu...
Il n'affiche pas les murs!
Et des fois, il n'affiche pas la case d'arrivé!
J'attends les corrections pour noter.
Bonjour chez toi.

signaler à un administrateur
Commentaire de crashtest le 29/03/2005 20:29:02

Salut je l'aime bien il est bien fait je trouve.
Par contre je rajouterai bien que l'on puisse utiliser les touche du clavier pour jouer cela serais plus pratique voila c'est tt je le note pas encore car je n'est pas essayer le zip.
@++  et bonne continuation

signaler à un administrateur
Commentaire de Arto_8000 le 30/03/2005 00:23:33

--> Romain128 J'ai eu se genre de problème avec Netscape (pour le générateur seulement) pour le régler tu n'as qu'à enregistrer la source même si rien n'est afficher et aller enlever ligne de <TD> crée inutilement et après charge la page crée et sa va marcher.

--> crashtest On peut utiliser les touches du clavier c'est le 2 pour descendre, le 4 pour la gauche, le 6 pour la droite et le 8 pour monter. Seulement certains navigateursne le supporte pas.

signaler à un administrateur
Commentaire de dave12 le 30/03/2005 11:30:51

Très sympa !
Par contre je n'ai pas compris ce que tu veux dire par "enlever ligne de <TD>..."

J'ai moi aussi le même bug que Romain 128 avec le générateur, sous IE6. Les murs ne s'affichent pas et la case d'arrivée est absente...

Je suis allé dans la source de la page générée.

Je vois un script dans les balises HEAD où apparaissent les fonctions et un autre dans les BODY où apparaissent plusieurs balises TD...

Peux-tu donner plus de précisions sur la marche à suivre ?

Merci

signaler à un administrateur
Commentaire de Arto_8000 le 30/03/2005 16:47:57

Pour la ligne de <TD> c'est pour Netscape seulement. Le problème avec Netscape c'est que lorsque que l'on fait généré il execute le code qui fait un document.write et garde le script dans la sources, donc il y a deux fois la même chose.

Pour IE assurer vous que vous avez clairement entré les positions de départ en considérant que la première case est 0,0 et que l'axe horizontale est le premier chiffre et que l'axe verticale est le deuxième chiffre. Donc si je choisi la case 2,1 la case s'affichera sur la troisième ligne et à la deuxième colonne.

Si la case ne s'affiche pas c'est que vous avez mal entré la position ou quel se trouve sur un mur. Chez moi sa marche très bien.

signaler à un administrateur
Commentaire de Arto_8000 le 30/03/2005 16:58:09

Étant donné que j'ai reçu plusieurs demandes à savoir comment fonctionnait le générateur voici un mini tutorial :

- Premièrement entrez la taille de votre labyrinthe ( ex : 10 par 10)
- Cliquez sur généré le tableau
- Un tableau de 10 par 10 s'affiche.
- Cliquez sur chaque case que vous voulez qui sois un mur et si vous voulez l'enlever recliquez dessus.
- Troisièment entrez les positions de départ et de fin selon le principe que j'ai expliqué dans le message d'avant
- Ensuite cliquez sur généré le labyrinthe
- Vous devriez voir votre labyrinthe avec la case de départ et la case d'arriver affiché. Allez voir la source et enregistrez-là. ( Testé sur IE seulement ).

signaler à un administrateur
Commentaire de coucou747 le 30/03/2005 17:34:49

il te manque bcp de ;...

sous konqueror rien ne marche...

Sous Mozilla, ça marche parfaitement...

il manque plein de ; dans ton code !!!

tu as mis language = javascript au lieu de type="text/javascript"

je te parais de générateur de labyrinthe ALEATOIRE, j'avais vu qu'il y avait un générateur !!!

les laby aléatoires, c'est vraiment interessant, et tu peux faire en sorte que la case d'arrivée soit le plus loin possible de la case de départ... C'est pas si compliqué, mais ça risque de rame un peu...

signaler à un administrateur
Commentaire de Arto_8000 le 30/03/2005 18:27:01

- en javascript un retour de chariot équivaut à un point-virgule, alors pourquoi en rajouter.
- Pour konqueror indique moi l'erreur et je vais la corrigé si je peux.
- Le générateur c'est pour que tu le fasse toi même si tu veux en faire un à partir de mon script directement. Bref c'est pour économiser du temps. Je vais quand même essayer de le faire aléatoire pour plus tard.

signaler à un administrateur
Commentaire de dave12 le 30/03/2005 19:18:08

OK, ça marche !
C'est le tuto qu'il me manquait.

Merci

signaler à un administrateur
Commentaire de coucou747 le 30/03/2005 19:20:28

les points virgules sont sous entendus, mais quand parfois t'en mets et parfois t'en mets pas, c'est assez spé et pas rigoureu comme style de programmation...

j'ai fais un générateur de labyrinthe aléatoire si tu veux t'inspirer...

signaler à un administrateur
Commentaire de Arto_8000 le 30/03/2005 20:06:23

Pour le générateur je l'ai rajouté dans le zip. Il est aléatoire , mais pas toujours faisable, mais les cases situées à côté des points de départ et d'arriver ne peuvent être occupées par des murs.

signaler à un administrateur
Commentaire de coucou747 le 30/03/2005 22:15:24

t'as des algorythmes qui permettent de faire des labyrinthes vraiment faisables et parfaitement aléatoires...

sur ma source, t'as des liens ou ils expliqueront ça mieux que moi !

signaler à un administrateur
Commentaire de Arto_8000 le 30/03/2005 22:35:35

Non j'ai pas vraiment d'algoryithmes qui permettent de faire des labyrinthes faisables ,mais je vais voir.

signaler à un administrateur
Commentaire de Arto_8000 le 31/03/2005 02:54:10

coucou747 regarde dans le zip j'ai fait un update pour le générateur aléatoire.Il n'est pas parfait, mais c'est mieux qu'avant.

À propos j'ai vu ton lien c'est assez intéressant. Toute une théorie pour un labyrinthe.

signaler à un administrateur
Commentaire de coucou747 le 31/03/2005 18:11:03

théorie et pratique...
le programmeur file une source en ... C/Xlib... bon, pour ceux qui n'ont pas linux, vous ne pouvez pas utiliser ce système, mais c'est quand même super efficace...

j'ai refais son prog en js, mais avec seulement 10 * 10 cases...

signaler à un administrateur
Commentaire de Arto_8000 le 31/03/2005 19:13:16

J'ai enfin finaliser le générateur aléatoire selon une certaine théorie que coucou747 m'avait montré.

signaler à un administrateur
Commentaire de Vahirom le 10/05/2005 23:44:37

Excellent script !
Bravo !

Ajouter un commentaire

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 Générateur dynamique de formulaire Ajax [ par plefebv ] Bonjour ,C'est peut-être une FAQ tant le sujet me semble évident, mais j'ai dû passer à côté. Dans ce cas, merci de me faire savoir où trouver la doc Livre javascript pour débutant [ par PatMh ] Salut,Bon je ne vais pas être très original ...Je recherche un bon livre pour débutant afin d'apprendre rapidement javascript, svp.C'est en relation a javascript pour ie6 - impression [ par buckdany4 ] Bonjour à tous,Comment rendre l'impression impossible avec ie6 , donc mettre le choix impression invisible, inactif, ou autre.. <p class="MsoNorm Javascript et includes PHP [ par med76 ] Bonjour,J'aimerais savoir si on peut accéder à des éléments d'une page inclue en PHP (avec la fonction include()) avec du javascript.Je pose la questi Executer la fonction situer dans le onblur d'un input [ par Erick007 ] Bonjour,J'ai un petit problème que je ne sais pas si cela se fait. Je vous explique en premier ce que je veut faire, je me fais une fonction javascrip Problème d'encodage HTML et Javascript [ par demorex6 ] Salut à tous! Je suis en train de realiser une petite application multilingue en php-Javascript-Mysql. J'ai créé un fichier pour la langue française Dynamiser une page web via l'url par javascript ? [ par Thommen ] Bonjour à tous, Je cherche comme une folle, mais sans succès, à dynamiser une page web sans avoir à créer une base de donnée. Je m'explique: sur le Ordonner un table SQL avec Javascript [ par saltwater08 ] Bonjour, ma question est la suivante:    J'ai un affichage d'une table en sql dans un table je veux que lorsque je clique sur un des titres de la tabl probleme javascript [ par gaucyril ] Bonjour,J'ai un petit probleme :J'essaye de faire une verification d'extension de fichier avant upload mais cela ne fonctionne pas. Je vous transmets


Nos sponsors

Sondage...

CalendriCode

Novembre 2008
LMMJVSD
     12
3456789
10111213141516
17181920212223
24252627282930

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, 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
Temps d'éxécution de la page : 0,359 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS