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 86 87 88 89 90 91
|
#include <stdio.h>
#include <stdlib.h>
/* Dimensions du labyrinthe */
#define N 15
#define P 45
#define DIM N*P
/* void d'affichage du labyrinthe */
void disp(int grid[N][P])
{
int i , j;
printf("\n");
for(i = 0 ; i < N ; i++)
{
for(j = 0 ; j < P ; j++)
{
/* -1 = un mur, 0 = pas de mur */
printf("%d" , -grid[i][j]);
}
printf("\n");
}
printf("\n");
}
int main(int argc, char *argv[])
{
int grid[N][P] , i = 0 , j = 0 , chx[DIM] , chy[DIM] , n = 0 , ch , dx[4] = {2,0,-2,0} , dy[4] = {0,-2,0,2} , x = 0 , y = 0;
srand(time(NULL));
/* remplir le tableau grid de 0 et remplir le tour du tableau grid de -1 (= murs) */
for(i = 0 ; i < N ; i++)
{
for(j = 0 ; j < P ; j++)
{
if(i == 0 || j == 0 || i == N-1 || j == P-1)
grid[i][j] = -1;
else
grid[i][j] = 0;
}
}
/* les listes chx et chy contiennent les coordonnées, dans l'ordre, des cases composant le chemin du début (en haut
* à gauche) à la fin (en bas à droite) du labyrinthe */
chx[0] = 1;
chy[0] = 1;
/*
1
^
déplacements : 2 < > 0
v
3
n est le numéro de la case considérée dans le chemin allant du début à la fin de labyrinthe
*/
/* construction du chemin à suivre pour aller du début à la fin */
while(chx[n] != N-2 && chy[n] != P-2)
{
x = chx[n];
y = chy[n];
n++;
ch = rand() % 4;
printf("choix : %d\n",ch);
/* Conditions pour que le choix (aléatoire) de la direction à prendre pour la case suivante soit valide : */
while(x + dx[ch] < 1
|| x + dx[ch] > P-2
|| y + dy[ch] < 1 || y + dy > N-2
|| (x == 1
&& dy[ch] == 1)
|| (x == N-2
&& dy[ch] == 1)
|| (y == 1
&& dx[ch] == -1)
|| (y == P-2
&& dx[ch] == -1)
|| grid[ y + dy[ch] ][ x + dx[ch] ] == -2)
{
ch = rand() % 4;
printf("choix : %d\n",ch);
}
chx[n] += dx[ch];
chy[n] += dy[ch];
grid[chy[n]][chx[n]] = -2;
}
for(i = 0 ; i < N ; i++)
{
}
return 0;
} |
Partager