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
--------------------------------------------------------------