AccueilAccueil  FAQFAQ  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  Connexion  
-24%
Le deal à ne pas rater :
PC Portable Gaming 15.6″ Medion Erazer Deputy P40 (FHD 144Hz, RTX ...
759.99 € 999.99 €
Voir le deal

 

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

Aller en bas 
+6
xxzerga
marty
Mr_Twister
Dan_lizhot
glcraft
-Coco-
10 participants
AuteurMessage
-Coco-
Utilisateur confirmé: Rang ***
-Coco-


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

[script] Générateur de labyrinthe parfait. Empty
MessageSujet: [script] Générateur de labyrinthe parfait.   [script] Générateur de labyrinthe parfait. EmptyMar 12 Oct 2010 - 19: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 *****
glcraft


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

[script] Générateur de labyrinthe parfait. Empty
MessageSujet: Re: [script] Générateur de labyrinthe parfait.   [script] Générateur de labyrinthe parfait. EmptyMar 12 Oct 2010 - 21:32

ah ouais bien [script] Générateur de labyrinthe parfait. Super
Revenir en haut Aller en bas
http://gameblog49.skyblog.com/
Invité
Invité




[script] Générateur de labyrinthe parfait. Empty
MessageSujet: Re: [script] Générateur de labyrinthe parfait.   [script] Générateur de labyrinthe parfait. EmptyMar 12 Oct 2010 - 21:43

il suffit d'ajouter un 3ème argument pour utiliser l'objet de ton choix
Revenir en haut Aller en bas
-Coco-
Utilisateur confirmé: Rang ***
-Coco-


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

[script] Générateur de labyrinthe parfait. Empty
MessageSujet: Re: [script] Générateur de labyrinthe parfait.   [script] Générateur de labyrinthe parfait. EmptyMar 12 Oct 2010 - 21: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
Dan_lizhot


Messages : 3463
Projet Actuel : Crypt Of Darkness

[script] Générateur de labyrinthe parfait. Empty
MessageSujet: Re: [script] Générateur de labyrinthe parfait.   [script] Générateur de labyrinthe parfait. EmptyMar 26 Oct 2010 - 22:51

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


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

[script] Générateur de labyrinthe parfait. Empty
MessageSujet: Re: [script] Générateur de labyrinthe parfait.   [script] Générateur de labyrinthe parfait. EmptyDim 31 Oct 2010 - 13: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 ***
marty


Messages : 697
Projet Actuel : laby-ereinte !

[script] Générateur de labyrinthe parfait. Empty
MessageSujet: Re: [script] Générateur de labyrinthe parfait.   [script] Générateur de labyrinthe parfait. EmptyMar 8 Mai 2012 - 12:17

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


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

[script] Générateur de labyrinthe parfait. Empty
MessageSujet: Re: [script] Générateur de labyrinthe parfait.   [script] Générateur de labyrinthe parfait. EmptyMar 8 Mai 2012 - 22: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 ***
marty


Messages : 697
Projet Actuel : laby-ereinte !

[script] Générateur de labyrinthe parfait. Empty
MessageSujet: Re: [script] Générateur de labyrinthe parfait.   [script] Générateur de labyrinthe parfait. EmptyMer 9 Mai 2012 - 19:30

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



Messages : 10

[script] Générateur de labyrinthe parfait. Empty
MessageSujet: MERCI !   [script] Générateur de labyrinthe parfait. EmptyMer 10 Oct 2012 - 14: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 *****
Térence


Messages : 2213
Localisation : Oui

[script] Générateur de labyrinthe parfait. Empty
MessageSujet: Re: [script] Générateur de labyrinthe parfait.   [script] Générateur de labyrinthe parfait. EmptyMer 10 Oct 2012 - 17: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

[script] Générateur de labyrinthe parfait. Empty
MessageSujet: Re: [script] Générateur de labyrinthe parfait.   [script] Générateur de labyrinthe parfait. EmptyMer 10 Oct 2012 - 18:24

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


Messages : 2213
Localisation : Oui

[script] Générateur de labyrinthe parfait. Empty
MessageSujet: Re: [script] Générateur de labyrinthe parfait.   [script] Générateur de labyrinthe parfait. EmptyMer 10 Oct 2012 - 18:39

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


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

[script] Générateur de labyrinthe parfait. Empty
MessageSujet: Re: [script] Générateur de labyrinthe parfait.   [script] Générateur de labyrinthe parfait. EmptySam 13 Oct 2012 - 21: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
}
}
}

}

_________________
[script] Générateur de labyrinthe parfait. Usebar_mpn-21cdd96
« 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
onilink_


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

[script] Générateur de labyrinthe parfait. Empty
MessageSujet: Re: [script] Générateur de labyrinthe parfait.   [script] Générateur de labyrinthe parfait. EmptySam 13 Oct 2012 - 23:04

Tient, un revenant :b

_________________
[script] Générateur de labyrinthe parfait. Runningpotato1[script] Générateur de labyrinthe parfait. TvF6GED [script] Générateur de labyrinthe parfait. MdetltS
Revenir en haut Aller en bas
-Coco-
Utilisateur confirmé: Rang ***
-Coco-


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

[script] Générateur de labyrinthe parfait. Empty
MessageSujet: Re: [script] Générateur de labyrinthe parfait.   [script] Générateur de labyrinthe parfait. EmptyDim 14 Oct 2012 - 9: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

[script] Générateur de labyrinthe parfait. Empty
MessageSujet: Re: [script] Générateur de labyrinthe parfait.   [script] Générateur de labyrinthe parfait. EmptySam 27 Aoû 2016 - 16: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é





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

Revenir en haut Aller en bas
 
[script] Générateur de labyrinthe parfait.
Revenir en haut 
Page 1 sur 1

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