Problème intéressant en effet
La première chose qui me vient a l'esprit est de faire de la récursivité terminal la dessus. Je partirais d'un repère avec le centre en haut a gauche diriger vers la droite et le bas. La première case est choisi aléatoirement avec au moins deux entré, une sur le bord (entré du donjon) et une autre qui s'ouvre au reste du tableau a remplir (porte vers une autre salle). A partir de la tu lance une fonction, récursive.
Il faut un tableau Tab a deux dimension au dimension du tableau avec 0 si la case est vide ou l'ID de la case choisi le cas échéant. X et Y etant les coordonne de la case initialisé a 0/0 au début. Porte prend deux valeur, droit ou haut pour savoir ou est la jointure de la case précédente. Mon algo parcour le tableau avec un sens gauche/droite puis haut/bas.
La fonction aurait un prototype du genre:
function NewDonjon(X,Y,Porte)
SI X=0 et Y=0
---remplir Tab[0][0] avec une case ayant une porte en haut ou a droite et une porte a droite et/ou en bas//initialisation
SI Tab[X][Y]=0
---SI Porte=droite remplir Tab[X][Y] avec case ayant une porte a droite
---Si porte=haut remplir Tab[X][Y] avec une case ayant une porte en haut
SI num_case a une porte a gauche
---appelle de NewDonjon(X+1,Y,droit)
SI num_case a une porte en bas
---appelle de NewDonjon(X,Y+1,haut)
Fin fonction
Le probleme de cet algo est que toute les cases du tableaux ne seront pas forcement completer si les case choisi aléatoirement forme des cul de sac avant la fin. L'avantage c'est qu'en théorie tu est sur que toute tes salles seront relié entre elle.
La première chose qui me vient a l'esprit est de faire de la récursivité terminal la dessus. Je partirais d'un repère avec le centre en haut a gauche diriger vers la droite et le bas. La première case est choisi aléatoirement avec au moins deux entré, une sur le bord (entré du donjon) et une autre qui s'ouvre au reste du tableau a remplir (porte vers une autre salle). A partir de la tu lance une fonction, récursive.
Il faut un tableau Tab a deux dimension au dimension du tableau avec 0 si la case est vide ou l'ID de la case choisi le cas échéant. X et Y etant les coordonne de la case initialisé a 0/0 au début. Porte prend deux valeur, droit ou haut pour savoir ou est la jointure de la case précédente. Mon algo parcour le tableau avec un sens gauche/droite puis haut/bas.
La fonction aurait un prototype du genre:
function NewDonjon(X,Y,Porte)
SI X=0 et Y=0
---remplir Tab[0][0] avec une case ayant une porte en haut ou a droite et une porte a droite et/ou en bas//initialisation
SI Tab[X][Y]=0
---SI Porte=droite remplir Tab[X][Y] avec case ayant une porte a droite
---Si porte=haut remplir Tab[X][Y] avec une case ayant une porte en haut
SI num_case a une porte a gauche
---appelle de NewDonjon(X+1,Y,droit)
SI num_case a une porte en bas
---appelle de NewDonjon(X,Y+1,haut)
Fin fonction
Le probleme de cet algo est que toute les cases du tableaux ne seront pas forcement completer si les case choisi aléatoirement forme des cul de sac avant la fin. L'avantage c'est qu'en théorie tu est sur que toute tes salles seront relié entre elle.