AccueilAccueil  FAQFAQ  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  Connexion  
Le Deal du moment : -29%
PC portable – MEDION 15,6″ FHD Intel i7 ...
Voir le deal
499.99 €

 

 génération d'un labyrinthe

Aller en bas 
4 participants
AuteurMessage
marty
Utilisateur confirmé: Rang ***
marty


Messages : 697
Projet Actuel : laby-ereinte !

génération d'un labyrinthe Empty
MessageSujet: génération d'un labyrinthe   génération d'un labyrinthe EmptyMer 13 Mar 2013 - 19:31

salut à tous !

j'ai tenter de concevoir un générateur de labyrinthe.
en suivant les explication de wikipédia

http://fr.wikipedia.org/wiki/Mod%C3%A9lisation_math%C3%A9matique_d%27un_labyrinthe

ce qui parait simple de prime-abord s'avère un casse tête sans nom pour moi!
(on s'en doute !)

je suis pas tout seul visiblement:
http://ilay.org/yann/articles/maze/

mon résultat à base d'aléatoire, mais qui donne des labyrinthes insolubles quelques fois:

Spoiler:
(j'ai bossé quand même !!)
le gmk correspondant:

(bah personne va télécharger c'te d...)
http://host-a.net/u/marty/tablo.gmk

un test à base de tableaux :
http://host-a.net/u/marty/tablo.gmk

donc si onillink ou caly passe par là! gnii
(à vot'bon coeur messieur !)

requête:
je souhaiterais que vous expliquiez les deux modèles d'algo proposés par wiki, en gml svp!

mais également le fonctionnement de ses fichus tableaux car je n'ai pas réussi à faire un simple tableau en 2 dimensions qui range 1,2,3,4,5,6 comme ceci:
le tout comme si vous parliez à un enfant de 12 ans svp,
(même si j'en suis loin clinoeuil )

[code]for (i=0;i<=3;i+=1){
for (j=0;j<=2;j+=1){
tabv[i,j]=i*j

voiloù!

Revenir en haut Aller en bas
Falindir974
Bavard
Falindir974


Messages : 96
Localisation : erreur location inconnue
Projet Actuel : être en vacance

génération d'un labyrinthe Empty
MessageSujet: Re: génération d'un labyrinthe   génération d'un labyrinthe EmptyMer 13 Mar 2013 - 19:55

Pour le labirynthe aléatoire je vais essayer de voir si je peut te sortir un générateur fiable mais je te promet rien . J'avais deja essayer sur une ti82 (he oui il y en a qui s'ennuyent en math happy1 ). Mais la c'est diférent et a mon avis je pourrai te soritr quelque chose pour ce week end. Mais pour le tableau j'y est pas encore toucher donc désoler

_________________
Il y a 10 types de personnes sur terre : ceux qui comprennent le binaire et les autres
Revenir en haut Aller en bas
-Coco-
Utilisateur confirmé: Rang ***
-Coco-


Messages : 545
Localisation : Grenoble - Montpellier
Projet Actuel : Orion VII - 0%

génération d'un labyrinthe Empty
MessageSujet: Re: génération d'un labyrinthe   génération d'un labyrinthe EmptyMer 13 Mar 2013 - 21:18

En utilisant ce générateur, les labyrinthes n'ont pas de solution (généralement), ça génère en gros un "intérieur" de labyrinthe avec des murs tout autour. (normalement on part de la 2è case en haut à droite).
Le but si tu veux rajouter une entrée et une sortie, c'est de rajouter un trou à gauche, et un à droite, et ce en dehors de la génération du labyrinthe... (et tu élimines les cases 0 et n où n est la taille du laby, pour pas te retrouver avec des trous dans les coins=

_________________
Oh, snap.
Revenir en haut Aller en bas
marty
Utilisateur confirmé: Rang ***
marty


Messages : 697
Projet Actuel : laby-ereinte !

génération d'un labyrinthe Empty
MessageSujet: Re: génération d'un labyrinthe   génération d'un labyrinthe EmptyJeu 14 Mar 2013 - 9:46

l’intérêt c'est de pouvoir créer des pièces de labyrinthe "connectables" en ouvrant un mur n'importe où.

tout n'est pas perdu :
le code qui range les chiffres de 1 à 9 et plus dans l'ordre !

Code:
a=0
for (i=1;i<=4;i+=1){
for (j=1;j<=4;j+=1){
a+=1
tabv[j,i]=a}}

astuce: ne pas commencer par i,et j par zéro ,ajouter une variable a qui s'incrémente et inverser le i et le j dans l'écriture de la table! (c'est pas simple quand même!)
Revenir en haut Aller en bas
arthuro
Utilisateur confirmé: Rang ****
arthuro


Messages : 1483
Localisation : Paris
Projet Actuel : Diagon https://arthursonzogni.com/Diagon

génération d'un labyrinthe Empty
MessageSujet: Re: génération d'un labyrinthe   génération d'un labyrinthe EmptyVen 15 Mar 2013 - 23:05

Voila la premier algorithme


Soit
explorer[i,j] les cases exploré (boolean);
1<=i<=n
1<=j<=n

Soit
porte_horizontal[i,j] , indique si il y a un mur entre les cases [i,j] et [i+1,j]
1<=i<=n-1
1<=j<=m

Soit
porte_vertical[i,j] , indique si il y a un mur entre les cases [i,j] et [i,j+1]
1<=i<=n
1<=j<=m-1

soit
pile_x une pile ( pose une question si tu ne sait pas comment en faire avec GM)
pile_y une pile

Voila le programme

initialiser explore[i,j] à 0 pour toute i,j
initialiser porte_horizontal[i,j] = 1 pour toute i,j
initialiser porte_vertical[i,j]=1 pour toute i,j

soit
x=1 ( ou toute autre valeur entre 1 et n)
y=1 ( ou toute autre valeur entre 1 et m)

explorer[x,y]=1
empiler x dans pile_x
empiler y dans pile_y

tant que pile_x est non vide
faire

regarder parmis les 4 quatres directions autour de la case (x,y) si il y en a une menant à une case non exploré
si il en existe une
-------- en choisir une aléatoirement
-------- soit (xx,yy) la position de la case non exploré choisit
-------- ouvrir la porte adéquate ( qui sépare les cases (x,y) et (xx,yy)
-------- empiler xx dans pile_x
-------- empiler yy dans pile_y
sinon
-------- x=depiler pile_x
-------- y=depiler pile_y
fin de la boucle

-------------------------------------------

Pour avoir une pile, tu peut utiliser un tableau et un entier (qui te dit ou est la sommet de ta pile)
sinon il y a des piles en GML apparament :

ds_stack_create()
Crée une nouvelle pile. La fonction retourne un identifiant id de type entier qui sera à utiliser par toutes les autres fonctions pour manipuler la pile créée. Il vous est possible de créer plusieurs piles.
ds_stack_destroy(id) Détruit la pile d'ID id, libérant la mémoire utilisée par cette dernière. Ne pas oublier d'utiliser cette fonction lorsque vous en avez terminé avec l'utilisation de cette pile.

ds_stack_empty(id) Indique si la pile est actuellement vide. Cela revient à tester si sa taille équivaut à 0.
ds_stack_push(id, val) Stocke (push) la valeur donnée val au sommet de la pile d'ID id.
ds_stack_pop(id) Retourne la valeur du sommet de la pile (pop) puis supprime cette valeur de la pile.

C'est en gros les 5 fonctions que tu va utiliser

--------------------------------------------------------------

_________________
génération d'un labyrinthe Pochettegénération d'un labyrinthe Signature.php?gid=588
D'autres jeux :
In The Cube
In the cube 2
Revenir en haut Aller en bas
arthuro
Utilisateur confirmé: Rang ****
arthuro


Messages : 1483
Localisation : Paris
Projet Actuel : Diagon https://arthursonzogni.com/Diagon

génération d'un labyrinthe Empty
MessageSujet: Re: génération d'un labyrinthe   génération d'un labyrinthe EmptyVen 15 Mar 2013 - 23:07


_________________
génération d'un labyrinthe Pochettegénération d'un labyrinthe Signature.php?gid=588
D'autres jeux :
In The Cube
In the cube 2
Revenir en haut Aller en bas
Contenu sponsorisé





génération d'un labyrinthe Empty
MessageSujet: Re: génération d'un labyrinthe   génération d'un labyrinthe Empty

Revenir en haut Aller en bas
 
génération d'un labyrinthe
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Le Maître Du Labyrinthe
» Labyrinthe Escape
» [script] Générateur de labyrinthe parfait.
» (I.A) Trouver le chemin le plus court dans le labyrinthe
» Génération aléatoir de niveau

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Forum Le CBNA :: Développement :: Entraide débutants-
Sauter vers: