#include #include #include #include "../include/labyrinth.h" void find_path_r(Labyrinth* labyrinth, int i, int j); Labyrinth* newLabyrinth(int n, int m){ if(n<1 || m<1 || (n==1 && m==1)){ printf("COGLIONE\n"); exit(EXIT_FAILURE); } Labyrinth* labyrinth = (Labyrinth* )malloc(sizeof(Labyrinth)); labyrinth->x_size = n; labyrinth->y_size = m; labyrinth->at = (Node** )malloc(n*sizeof(Node* )); for(int i=0; iat[i] = (Node *)malloc(m*sizeof(Node)); for(int i=0; iat[i][j].dp = -1; labyrinth->at[i][j].east = 0; labyrinth->at[i][j].south = 0; labyrinth->at[i][j].visited = 0; } } labyrinth->x_size = n; labyrinth->y_size = m; labyrinth->start.x = rand()%n; labyrinth->start.y = rand()%m; do{ labyrinth->end.x = rand()%n; labyrinth->end.y = rand()%m; }while(labyrinth->start.x == labyrinth->end.x && labyrinth->start.y == labyrinth->end.y); return labyrinth; } void resetLabyrinth(Labyrinth* labyrinth){ for(int i=0; ix_size; i++){ for(int j=0; jy_size; j++){ labyrinth->at[i][j].color = WHITE; labyrinth->at[i][j].visited = 0; labyrinth->at[i][j].dp = -1; } } labyrinth->at[labyrinth->start.x][labyrinth->start.y].color = BLUE; labyrinth->at[labyrinth->end.x][labyrinth->end.y].color = BLUE; } void removeLabyrinth(Labyrinth* labyrinth){ for(int i=0; ix_size; i++) free(labyrinth->at[i]); free(labyrinth->at); free(labyrinth); } void find_path(Labyrinth* labyrinth){ find_path_r(labyrinth, labyrinth->end.x, labyrinth->end.y); } void find_path_r(Labyrinth* labyrinth, int i, int j){ labyrinth->at[i][j].color = BLUE; // printLab(labyrinth); if(i==labyrinth->start.x && j==labyrinth->start.y) return; if(labyrinth->at[i][j].direction == UP) find_path_r(labyrinth, i+1, j); else if(labyrinth->at[i][j].direction == RIGHT) find_path_r(labyrinth, i, j-1); else if(labyrinth->at[i][j].direction == DOWN) find_path_r(labyrinth, i-1, j); else if(labyrinth->at[i][j].direction == LEFT) find_path_r(labyrinth, i, j+1); else{ printf("ERROR IN FIND_PATH\n"); exit(EXIT_FAILURE); } } void printLab(Labyrinth* labyrinth){ printLabWith(labyrinth, '|', '-', '+'); } void printLabWith(Labyrinth* labyrinth, char wall, char floor, char corner){ int i, j; system("clear"); for(j=0; jy_size; j++){ printf("%c%c", corner, floor); } printf("%c\n", corner); for(i=0; ix_size; i++){ printf("%c", wall); for(j=0; jy_size; j++){ if(labyrinth->at[i][j].color == BLUE) printf("\033[104m \033[49m"); else if(labyrinth->at[i][j].color == GREEN) printf("\033[102m \033[49m"); else if(labyrinth->at[i][j].color == ORANGE) printf("\033[103m \033[49m"); else printf(" "); if(labyrinth->at[i][j].east && jy_size-1){ if(labyrinth->at[i][j+1].color == BLUE && labyrinth->at[i][j].color == BLUE) printf("\033[104m \033[49m"); else if((labyrinth->at[i][j+1].color == GREEN || labyrinth->at[i][j+1].color == BLUE) && (labyrinth->at[i][j].color == GREEN || labyrinth->at[i][j].color == BLUE)) printf("\033[102m \033[49m"); else if(!(labyrinth->at[i][j+1].color == WHITE) && !(labyrinth->at[i][j].color == WHITE)) printf("\033[103m \033[49m"); else printf(" "); }else printf("%c", wall); } printf("\n"); for(j=0; jy_size; j++){ printf("%c", corner); if(labyrinth->at[i][j].south && ix_size-1){ if(labyrinth->at[i][j].color == BLUE && labyrinth->at[i+1][j].color == BLUE) printf("\033[104m \033[49m"); else if((labyrinth->at[i][j].color == GREEN || labyrinth->at[i][j].color == BLUE) && (labyrinth->at[i+1][j].color == GREEN || labyrinth->at[i+1][j].color == BLUE)) printf("\033[102m \033[49m"); else if(!(labyrinth->at[i][j].color == WHITE) && !(labyrinth->at[i+1][j].color == WHITE)) printf("\033[103m \033[49m"); else printf(" "); }else printf("%c", floor); } printf("%c\n", corner); } printf("\n"); usleep(50000); }