Advertisement
Guest User

Untitled

a guest
Dec 15th, 2017
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 23.26 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. char** ucitaj_labirint(char** labirint, int redak, int  stupac);
  5. void ispisi(char** labirint, int redak, int stupac);
  6. int napravi_korak(char** labirint, int redak, int stupac, int *lokacija_pacova_redak, int* lokacija_pacova_stupac, char *smjer);
  7. int korak_prema_desno(char** labirint, int redak, int stupac, int *lokacija_pacova_redak, int *lokacija_pacova_stupac, char *smjer);
  8. int korak_prema_dolje(char** labirint, int redak, int stupac, int *lokacija_pacova_redak, int *lokacija_pacova_stupac, char *smjer);
  9. int korak_prema_lijevo(char** labirint, int redak, int stupac, int *lokacija_pacova_redak, int *lokacija_pacova_stupac, char *smjer);
  10. int korak_prema_gore(char** labirint, int redak, int stupac, int *lokacija_pacova_redak, int *lokacija_pacova_stupac, char *smjer);
  11. int provjera_korak_ispod_slobodan(char** labirint, int redak, int stupac, int *lokacija_pacova_redak, int *lokacija_pacova_stupac, char *smjer);
  12. int provjera_korak_iznad_slobodan(char** labirint, int redak, int stupac, int *lokacija_pacova_redak, int *lokacija_pacova_stupac, char *smjer);
  13. int provjera_korak_lijevo_slobodno(char** labirint, int redak, int stupac, int *lokacija_pacova_redak, int *lokacija_pacova_stupac, char *smjer);
  14. int provjera_korak_desno_slobodno(char** labirint, int redak, int stupac, int *lokacija_pacova_redak, int *lokacija_pacova_stupac, char *smjer);
  15.  
  16. void izracunaj_horizontalno(char** labirint, int redak, int stupac, int *lokacija_pacova_redak, int *lokacija_pacova_stupac, char *smjer);
  17. void izracunaj_vertikalno(char** labirint, int redak, int stupac, int *lokacija_pacova_redak, int *lokacija_pacova_stupac, char *smjer);
  18.  
  19. int main()
  20. {
  21.     int redak=0, stupac=0;
  22.     int flag = 1, lokacija_pacova_redak=0, lokacija_pacova_stupac=0;
  23.     char smjer = 'd';
  24.  
  25.     scanf("%d %d", &redak, &stupac);
  26.  
  27.     char** labirint = (char**)calloc(sizeof(char*), redak);
  28.  
  29.     labirint = ucitaj_labirint(labirint, redak, stupac);
  30.  
  31.     printf("Smjer je %c\n", smjer);
  32.  
  33.     int brojac = 15;
  34.     while(flag){
  35.  
  36.         if(smjer == 'd')
  37.             flag = korak_prema_desno(labirint, redak, stupac, &lokacija_pacova_redak, &lokacija_pacova_stupac, &smjer);
  38.         else if(smjer == 'f')
  39.             flag = korak_prema_dolje(labirint, redak, stupac, &lokacija_pacova_redak, &lokacija_pacova_stupac, &smjer);
  40.         else if(smjer == 'l')
  41.             flag = korak_prema_lijevo(labirint, redak, stupac, &lokacija_pacova_redak, &lokacija_pacova_stupac, &smjer);
  42.         else if(smjer == 'g')
  43.             flag = korak_prema_gore(labirint, redak, stupac, &lokacija_pacova_redak, &lokacija_pacova_stupac, &smjer);
  44.  
  45.         printf("Smjer je %c\n", smjer);
  46.  
  47.     }
  48.     ispisi(labirint, redak, stupac);
  49.  
  50.     free(labirint);
  51.  
  52.     return 0;
  53. }
  54.  
  55. char** ucitaj_labirint(char** labirint, int redak, int stupac){
  56.  
  57.     int i;
  58.  
  59.     for(i=0; i<redak; i++){
  60.         labirint[i] = (char*)calloc(sizeof(char), stupac);
  61.  
  62.         scanf("%s", labirint[i]);
  63.     }
  64.  
  65.     return labirint;
  66.  
  67. }
  68.  
  69. void ispisi(char** labirint, int redak, int stupac)
  70. {
  71.     printf("\nPutanja patsova\n");
  72.  
  73.     int i, j;
  74.  
  75.     for(i=0; i<redak; i++, printf("\n"))
  76.     {
  77.         for(j=0; j<stupac; j++)
  78.         {
  79.             printf("%c", labirint[i][j]);
  80.         }
  81.     }
  82.     printf("\n");
  83. }
  84.  
  85. int korak_prema_desno(char** labirint, int redak, int stupac, int *lokacija_pacova_redak, int *lokacija_pacova_stupac, char *smjer){
  86.  
  87.     /* Kad se nalazi u kutu gore-desno */
  88.     if((*lokacija_pacova_redak == 0) && (*lokacija_pacova_stupac == stupac-1)){
  89.  
  90.         /* Ako nam je korak ispod slobodan */
  91.         (*lokacija_pacova_redak)++;
  92.         return provjera_korak_ispod_slobodan(labirint, redak, stupac, lokacija_pacova_redak, lokacija_pacova_stupac, smjer);
  93.     }
  94.  
  95.     /* Kad se nalazi u kutu dolje-desno */
  96.     else if((*lokacija_pacova_redak == redak-1) && (*lokacija_pacova_stupac == stupac-1)){
  97.  
  98.         /* Ako nam je korak iznad slobodan */
  99.         (*lokacija_pacova_redak)--;
  100.         return provjera_korak_iznad_slobodan(labirint, redak, stupac, lokacija_pacova_redak, lokacija_pacova_stupac, smjer);
  101.     }
  102.  
  103.     /* Kad se ispred nalazi 'x' , '|' ili je zadnji stupac(negdje u sredini) */
  104.     else if((*lokacija_pacova_stupac == stupac-1) || (*(labirint[*lokacija_pacova_redak] + *lokacija_pacova_stupac + 1) == 'x') || (*(labirint[*lokacija_pacova_redak] + *lokacija_pacova_stupac + 1) == '|')){
  105.  
  106.         /* Ako je u koraku ispred '|' nek se "ukopa" */
  107.         if(*(labirint[*lokacija_pacova_redak] + *lokacija_pacova_stupac+1) == '|'){
  108.             *(labirint[*lokacija_pacova_redak] + *lokacija_pacova_stupac) = '*';
  109.             return 0;
  110.         }
  111.  
  112.         /* Ako iznad nije slobodan korak */
  113.         if((*lokacija_pacova_redak == 0) || (*(labirint[*lokacija_pacova_redak-1] + *lokacija_pacova_stupac) == 'x') || (*(labirint[*lokacija_pacova_redak-1] + *lokacija_pacova_stupac) == '-')){
  114.  
  115.             /* Ako je ispod slobodno */
  116.             if((*lokacija_pacova_redak != redak-1) && ((*(labirint[*lokacija_pacova_redak+1] + *lokacija_pacova_stupac) == '.') || (*(labirint[*lokacija_pacova_redak+1] + *lokacija_pacova_stupac) == 'h'))){
  117.                 *smjer = 'f';
  118.                 *(labirint[*lokacija_pacova_redak] + *lokacija_pacova_stupac) = '+';
  119.                 (*lokacija_pacova_redak)++;
  120.                 return 1;
  121.             }
  122.             else{
  123.                 *(labirint[*lokacija_pacova_redak] + *lokacija_pacova_stupac) = '*';
  124.                 return 0;
  125.             }
  126.         }
  127.  
  128.         /* Ako je iznad slobodno */
  129.         else if((*(labirint[*lokacija_pacova_redak-1] + *lokacija_pacova_stupac) == '.') || (*(labirint[*lokacija_pacova_redak-1] + *lokacija_pacova_stupac) == 'h')){
  130.  
  131.             /* Ako dolje nije slobodan korak */
  132.             if((*lokacija_pacova_redak == redak-1) || (*(labirint[*lokacija_pacova_redak+1] + *lokacija_pacova_stupac) == 'x') || (*(labirint[*lokacija_pacova_redak+1] + *lokacija_pacova_stupac) == '-')){
  133.                 *smjer = 'g';
  134.                 *(labirint[*lokacija_pacova_redak] + *lokacija_pacova_stupac) = '+';
  135.                 (*lokacija_pacova_redak)--;
  136.                 return 1;
  137.             }
  138.  
  139.             /* Ukoliko imamo slobodno na obe strane onda nek izracuna smjer */
  140.             else{
  141.                 izracunaj_vertikalno(labirint, redak, stupac, lokacija_pacova_redak, lokacija_pacova_stupac, smjer);
  142.                 return 1;
  143.             }
  144.         }
  145.     }
  146.  
  147.     /* Ako je korak ispred slobodan onda nastavi */
  148.     else if((*(labirint[*lokacija_pacova_redak] + *lokacija_pacova_stupac+1) == '.') || (*(labirint[*lokacija_pacova_redak] + *lokacija_pacova_stupac+1) == 'h')){
  149.         *(labirint[*lokacija_pacova_redak] + *lokacija_pacova_stupac) = '-';
  150.         (*lokacija_pacova_stupac)++;
  151.         return 1;
  152.     }
  153. }
  154.  
  155. int korak_prema_lijevo(char** labirint, int redak, int stupac, int *lokacija_pacova_redak, int *lokacija_pacova_stupac, char *smjer){
  156.  
  157.     /* Kad se nalazi u kutu gore-lijevo */
  158.     if((*lokacija_pacova_redak == 0) && (*lokacija_pacova_stupac == 0)){
  159.  
  160.         /* Ako nam je korak ispod slobodan */
  161.         (*lokacija_pacova_redak)++;
  162.         return provjera_korak_ispod_slobodan(labirint, redak, stupac, lokacija_pacova_redak, lokacija_pacova_stupac, smjer);
  163.     }
  164.  
  165.     /* Kad se nalazi u kutu dolje-lijevo */
  166.     else if((*lokacija_pacova_redak == redak-1) && (*lokacija_pacova_stupac == 0)){
  167.  
  168.         /* Ako nam je korak iznad slobodan */
  169.         (*lokacija_pacova_redak)--;
  170.         return provjera_korak_iznad_slobodan(labirint, redak, stupac, lokacija_pacova_redak, lokacija_pacova_stupac, smjer);
  171.     }
  172.  
  173.     /* Kad se ispred nalazi 'x' , '|' ili je zadnji stupac(negdje u sredini) */
  174.     else if((*lokacija_pacova_stupac == 0) || (*(labirint[*lokacija_pacova_redak] + *lokacija_pacova_stupac - 1) == 'x') || (*(labirint[*lokacija_pacova_redak] + *lokacija_pacova_stupac - 1) == '|')){
  175.  
  176.         /* Ako je u koraku ispred '|' nek se "ukopa" */
  177.         if(*(labirint[*lokacija_pacova_redak] + *lokacija_pacova_stupac-1) == '|'){
  178.             *(labirint[*lokacija_pacova_redak] + *lokacija_pacova_stupac) = '*';
  179.             return 0;
  180.         }
  181.  
  182.         /* Ako iznad nije slobodan korak */
  183.         if((*lokacija_pacova_redak == 0) || (*(labirint[*lokacija_pacova_redak-1] + *lokacija_pacova_stupac) == 'x') || (*(labirint[*lokacija_pacova_redak-1] + *lokacija_pacova_stupac) == '-')){
  184.  
  185.             /* Ako je ispod slobodno */
  186.             if((*lokacija_pacova_redak != redak-1) && ((*(labirint[*lokacija_pacova_redak+1] + *lokacija_pacova_stupac) == '.') || (*(labirint[*lokacija_pacova_redak+1] + *lokacija_pacova_stupac) == 'h'))){
  187.                 *smjer = 'f';
  188.                 *(labirint[*lokacija_pacova_redak] + *lokacija_pacova_stupac) = '+';
  189.                 (*lokacija_pacova_redak)++;
  190.                 return 1;
  191.             }
  192.             else{
  193.                 *(labirint[*lokacija_pacova_redak] + *lokacija_pacova_stupac) = '*';
  194.                 return 0;
  195.             }
  196.         }
  197.  
  198.         /* Ako je iznad slobodno */
  199.         else if((*(labirint[*lokacija_pacova_redak-1] + *lokacija_pacova_stupac) == '.') || (*(labirint[*lokacija_pacova_redak-1] + *lokacija_pacova_stupac) == 'h')){
  200.  
  201.             /* Ako dolje nije slobodan korak */
  202.             if((*lokacija_pacova_redak == redak-1) || (*(labirint[*lokacija_pacova_redak+1] + *lokacija_pacova_stupac) == 'x') || (*(labirint[*lokacija_pacova_redak+1] + *lokacija_pacova_stupac) == '-')){
  203.                 *smjer = 'g';
  204.                 *(labirint[*lokacija_pacova_redak] + *lokacija_pacova_stupac) = '+';
  205.                 (*lokacija_pacova_redak)--;
  206.                 return 1;
  207.             }
  208.  
  209.             /* Ukoliko imamo slobodno na obe strane onda nek izracuna smjer */
  210.             else{
  211.                 izracunaj_vertikalno(labirint, redak, stupac, lokacija_pacova_redak, lokacija_pacova_stupac, smjer);
  212.                 return 1;
  213.             }
  214.         }
  215.     }
  216.  
  217.     /* Ako je korak ispred slobodan onda nastavi */
  218.     else if((*(labirint[*lokacija_pacova_redak] + *lokacija_pacova_stupac-1) == '.') || (*(labirint[*lokacija_pacova_redak] + *lokacija_pacova_stupac-1) == 'h')){
  219.         *(labirint[*lokacija_pacova_redak] + *lokacija_pacova_stupac) = '-';
  220.         (*lokacija_pacova_stupac)--;
  221.         return 1;
  222.     }
  223. }
  224.  
  225. int korak_prema_dolje(char** labirint, int redak, int stupac, int *lokacija_pacova_redak, int *lokacija_pacova_stupac, char *smjer){
  226.  
  227.     /* Kad se nalazi u kutu dolje-lijevo */
  228.     if((*lokacija_pacova_redak == redak-1) && (*lokacija_pacova_stupac == 0)){
  229.  
  230.         /* Ako nam je korak desno slobodan */
  231.         (*lokacija_pacova_stupac)++;
  232.         return provjera_korak_desno_slobodno(labirint, redak, stupac, lokacija_pacova_redak, lokacija_pacova_stupac, smjer);
  233.     }
  234.  
  235.     /* Kad se nalazi u kutu dolje-desno */
  236.     else if((*lokacija_pacova_redak == redak-1) && (*lokacija_pacova_stupac == stupac-1)){
  237.  
  238.         /* Ako nam je korak lijevo slobodan */
  239.         (*lokacija_pacova_stupac)--;
  240.         return provjera_korak_lijevo_slobodno(labirint, redak, stupac, lokacija_pacova_redak, lokacija_pacova_stupac, smjer);
  241.     }
  242.  
  243.     /* Kad se ispred nalazi 'x' , '-' ili je zadnji redak(negdje u sredini) */
  244.     else if(((*lokacija_pacova_redak == redak-1)) || (*(labirint[*lokacija_pacova_redak+1] + *lokacija_pacova_stupac) == 'x') || (*(labirint[*lokacija_pacova_redak+1] + *lokacija_pacova_stupac) == '-')){
  245.  
  246.         /* Ako je u koraku ispred '-' nek se "ukopa" */
  247.         if(*(labirint[*lokacija_pacova_redak+1] + *lokacija_pacova_stupac) == '-'){
  248.             *(labirint[*lokacija_pacova_redak] + *lokacija_pacova_stupac) = '*';
  249.             return 0;
  250.         }
  251.  
  252.         /* Ako lijevo nije slobodan korak */
  253.         if((*lokacija_pacova_stupac == 0) || (*(labirint[*lokacija_pacova_redak] + *lokacija_pacova_stupac-1) == 'x') || (*(labirint[*lokacija_pacova_redak] + *lokacija_pacova_stupac-1) == '|')){
  254.  
  255.             /* Ako je desno slobodno */
  256.             if((*(labirint[*lokacija_pacova_redak] + *lokacija_pacova_stupac+1) == '.') || (*(labirint[*lokacija_pacova_redak] + *lokacija_pacova_stupac+1) == 'h')){
  257.                 *smjer = 'd';
  258.                 *(labirint[*lokacija_pacova_redak] + *lokacija_pacova_stupac) = '+';
  259.                 (*lokacija_pacova_stupac)++;
  260.                 return 1;
  261.             }
  262.             else{
  263.                 *(labirint[*lokacija_pacova_redak] + *lokacija_pacova_stupac) = '*';
  264.                 return 0;
  265.             }
  266.         }
  267.  
  268.         /* Ako je lijevo slobodno */
  269.         else if((*(labirint[*lokacija_pacova_redak] + *lokacija_pacova_stupac-1) == '.') || (*(labirint[*lokacija_pacova_redak] + *lokacija_pacova_stupac-1) == 'h')){
  270.  
  271.             /* Ako desno nije slobodan korak */
  272.             if((*(labirint[*lokacija_pacova_redak] + *lokacija_pacova_stupac+1) == 'x') || (*(labirint[*lokacija_pacova_redak] + *lokacija_pacova_stupac+1) == '|')){
  273.                 *smjer = 'l';
  274.                 *(labirint[*lokacija_pacova_redak] + *lokacija_pacova_stupac) = '+';
  275.                 (*lokacija_pacova_stupac)--;
  276.                 return 1;
  277.             }
  278.  
  279.             /* Ukoliko imamo slobodno na obe strane onda nek izracuna smjer */
  280.             else{
  281.                 izracunaj_horizontalno(labirint, redak, stupac, lokacija_pacova_redak, lokacija_pacova_stupac, smjer);
  282.                 return 1;
  283.             }
  284.         }
  285.     }
  286.  
  287.     /* Ako je korak ispred slobodan onda nastavi */
  288.     else if((*(labirint[*lokacija_pacova_redak+1] + *lokacija_pacova_stupac) == '.') || (*(labirint[*lokacija_pacova_redak+1] + *lokacija_pacova_stupac) == 'h')){
  289.         *(labirint[*lokacija_pacova_redak] + *lokacija_pacova_stupac) = '|';
  290.         (*lokacija_pacova_redak)++;
  291.         return 1;
  292.     }
  293. }
  294.  
  295. int korak_prema_gore(char** labirint, int redak, int stupac, int *lokacija_pacova_redak, int *lokacija_pacova_stupac, char *smjer){
  296.  
  297.     if(*lokacija_pacova_redak == 0){
  298.  
  299.         /* Ako lijevo nije slobodan korak */
  300.         if((*lokacija_pacova_stupac == 0) || (*(labirint[*lokacija_pacova_redak] + *lokacija_pacova_stupac-1) == 'x') || (*(labirint[*lokacija_pacova_redak] + *lokacija_pacova_stupac-1) == '|')){
  301.  
  302.             /* Ako je desno slobodno */
  303.             if((*(labirint[*lokacija_pacova_redak] + *lokacija_pacova_stupac+1) == '.') || (*(labirint[*lokacija_pacova_redak] + *lokacija_pacova_stupac+1) == 'h')){
  304.                 *smjer = 'd';
  305.                 *(labirint[*lokacija_pacova_redak] + *lokacija_pacova_stupac) = '+';
  306.                 (*lokacija_pacova_stupac)++;
  307.                 return 1;
  308.             }
  309.             else{
  310.                 *(labirint[*lokacija_pacova_redak] + *lokacija_pacova_stupac) = '*';
  311.                 return 0;
  312.             }
  313.         }
  314.  
  315.         /* Ako je lijevo slobodno */
  316.         else if((*(labirint[*lokacija_pacova_redak] + *lokacija_pacova_stupac-1) == '.') || (*(labirint[*lokacija_pacova_redak] + *lokacija_pacova_stupac-1) == 'h')){
  317.  
  318.             /* Ako desno nije slobodan korak */
  319.             if((*(labirint[*lokacija_pacova_redak] + *lokacija_pacova_stupac+1) == 'x') || (*(labirint[*lokacija_pacova_redak] + *lokacija_pacova_stupac+1) == '|')){
  320.                 *smjer = 'l';
  321.                 *(labirint[*lokacija_pacova_redak] + *lokacija_pacova_stupac) = '+';
  322.                 (*lokacija_pacova_stupac)--;
  323.                 return 1;
  324.             }
  325.  
  326.             /* Ukoliko imamo slobodno na obe strane onda nek izracuna smjer */
  327.             else{
  328.                 izracunaj_horizontalno(labirint, redak, stupac, lokacija_pacova_redak, lokacija_pacova_stupac, smjer);
  329.                 return 1;
  330.             }
  331.         }
  332.     }
  333.  
  334.     /* Kad se nalazi u kutu gore-lijevo */
  335.     else if((*lokacija_pacova_redak == 0) && (*lokacija_pacova_stupac == 0)){
  336.  
  337.         /* Ako nam je korak desno slobodan */
  338.         (*lokacija_pacova_stupac)++;
  339.         return provjera_korak_desno_slobodno(labirint, redak, stupac, lokacija_pacova_redak, lokacija_pacova_stupac, smjer);
  340.     }
  341.  
  342.     /* Kad se nalazi u kutu gore-desno */
  343.     else if((*lokacija_pacova_redak == 0) && (*lokacija_pacova_stupac == stupac-1)){
  344.  
  345.         /* Ako nam je korak lijevo slobodan */
  346.         (*lokacija_pacova_stupac)--;
  347.         return provjera_korak_lijevo_slobodno(labirint, redak, stupac, lokacija_pacova_redak, lokacija_pacova_stupac, smjer);
  348.     }
  349.  
  350.     /* Kad se ispred nalazi 'x' , '-' ili je zadnji redak(negdje u sredini) */
  351.     else if(((*lokacija_pacova_redak == 0)) || (*(labirint[*lokacija_pacova_redak-1] + *lokacija_pacova_stupac) == 'x') || (*(labirint[*lokacija_pacova_redak-1] + *lokacija_pacova_stupac) == '-')){
  352.  
  353.         /* Ako je u koraku ispred '-' nek se "ukopa" */
  354.         if(*(labirint[*lokacija_pacova_redak-1] + *lokacija_pacova_stupac) == '-'){
  355.             *(labirint[*lokacija_pacova_redak] + *lokacija_pacova_stupac) = '*';
  356.             return 0;
  357.         }
  358.  
  359.         /* Ako lijevo nije slobodan korak */
  360.         else if((*lokacija_pacova_stupac == 0) || (*(labirint[*lokacija_pacova_redak] + *lokacija_pacova_stupac-1) == 'x') || (*(labirint[*lokacija_pacova_redak] + *lokacija_pacova_stupac-1) == '|')){
  361.  
  362.             /* Ako je desno slobodno */
  363.             if((*(labirint[*lokacija_pacova_redak] + *lokacija_pacova_stupac+1) == '.') || (*(labirint[*lokacija_pacova_redak] + *lokacija_pacova_stupac+1) == 'h')){
  364.                 *smjer = 'd';
  365.                 *(labirint[*lokacija_pacova_redak] + *lokacija_pacova_stupac) = '+';
  366.                 (*lokacija_pacova_stupac)++;
  367.                 return 1;
  368.             }
  369.             else{
  370.                 *(labirint[*lokacija_pacova_redak] + *lokacija_pacova_stupac) = '*';
  371.                 return 0;
  372.             }
  373.         }
  374.  
  375.         /* Ako je lijevo slobodno */
  376.         else if((*(labirint[*lokacija_pacova_redak] + *lokacija_pacova_stupac-1) == '.') || (*(labirint[*lokacija_pacova_redak] + *lokacija_pacova_stupac-1) == 'h')){
  377.  
  378.             /* Ako desno nije slobodan korak */
  379.             if((*(labirint[*lokacija_pacova_redak] + *lokacija_pacova_stupac+1) == 'x') || (*(labirint[*lokacija_pacova_redak] + *lokacija_pacova_stupac+1) == '|')){
  380.                 *smjer = 'l';
  381.                 *(labirint[*lokacija_pacova_redak] + *lokacija_pacova_stupac) = '+';
  382.                 (*lokacija_pacova_stupac)--;
  383.                 return 1;
  384.             }
  385.  
  386.             /* Ukoliko imamo slobodno na obe strane onda nek izracuna smjer */
  387.             else{
  388.                 izracunaj_horizontalno(labirint, redak, stupac, lokacija_pacova_redak, lokacija_pacova_stupac, smjer);
  389.                 return 1;
  390.             }
  391.         }
  392.     }
  393.  
  394.     /* Ako je korak ispred slobodan onda nastavi */
  395.     else if((*(labirint[*lokacija_pacova_redak-1] + *lokacija_pacova_stupac) == '.') || (*(labirint[*lokacija_pacova_redak-1] + *lokacija_pacova_stupac) == 'h')){
  396.         *(labirint[*lokacija_pacova_redak] + *lokacija_pacova_stupac) = '|';
  397.         (*lokacija_pacova_redak)--;
  398.         return 1;
  399.     }
  400. }
  401.  
  402. int provjera_korak_ispod_slobodan(char** labirint, int redak, int stupac, int *lokacija_pacova_redak, int *lokacija_pacova_stupac, char *smjer){
  403. printf("Provjeri jel ispod korak slobodan\n");
  404.     if((*(labirint[*lokacija_pacova_redak] + *lokacija_pacova_stupac) == '.') || (*(labirint[*lokacija_pacova_redak] + *lokacija_pacova_stupac) == 'h')){
  405.             *(labirint[(*lokacija_pacova_redak-1)] + *lokacija_pacova_stupac) = '+';
  406.             *smjer = 'f';
  407.             return 1;
  408.     }
  409.     else{
  410.         *(labirint[*lokacija_pacova_redak] + *lokacija_pacova_stupac) = '*';
  411.         return 0;
  412.     }
  413. }
  414.  
  415. int provjera_korak_iznad_slobodan(char** labirint, int redak, int stupac, int *lokacija_pacova_redak, int *lokacija_pacova_stupac, char *smjer){
  416. printf("Provjeri jel iznad korak slobodan\n");
  417.     if((*(labirint[*lokacija_pacova_redak] + *lokacija_pacova_stupac) == '.') || (*(labirint[*lokacija_pacova_redak] + *lokacija_pacova_stupac) == 'h')){
  418.             *(labirint[(*lokacija_pacova_redak+1)] + *lokacija_pacova_stupac) = '+';
  419.             *smjer = 'g';
  420.             return 1;
  421.     }
  422.     else{
  423.         *(labirint[*lokacija_pacova_redak] + *lokacija_pacova_stupac) = '*';
  424.         return 0;
  425.     }
  426. }
  427.  
  428. int provjera_korak_desno_slobodno(char** labirint, int redak, int stupac, int *lokacija_pacova_redak, int *lokacija_pacova_stupac, char *smjer){
  429. printf("Provjeri jel desno korak slobodan\n");
  430.  
  431.     if((*(labirint[*lokacija_pacova_redak] + *lokacija_pacova_stupac) == '.') || (*(labirint[*lokacija_pacova_redak] + *lokacija_pacova_stupac) == 'h')){
  432.         *smjer = 'd';
  433.         *(labirint[*lokacija_pacova_redak] + *lokacija_pacova_stupac-1) = '+';
  434.         return 1;
  435.     }
  436.     else{
  437.         *(labirint[*lokacija_pacova_redak] + *lokacija_pacova_stupac) = '*';
  438.         return 0;
  439.     }
  440. }
  441.  
  442. int provjera_korak_lijevo_slobodno(char** labirint, int redak, int stupac, int *lokacija_pacova_redak, int *lokacija_pacova_stupac, char *smjer){
  443. printf("Provjeri jel lijevo korak slobodan\n");
  444.  
  445.     if((*(labirint[*lokacija_pacova_redak] + *lokacija_pacova_stupac) == '.') || (*(labirint[*lokacija_pacova_redak] + *lokacija_pacova_stupac) == 'h')){
  446.         *smjer = 'l';
  447.         *(labirint[*lokacija_pacova_redak] + *lokacija_pacova_stupac+1) = '+';
  448.         return 1;
  449.     }
  450.     else{
  451.         *(labirint[*lokacija_pacova_redak] + *lokacija_pacova_stupac) = '*';
  452.         return 0;
  453.     }
  454. }
  455.  
  456. void izracunaj_vertikalno(char** labirint, int redak, int stupac, int *lokacija_pacova_redak, int *lokacija_pacova_stupac, char *smjer){
  457.  
  458.     printf("Treba izracunati vertikalno\n");
  459.  
  460.     int lijevo = -1, desno = -1, flag = 0;
  461.     int i = *lokacija_pacova_redak-1;
  462.     int j = *lokacija_pacova_stupac;
  463.  
  464.     while(i >= 0){
  465.         if(labirint[i][j] == 'h'){
  466.             flag = 1;
  467.             lijevo = i;
  468.             break;
  469.         }
  470.         i--;
  471.     }
  472.  
  473.     i = *lokacija_pacova_redak+1;
  474.  
  475.     while(i < redak){
  476.         if(labirint[i][j] == 'h'){
  477.             flag = 1;
  478.             desno = i;
  479.             break;
  480.         }
  481.         i++;
  482.     }
  483.  
  484.     if(((*lokacija_pacova_redak - lijevo) <= (desno - *lokacija_pacova_redak) && flag == 1) || (*lokacija_pacova_redak == redak-1)){
  485.  
  486.         *smjer = 'g';
  487.         *(labirint[*lokacija_pacova_redak] + *lokacija_pacova_stupac) = '+';
  488.         (*lokacija_pacova_redak)--;
  489.     }
  490.     else{
  491.         *smjer = 'f';
  492.         *(labirint[*lokacija_pacova_redak] + *lokacija_pacova_stupac) = '+';
  493.         (*lokacija_pacova_redak)++;
  494.     }
  495. }
  496.  
  497. void izracunaj_horizontalno(char** labirint, int redak, int stupac, int *lokacija_pacova_redak, int *lokacija_pacova_stupac, char *smjer){
  498.  
  499.     printf("Treba izracunati horizontalno\n");
  500.  
  501.     int lijevo = 0, desno = 0, flag = 0;
  502.     int i = *lokacija_pacova_redak;
  503.     int j = *lokacija_pacova_stupac-1;
  504.  
  505.     while(j >= 0){
  506.         if(labirint[i][j] == 'h'){
  507.             flag = 1;
  508.             lijevo = j;
  509.             break;
  510.         }
  511.         j--;
  512.     }
  513.  
  514.     j = *lokacija_pacova_stupac+1;
  515.  
  516.     while(j < stupac){
  517.         if(labirint[i][j] == 'h'){
  518.             flag = 1;
  519.             desno = j;
  520.             break;
  521.         }
  522.         j++;
  523.  
  524.     }
  525.  
  526.     if(((*lokacija_pacova_stupac - lijevo) < (*lokacija_pacova_stupac-desno) && flag == 1) || (*lokacija_pacova_stupac == stupac-1)){
  527.  
  528.         *smjer = 'l';
  529.         *(labirint[*lokacija_pacova_redak] + *lokacija_pacova_stupac) = '+';
  530.         (*lokacija_pacova_stupac)--;
  531.     }
  532.     else{
  533.         *smjer = 'd';
  534.         *(labirint[*lokacija_pacova_redak] + *lokacija_pacova_stupac) = '+';
  535.         (*lokacija_pacova_stupac)++;
  536.     }
  537. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement