1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
|
/** Génére un layrnithe parfait **/
public void GenLabyParfait()
{
// On réinitialise le tableau
for (int i = 0; i < 4; i++)
{
casespossibles[i] = false;
}
// On recherche les cases possibles
casespossibles = RechercheCasesPossibles();
int j = 0;
for (int i = 0; i < 4; i++)
{
if (casespossibles[i] == false)
j++;
}
// Si aucune case n'est possible
if (j == 4)
{
// On regarde qu'on se retrouve pas à la case initiale
// (auquel cas la génération du labyrinthe est finie)
if (!(pos_actuelle == sortie_position))
{
// On retourne à la case précédente
pos_actuelle = pos_prec.Pop();
// Et on rappelle l'algorithme de génération avec la nouvelle position
GenLabyParfait();
}
}
// Si au moins un case est possible
// => on en choisi une au hasard
else
{
int mur_alea = random.Next(4);
while (casespossibles[mur_alea] == false)
{
mur_alea = random.Next(4);
}
// Haut
if (mur_alea == 0)
{
// On pose un chemin
Carte[pos_actuelle.X, pos_actuelle.Y - 1] = 0;
// On stocke notre position actuelle
pos_prec.Push(pos_actuelle);
// On avance sur cette case
pos_actuelle.Y--;
}
// Droite
else if (mur_alea == 1)
{
// On pose un chemin
Carte[pos_actuelle.X + 1, pos_actuelle.Y] = 0;
// On stocke notre position actuelle
pos_prec.Push(pos_actuelle);
// On avance sur cette case
pos_actuelle.X++;
}
// Bas
else if (mur_alea == 2)
{
// On pose un chemin
Carte[pos_actuelle.X, pos_actuelle.Y + 1] = 0;
// On stocke notre position actuelle
pos_prec.Push(pos_actuelle);
// On avance sur cette case
pos_actuelle.Y++;
}
// Gauche
else if (mur_alea == 3)
{
// On pose un chemin
Carte[pos_actuelle.X - 1, pos_actuelle.Y] = 0;
// On stocke notre position actuelle
pos_prec.Push(pos_actuelle);
// On avance sur cette case
pos_actuelle.X--;
}
// Et on rapelle l'algorithme
GenLabyParfait();
}
} |
Partager