Advertisement
ibanezzaro

Maze0.2

Jan 19th, 2016
239
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 6.71 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stddef.h>
  4. #define maxRow 12
  5. #define maxCol 12
  6.  
  7. //DEVO FARLO CON GLI IF NESTATI DIO CANEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE, CIAO DARIO DI DOMANI
  8.  
  9. char labyrinth[maxRow][maxCol] = { {'#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#'},
  10.                                             {'#', '.', '.', '.', '#', '.', '.', '.', '.', '.', '.', '#'},
  11.                                             {'.', '.', '#', '.', '#', '.', '#', '#', '#', '#', '.', '#'},
  12.                                             {'#', '#', '#', '.', '#', '.', '.', '.', '.', '#', '.', '#'},
  13.                                             {'#', '.', '.', '.', '.', '#', '#', '#', '.', '#', '.', 'c'},
  14.                                             {'#', '#', '#', '#', '.', '#', '.', '#', '.', '#', '.', '#'},
  15.                                             {'#', '.', '.', '#', '.', '#', '.', '#', '.', '#', '.', '#'},
  16.                                             {'#', '#', '.', '#', '.', '#', '.', '#', '.', '#', '.', '#'},
  17.                                             {'#', '.', '.', '.', '.', '.', '.', '.', '.', '#', '.', '#'},
  18.                                             {'#', '#', '#', '#', '#', '#', '.', '#', '#', '#', '.', '#'},
  19.                                             {'#', '.', '.', '.', '.', '.', '.', '#', '.', '.', '.', '#'},
  20.                                             {'#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#'} };
  21.  
  22.  
  23.  
  24. typedef struct location{
  25.     int i;
  26.     int j;
  27.     int entr;
  28. } t_location ;
  29.  
  30. t_location entrance_location();
  31. void maze_solver(t_location);
  32. void find_entrance();
  33. void find_entrance_updown();
  34. void print_maze();
  35. int finding_point(int, int, int);
  36. t_location move_up (t_location);
  37. t_location move_down(t_location);
  38. t_location move_left(t_location);
  39. t_location move_right(t_location);
  40. t_location evaluate_situation(t_location);
  41.  
  42.  
  43. int main(void)
  44. {
  45.  
  46.     print_maze();
  47.     find_entrance();
  48.     t_location current = entrance_location();
  49.     printf("%d, %d, %d\n", current.entr, current.i, current.j);
  50.     maze_solver(current);
  51.     printf("The exit is %d, %d", current.i, current.j);
  52.  
  53. return 0;
  54. }
  55.  
  56. void print_maze()
  57. {
  58.     int i, j;
  59.     for(i = 0; i < maxRow; ++i){
  60.         for(j = 0; j < maxCol; ++j){
  61.             printf("%c\t", labyrinth[i][j]);
  62.         }
  63.         printf("\n\n");
  64.     }
  65.  
  66. }
  67.  
  68. void find_entrance ()
  69. {
  70.     int i, j;
  71.     int flag = 0;
  72.     for(j = 0; j < maxCol; j+=maxCol - 1){
  73.         for(i = 0; i < maxRow; i++){
  74.             finding_point(flag, i, j);
  75.  
  76.         }
  77.     }
  78.     if(flag == 0) {
  79.         find_entrance_updown();
  80.     }
  81. }
  82.  
  83. void find_entrance_updown (int flag) // still to implement case in which there's no entrance
  84. {                                    // just need to make findentranceupdown output flag0 and create an if(no entrance)
  85.     int i, j;
  86.     for(i = 0; i < maxRow; i+=11){
  87.             for(j = 0; j < maxCol; j++){
  88.                 finding_point(flag, i, j);
  89.         }
  90.     }
  91.  
  92. }
  93.  
  94. int finding_point (int flag, int i, int j)
  95. {
  96.  
  97.     if(labyrinth[i][j] == '.') {
  98.                         printf("Found the entrance\n");
  99.                         labyrinth[i][j] = 'X';
  100.                         flag++;
  101.                         print_maze();
  102.                 }
  103. return flag;
  104. }
  105.  
  106. void maze_solver(t_location current)
  107. {
  108.  
  109.     if(current.entr == 1){
  110.         move_down(current);
  111.         evaluate_situation(current);
  112.     }
  113.     else if(current.entr == 2){
  114.         move_up(current);
  115.         evaluate_situation(current);
  116.  
  117.     }
  118.     else if(current.entr == 3){
  119.         move_right(current);
  120.         evaluate_situation(current);
  121.  
  122.     }
  123.     else if(current.entr == 4){
  124.         move_left(current);
  125.         evaluate_situation(current);
  126.  
  127.     }
  128. }
  129.  
  130.  
  131.  
  132.  
  133.  
  134. t_location entrance_location ()
  135. {
  136.     t_location current;
  137.     int i, j;
  138.     for( i = 0; i < maxRow; i++) {
  139.         for( j = 0; j < maxCol; j++){
  140.             if(labyrinth[i][j] == 'X'){
  141.                 current.i = i;
  142.                 current.j = j;
  143.                 //questo printf mi assicura che current è up to date: printf("%d, %d, %d", current.i, current.j, current.entr);
  144.                 printf("Entrance coord:%d, %d\n", current.i ,current.j);
  145.                 if(labyrinth[0][j] == 'X'){ //sopra
  146.                 current.entr = 1;
  147.                 }
  148.                 else if (labyrinth[11][j] == 'X'){ //sotto
  149.                 current.entr = 2;
  150.                 }
  151.                 else if( labyrinth[i][0] == 'X'){ //sinistra
  152.                 current.entr = 3;
  153.                 }
  154.                 else if(labyrinth[i][11] == 'X'){  //destra
  155.                 current.entr = 4;
  156.                 }
  157.             }
  158.         }
  159.     }
  160. return current;
  161. }
  162.  
  163.  
  164. t_location move_up(t_location current)  //devo ricordarmi di settare gli indici all'entrata prima di lanciare move_up
  165. {
  166.         int i = current.i;
  167.         int j = current.j;
  168.         if(labyrinth[i+1][j] == '.'){
  169.         labyrinth[i+1][j] = 'X';
  170.         print_maze();
  171.         current.i = i++;
  172.         }
  173.     return current;
  174. }
  175.  
  176. t_location move_down(t_location current)  //devo ricordarmi di settare gli indici all'entrata prima di lanciare move_up
  177. {
  178.     int i = current.i;
  179.     int j = current.j;
  180.     if(labyrinth[i-1][j] == '.'){
  181.     labyrinth[i-1][j] = 'X';
  182.     print_maze();
  183.     current.i = i--;
  184.     }
  185.     return current;
  186. }
  187.  
  188. t_location move_right(t_location current)  //devo ricordarmi di settare gli indici all'entrata prima di lanciare move_up
  189. {
  190.     int i = current.i;
  191.     int j = current.j;
  192.     if(labyrinth[i][j+1] == '.'){
  193.     labyrinth[i][j+1] = 'X';
  194.     print_maze();
  195.     current.j = j++;
  196.     } //adesso deve controllare che sia possibile il movimento a destra
  197.     return current;
  198. }
  199.  
  200. t_location move_left(t_location current)  //devo ricordarmi di settare gli indici all'entrata prima di lanciare move_up
  201. {
  202.     int i = current.i;
  203.     int j = current.j;
  204.     if(labyrinth[i][j-1] == '.'){
  205.     labyrinth[i][j-1] = 'X';
  206.     print_maze();
  207.     current.j = j--;
  208.     } //adesso deve controllare che sia possibile il movimento a destra
  209.     return current;
  210. }
  211.  
  212.  
  213.  
  214. t_location evaluate_situation(t_location current)
  215. {
  216.     int i = current.i;
  217.     int j = current.j;
  218.  
  219.     if(labyrinth[i][j] == 'c') {
  220.         printf("Exit Found\n");
  221.     }
  222.     else {
  223.         if(labyrinth[i][j - 1] == 'X' ){ //DA SX VERSO DX
  224.             if(labyrinth[i + 1][j] == '#'){
  225.                 if(labyrinth[i][j+1] == '#'){
  226.                     move_up(current);
  227.                     evaluate_situation(current);
  228.                 }
  229.                 else {
  230.                     move_right(current);
  231.                     evaluate_situation(current);
  232.                 }
  233.             }
  234.             else {
  235.                 move_down(current);
  236.                 evaluate_situation(current);
  237.             }
  238.         }
  239.  
  240.         else if(labyrinth[i][j + 1] == 'X'){ //DA DX VERSO SX
  241.             if(labyrinth[i - 1][j] == '#'){
  242.                 if(labyrinth[i][j - 1] == '#'){
  243.                     move_down(current);
  244.                     evaluate_situation(current);
  245.                 }
  246.                 else {
  247.                     move_left(current);
  248.                     evaluate_situation(current);
  249.                 }
  250.             }
  251.             else {
  252.                 move_up(current);
  253.                 evaluate_situation(current);
  254.             }
  255.         }
  256.         else if(labyrinth[i - 1][j] == 'X'){
  257.             if(labyrinth[i][j - 1] == '#'){
  258.                 if(labyrinth[i + 1][j] == '#'){
  259.                     move_right(current);
  260.                     evaluate_situation(current);
  261.                 }
  262.                 else {
  263.                     move_down(current);
  264.                     evaluate_situation(current);
  265.                 }
  266.             }
  267.             else {
  268.                 move_left(current);
  269.                 evaluate_situation(current);
  270.             }
  271.         }
  272.         else if(labyrinth[i + 1][j] == 'X'){
  273.             if(labyrinth[i][j + 1] == '#'){
  274.                 if(labyrinth[i - 1][j] == '#'){
  275.                     move_left(current);
  276.                     evaluate_situation(current);
  277.                 }
  278.                 else {
  279.                     move_up(current);
  280.                     evaluate_situation(current);
  281.                 }
  282.             }
  283.             else {
  284.                 move_right(current);
  285.                 evaluate_situation(current);
  286.             }
  287.         }
  288.     }
  289. return current;
  290. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement