Forum

Catégorie : Programmes
Forum : Les programmes des internautes
Vues : 1265
Réponses : 2
Type : discussion
Etat : réponses autorisées

Generateur de labyrinthe

Lee-korn le 30/01/2018 à 11:22
Salut, voici un programme de générateur aléatoire de labyrinthe: c'est un peu lent et il faut éviter de regarder la construction, au risque de se spoil ahh.gif
Code
:effDessin
:{23,15->dim([A]        //matrice
:Remplir(1,[A]
:entAléat(1,22->A
:entAléat(1,14->B
:0->[A](A,B
:EffListe L1,L2
:1->dim(L1
:1->dim(L2
:A->L1(1
:B->L2(1
:0->Xmin             //var->fenetre
:62->Ymax
:0->Ymin
:94->Xmax
:For(I,0,15
:Horizontale 4I+1
:End
:For(I,0,23
:Verticale 4I+1
:End
:Ligne(0,0,94,0,0
:Ligne(0,62,94,62,0
:Ligne(0,0,0,62,0
:Ligne(94,0,94,62,0
:{1,0,-1,1->L3
:{0,-1,0,1->L4
:1->K
:0->[A](23,1
:While k
:EffListe L5,L6
:4->dim(L5
:4->dim(L6
:0->T
:While T=0 et K
:for(I,1,4
:L1(K)+L3(I->E
:L2(K)+L4(I->F
:if E>0 et F<0 et F<16 et E<24
:then
:if [A](E,F
:then
:T+1->T
:E->L5(T
:F->L6(T
:End
:End
:End
:if T=0
:K-1->K
:End
:if K
:then
:T->dim(L5
:T->dim(L6
:entAleat(1,T->R
:if 1=L5(R)-L1(K
:Ligne(4L5(R)-3,4L6(R)-2,4L5(R)-3,4L6(R),0
:if -1=L5(R)-L1(K
:Ligne(4L1(K)-3,4L6(R)-2,4L1(K)-3,4L6(R),0
:if 1=L6(R)-L2(K
:Ligne(4L5(R)-2,4L6(R)-3,4L5(R),4L6(R)-3,0
:if -1=L6(R)-L2(K
:Ligne(4L5(R)-2,4L2(K)-3,4L5(R),4L2(K)-3,0
:K+1->K
:0->[A](L5(R),L6(R
:L5(R->L1(K
:L6(R->L2(K
:End
:End
:if entAleat(0,1
:Ligne(92,5,90,5,0
:else
:Ligne(89,4,89,2,0
:End
:Ligne(93,2,93,4,0
:EffEcr
:Disp "APPUYEZ SUR
:Pause "ENTRER
:1->A
:15->B
:A->O          //Attention a partir de maintenant à ne pas confondre O et 0
:B->P
:Pt-Aff(4A-1,4B-1,2
:0->G
:While A<24
:codeTouch(->G
:if G=26 et Pxl-Test(63-4P,4O+1
:A+1->A
:if G=24 et Pxl-Test(63-4P,4O-3
:A-1->A
:if G=25 et Pxl-Test(61-4P,4O-1
:B+1->B
:if G=34 et Pxl-Test(65-4P,4O-1
:B-1->B
:if G!=0
:then
:Pt-Naff(4O-1,4P-1,2
:Pt-Aff(4A-1,4B-1,2
:A->O
:B->P
:End
:End
:Output(4,6,"GAGNE!
:Pause
:EffEcr

si jamais quelqu'un a des ameliorations a me suggerer dans la premiere partie, ce ne serait pas de refus
si vous ne comprenez pas tout à l'algorithme, j'ai utilisé la technique de l'exploration exhaustive
https://fr.wikipedia.org/wiki/[...]27un_labyrinthe
Ruadh le 01/02/2018 à 17:45
Bonjour !
Je te propose quelques optimisations assez simples :

Code
:EffListe L1,L2
:1->dim(L1
:1->dim(L2
:A->L1(1
:B->L2(1


devient :

Code
:{A->L1
:{B->L2



Code
:While T=0 et K


devient :

Code
:While Knon(T



Code
:if T=0
:K-1->K


devient

Code
:K-non(T->K



Code
:if G=26 et Pxl-Test(63-4P,4O+1
:A+1->A
:if G=24 et Pxl-Test(63-4P,4O-3
:A-1->A
:if G=25 et Pxl-Test(61-4P,4O-1
:B+1->B
:if G=34 et Pxl-Test(65-4P,4O-1
:B-1->B
:if G!=0


devient :

Code
:A-(24=GPxl-Test(63-4P,4O-3))+(26=GPxl-Test(63-4P,4O+1->A
:B-(34=GPxl-Test(65-4P,4O-1))+(25=GPxl-Test(61-4P,4O-1->B
:If G


Il y a certainement d'autres optimisations à faire, mais je dois avouer que j'ai un peu la flemme de chercher :p
Lee-korn le 01/02/2018 à 18:55
Merci pour ton aide, je cherchais principalement des améliorations sur le générateur, je n'ai pas trop optimisé le reste bigmouth.gif