/*parcour.c *fichier contenant l ensemble des fonctions permettant de parcourir le *labyrinthe */ #include /*#include"../../include/parcour.h"*/ //#include"../../include/affichage.h" #define H 4 #define B 3 #define D 2 #define G 1 #define HD 0 #define HG 5 #define BD 6 #define BG 8 /** la fonction avance permet d'avancer dans le labyrinthe */ int laby[100][100]; /*m.donnees=laby;*/ int i,j; int dir; void avance(); int case_droite(); int case_devant(); void avance(){ if ( dir == H ) { i --; } if(dir==D) { j++; } if(dir==HD) { i --,j++; } if(dir==HG) { i--,j--; } if(dir==B) { i++; } if(dir==G) { j--; } if(dir==BG) { i++,j--; } if(dir==BD) { i++,j++; } } /*la fonction permet de se deplacer si c'est possible */ int case_devant() { if ( dir == H ) return laby[i-1][j]; else if ( dir == D ) return laby[i][j+1]; else if ( dir == HD) return laby[i][j+1]; else if (dir==B) return laby[i+1][j]; else if(dir==HG) return laby[i-1][j-1]; else if(dir==G) return laby[i][j-1]; else if(dir==BG) return laby[i+1][j-1]; else if(dir==BD) return laby[i+1][j+1]; else if(dir==B) return laby[i+1][j]; } int case_droite() { int i,j; if ( dir == H ) return laby[j-1][i]; else if ( dir == D ) return laby[j][i+1]; else if ( dir == HD) return laby[j][i+1]; else if (dir==B) return laby[j+1][i]; else if(dir==HG) return laby[j-1][i-1]; else if(dir==G) return laby[j][i-1]; else if(dir==BG) return laby[j+1][i-1]; else if(dir==BD) return laby[j+1][i+1]; else if(dir==B) return laby[j+1][i]; } /*la fonction suivante permet de connaitre la possibilité de passage *suivant une direction*/ for(i=0;i<100;i++){ for(j=0;j<100;j++){ //( i<100 && j<100 ) { if ( case_a_droite() == 0 ) // on se tourne vers la droite // un moyen plus simple est : dir = ( dir+1 ) % 4; if ( dir == G ) dir = H; else { dir = dir + 1; // puis on avance d'une case avance(); } else if ( case_devant() == 0 ) { avance(); } else // on a plus le choix, // on se tourne vers la gauche if ( dir == H ) dir = G else dir = dir - 1; // le moyen plus simple était d'écrire : dir = ( dir-1 ) % 4; } }