AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  Connexion  

Partagez | 
 

 [script] Générateur de labyrinthe parfait.

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
-Coco-
Utilisateur confirmé: Rang ***
avatar

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

MessageSujet: [script] Générateur de labyrinthe parfait.   Mar 12 Oct 2010 - 17:45

Salut à tous, au péril de ma patience j'ai créé un script qui génère automatiquement (et aléatoirement) un labyrinthe parfait!

Voilà le scrpit :

Code:

//script genererlaby(casesx, casesy)
//par -Coco-

depx = argument0
depy = argument1



for (a=0;a<depx+3;a+=1)
{
for (b=0; b<depy+3; b+=1)
{
cases[a,b]=4
}
}

for (a=0;a<depx+3;a+=1)
{
cases[a,0]=3
cases[a,depy+1]=3
}

for (a=0;a<depy+3;a+=1)
{
cases[0,a]=3
cases[depx+1,a]=3
}

for (a=0;a<depx*2+3;a+=1)
{
for (b=0; b<depy*2+3; b+=1)
{
instance_create(a*16,b*16,mur)
}
}

for (a=0;a<depx;a+=1)
{
for (b=0; b<depy; b+=1)
{
position_destroy((a+1)*32,(b+1)*32)
}
}

i=1
j=1

cases[i,j]=3


while 1
{
plas=true
while plas
{

plas = true

if cases[i-1,j]!=4 and cases[i+1,j]!=4 and cases[i,j+1]!=4 and cases[i,j-1]!=4
{
plas=false
}

if plas = true
{
o=i
p=j

repet=true

while repet
{
i=o
j=p
r=floor(random(4))

i+=(r=0)
i-=(r=2)
j+=(r=1)
j-=(r=3)

if cases[i,j]=4
repet=false
}
cases[i,j]=3
position_destroy(((i*32+o*32)/2),((j*32+p*32)/2))
}
}

continuer = false

for (a=1;a<depx+1;a+=1)
{
for (b=1;b<depy+1;b+=1)
{
if cases[a,b] = 4
continuer = true
}
}
if continuer = false
exit

continuer = true

while continuer = true
{
b=floor(random(depx-1))+1
c=floor(random(depy-1))+1
if cases[b,c]=3
{
if cases[b+1,c]=4 or cases[b-1,c]=4 or cases[b,c+1]=4 or cases[b,c-1]=4
{
i=b
j=c
continuer = false
}
}
}

}


NOTE : Ce script ne marche que si votre objet est nommé "mur" et qu'il mesure 16*16 pixels.
Si vous savez coder, vous pouvez toujours changer ces paramètres dans le code.


Il m'a pris un certain temps mais il marche très bien.

On peut changer la taille de cases en x et en y du labyrinthe.

Je me suis dit que ça pourrait quand même être utile à certains, qui seraient peut être trop flemmards pour dessiner un labyrinthe dans la room ou pour coder un générateur.
L'avantage de ce script c'estqu'il peut être appelé n'importe quand (mais c'est mieux dans un create ou un code de room).

Pour ceux qui voudraient savoir à quoi ça ressemble avant d'avoir testé, voici ce que ça donne pour genererlaby(10,10)

Spoiler:
 


Attention : il peut arriver que ce script bugge, je n'ai aucune idée pourquoi, mais bon ça arrive à peu près une fois sur 10

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

Messages : 1698
Localisation : Entre l'Espagne, l'Italie, la Suisse, L'allemagne et le RU :P
Projet Actuel : Jeu de survie avancé
||--------

MessageSujet: Re: [script] Générateur de labyrinthe parfait.   Mar 12 Oct 2010 - 19:32

ah ouais bien
Revenir en haut Aller en bas
http://gameblog49.skyblog.com/
sachem
­Capitaine Star


Messages : 15495
Projet Actuel :


MessageSujet: Re: [script] Générateur de labyrinthe parfait.   Mar 12 Oct 2010 - 19:43

il suffit d'ajouter un 3ème argument pour utiliser l'objet de ton choix

_________________
Revenir en haut Aller en bas
http://host-a.net/u/shm31/
-Coco-
Utilisateur confirmé: Rang ***
avatar

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

MessageSujet: Re: [script] Générateur de labyrinthe parfait.   Mar 12 Oct 2010 - 19:55

Certes mais bon, c'est surtout au niveau des position-destroy et des instance_create que ça va poser problème. après la licence est libre vous pouvez faire ce que vous voulez avec ^^

_________________
Oh, snap.
Revenir en haut Aller en bas
Dan_lizhot
Modérateur
avatar

Messages : 3463
Projet Actuel : Crypt Of Darkness

MessageSujet: Re: [script] Générateur de labyrinthe parfait.   Mar 26 Oct 2010 - 20:51

c'est pas mal super
Revenir en haut Aller en bas
Mr_Twister
Très bonne participation
avatar

Messages : 144
Localisation : (null)
Projet Actuel : Aucun.

MessageSujet: Re: [script] Générateur de labyrinthe parfait.   Dim 31 Oct 2010 - 12:28

Hey mais sa pourrais vraiment servir pour faire un Pokémon Donjon Mystere rire

_________________
Sup bro. guns
Revenir en haut Aller en bas
marty
Utilisateur confirmé: Rang ***
avatar

Messages : 697
Projet Actuel : laby-ereinte !

MessageSujet: Re: [script] Générateur de labyrinthe parfait.   Mar 8 Mai 2012 - 10:17

salut qui peut m'expliquer la logique de se script svp?
Revenir en haut Aller en bas
-Coco-
Utilisateur confirmé: Rang ***
avatar

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

MessageSujet: Re: [script] Générateur de labyrinthe parfait.   Mar 8 Mai 2012 - 20:10

Même moi j'en serais incapable à l'heure actuelle.
En gros j'ai pris un algorithme de génération de labyrinthe, j'ai utilisé la maîtrise du noob que j'étais à l'époque, c'est à dire présence d'objets avec place_meeting au lieu d'un tableau, j'ai fait 3 tests et j'ai vu que ça marchait.
La logique, difficile à dire, en réalité l'algo procède comme ceci :
-Une grille remplie
-On trace un trait continu jusqu'à ce que ça se bloque
-on reprend une case au hasard
-on recommence jusqu'à ce que tout soit troué.

Après je ne sais plus comment j'ai fait ça et j'ai la flemme de relire mon script.

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

Messages : 697
Projet Actuel : laby-ereinte !

MessageSujet: Re: [script] Générateur de labyrinthe parfait.   Mer 9 Mai 2012 - 17:30

merci clinoeuil
Revenir en haut Aller en bas
xxzerga
Débutant


Messages : 10

MessageSujet: MERCI !   Mer 10 Oct 2012 - 12:48

J'ai essayé de programmer un générateur de labyrinthe pendant 3 mois, et à chaque fois ça buggait ( tout les murs ne se détruisaient pas)
Là j'en ai un, je vais pouvoir continuer mon jeu !
MERCI BEAUCOUP !!!!!!! Very Happy Smile Very Happy Smile
I love you I love you I love you
santa

EDIT: Oh, dommage, il bugge ...
quand je le lance, il me met : game.exe a cessé de fonctionner

Si quelqu’un pouvait m'aider, je lui serait vraiment reconnaissant !
Revenir en haut Aller en bas
Térence
Utilisateur confirmé: Rang *****
avatar

Messages : 2213
Localisation : Oui

MessageSujet: Re: [script] Générateur de labyrinthe parfait.   Mer 10 Oct 2012 - 15:36

Il est dit dans le premier post qu'il bugue une fois sur 10, t'as essayé plusieurs fois ?
Revenir en haut Aller en bas
xxzerga
Débutant


Messages : 10

MessageSujet: Re: [script] Générateur de labyrinthe parfait.   Mer 10 Oct 2012 - 16:24

Oui, une dizaine de fois ... triste2
Revenir en haut Aller en bas
Térence
Utilisateur confirmé: Rang *****
avatar

Messages : 2213
Localisation : Oui

MessageSujet: Re: [script] Générateur de labyrinthe parfait.   Mer 10 Oct 2012 - 16:39

Ah bon bah je sais pas alors, désolé triste2
Revenir en haut Aller en bas
l0lmanPH
Utilisateur confirmé: Rang *
avatar

Messages : 226
Localisation : cbna.forumactif.com
Projet Actuel : Le Méchant Tueur de Bisounours
Metroid Prime : Némésis
Tutoriel GM

MessageSujet: Re: [script] Générateur de labyrinthe parfait.   Sam 13 Oct 2012 - 19:38

J'ai commencé à annoter le code mais j'ai vite abandonné x'). Je poste pour ne pas sentir mon effort inutile.

Code:
//script genererlaby(casesx, casesy)
//par -Coco-

depx = argument0 // taille horizontale de la surface des murs
depy = argument1 // ... verticale ...


//initialisation
for (a=0;a<depx+3;a+=1) { //pourquoi les + 3 ?
  for (b=0; b<depy+3; b+=1) {
    cases[a,b] = 4 // on remplit tout le tableau avec la valeur "4", qui signifie vide.
  }
}

//fermeture horizontale
for (a=0;a<depx+3;a+=1) {
  cases[a,0]=3 // ligne de murs en haut
  cases[a,depy+1]=3 // ligne de murs en bas
}

//fermeture verticale
for (a=0;a<depy+3;a+=1) {
  cases[0,a]=3// ligne de murs de gauche
  cases[depx+1,a]=3 // ligne de murs de droite
}

// créer les objets à partir du tableau
for (a=0;a<depx*2+3;a+=1) { // pourquoi * 2 ? 2 fois plus de murs ?
  for (b=0; b<depy*2+3; b+=1) {
    instance_create(a*16,b*16,mur) // 16 : taille du sprite.
  }
}

for (a=0;a<depx;a+=1) {
  for (b=0; b<depy; b+=1) {
    position_destroy((a+1)*32,(b+1)*32) // détruire un mur sur deux ? + 1 pour ne pas détruire les murs qui ferment le labyrinthe ?
  }
}

i=1
j=1

cases[i,j]=3 // Pourquoi cette case ?


// la boucle du jeu
while 1 {
plas=true // signification de plas ?

while plas {
  plas = true

if cases[i-1,j]!=4 and cases[i+1,j]!=4 and cases[i,j+1]!=4 and cases[i,j-1]!=4
{
plas=false
}

if plas = true
{
o=i
p=j

repet=true

while repet
{
i=o
j=p
r=floor(random(4))

i+=(r=0)
i-=(r=2)
j+=(r=1)
j-=(r=3)

if cases[i,j]=4
repet=false
}
cases[i,j]=3
position_destroy(((i*32+o*32)/2),((j*32+p*32)/2))
}
}

continuer = false

for (a=1;a<depx+1;a+=1)
{
for (b=1;b<depy+1;b+=1)
{
if cases[a,b] = 4
continuer = true
}
}
if continuer = false
exit

continuer = true

while continuer = true
{
b=floor(random(depx-1))+1
c=floor(random(depy-1))+1
if cases[b,c]=3
{
if cases[b+1,c]=4 or cases[b-1,c]=4 or cases[b,c+1]=4 or cases[b,c-1]=4
{
i=b
j=c
continuer = false
}
}
}

}

_________________

« Un même visage, un même passé, deux destins différents ? »
Metroid Prime : Némésis, fangame et suite du célèbre Metroid Prime 3 : Corruption.

Rédaction d'un big-tuto pour le SdZ sur Game Maker...
Avancement : 60% hors-ligne, 5% en ligne.
Revenir en haut Aller en bas
onilink_
Modérateur
avatar

Messages : 8883
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

MessageSujet: Re: [script] Générateur de labyrinthe parfait.   Sam 13 Oct 2012 - 21:04

Tient, un revenant :b

_________________
                 
Revenir en haut Aller en bas
-Coco-
Utilisateur confirmé: Rang ***
avatar

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

MessageSujet: Re: [script] Générateur de labyrinthe parfait.   Dim 14 Oct 2012 - 7:54

Désolé, j'ai fait ça dans ma jeunesse, y'a de l'optimisation niveau 0 et c'est plutôt buggé.
Mais en tout cas chez moi ça marchait (GM 8.0).
Faut que tu fasses gaffe aux conditions initiales : faut que l'objet soit avec une zone de collision carrée de 16*16 pixels (je crois).
En gros c'est un sprite carré de 16*16. Sinon y'a des problèmes de boucle infinie (il arrivera jamais à trouver de la place alors qu'il sait qu'il lui reste des blocs à placer).

Malheureusement j'ai la flemme de faire un code stable, j'avais fait celui là à partir d'un programmes que j'avais fait sur calculatrice (c'est pour ça qu'il y a des +3, +2 et ce genre de conneries, j'avais fait en sorte de réussir à le faire marcher sur calto, puis je l'ai recopié, donc y'a certains trucs je sais même plus ce que ça fait).

D'ailleurs mon code est plutôt merdique, j'utilise à la fois des tableaux et des position_destroy...

_________________
Oh, snap.
Revenir en haut Aller en bas
el_loco67000
Nouveau


Messages : 9

MessageSujet: Re: [script] Générateur de labyrinthe parfait.   Sam 27 Aoû 2016 - 14:02

bonjour,

quelqu'un a t il trouvé le bug qui faisait planter ce sympathique script?
j'ai bien besoin d'un générateur et celui ci me plait bien... mais plante hélas parfois... j'ai bien tenté de trouver pourquoi mais sans succes ^^
Revenir en haut Aller en bas
Contenu sponsorisé




MessageSujet: Re: [script] Générateur de labyrinthe parfait.   

Revenir en haut Aller en bas
 
[script] Générateur de labyrinthe parfait.
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» [script] Générateur de labyrinthe parfait.
» [RESOLU] [SCRIPT] Générateur de texte
» Dédale, générateur de labyrinthes
» Générateur de factures (Html/Css)
» [Projet] Générateur de Signatures

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