Advertisement
Es7evam

SEG FAULT D:::

May 3rd, 2016
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 24.94 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5.  
  6. int l, c,luzfound = 0, score = 0, steps = 0, arrow = 1,sense = 0; // a luz nao foi encontrada ainda, vai ser mudado para 1 quando for.
  7.  
  8. typedef struct celula {
  9.     int tipo;
  10.     int cheiroFraco;
  11.     int cheiroMedio;
  12.     int cheiroForte;
  13.     int brisaFraca;
  14.     int brisaMedia;
  15.     int brisaForte;
  16.     int safe; //safe - exclusivo para a IA - 1 - Totalmente salvo; 0 - Não foi marcado
  17.     int visited; //IA only (já foi visitado = 1)
  18.     int monstro; //IA only - monstro (se >= 3 é monstro)
  19.     int abismo; //IA only - abismo (se >= 3 é abismo)
  20. } celula;
  21.  
  22.  
  23. int walk(char dir, int i, int j){ //passa a direcao para andar (w,a,s,d) , a posicao i (linhas) e j (colunas) e o numero de passos.
  24.     steps--;
  25.     score--;
  26.  
  27.     if (dir == 'w'){
  28.         i--;
  29.     }
  30.     if (dir == 's'){
  31.         i++;
  32.     }
  33.     if (dir == 'a'){
  34.         j--;
  35.     }
  36.     if (dir == 'd'){
  37.         j++;
  38.     }
  39.     if(i < 0){
  40.         printf("Movimento invalido!\n");
  41.         i++;
  42.     }
  43.     if(j < 0){
  44.         printf("Movimento invalido!\n");
  45.         j++;
  46.     }
  47.     if(i > l-1){
  48.         printf("Movimento invalido!\n");
  49.         i--;
  50.     }
  51.     if(j > c-1){
  52.         printf("Movimento invalido!\n");
  53.         j--;
  54.     }
  55.     if(dir == 'w' || dir == 's') return i;
  56.     if(dir == 'a' || dir == 'd') return j;
  57. }
  58.  
  59.  
  60. int sensations(int i, int j, celula ** M){ //sensações no local
  61.     M[i][j].visited = 1;
  62.     if (i == 0 && j == 0 && luzfound == 1){
  63.         printf("Voce saiu do mundo de Wumpus a salvo!\n +1000 Pontos!!!\n");
  64.         score += 1000;
  65.         steps = 0;
  66.         sense++;
  67.         return 0;
  68.     }
  69.     if (M[i][j].tipo == 1){
  70.         printf("Voce encontrou um abismo!\n");
  71.         printf(" -1000 Pontos!\n");
  72.         score -= 1000;
  73.         steps = 0;
  74.         i = j = 0; //volta para o inicio
  75.         sense++;
  76.         return 0;
  77.     }
  78.     if (M[i][j].tipo == 2){
  79.         printf("Voce encontrou um monstro!\n -10000 Pontos!\n");
  80.         score -=10000;
  81.         steps = 0;
  82.         i = j = 0; //volta para o inicio
  83.         sense++;
  84.         return 0;
  85.     }
  86.     if (M[i][j].tipo == 3){
  87.         printf("Parabens, voce encontrou a luz\n +1000 Pontos!!!\n");
  88.         score += 1000;
  89.         luzfound = 1;
  90.         M[i][j].tipo = 0;
  91.         sense++;
  92.         return 0;
  93.     }
  94.     //imprimindo as sensações
  95.     int k;
  96.     for(k = 0;k<M[i][j].cheiroFraco;k++){
  97.         printf("Você sente um cheiro fraco\n");
  98.         sense++;
  99.     }
  100.     for(k = 0;k<M[i][j].cheiroMedio;k++){
  101.         printf("Você sente um cheiro médio\n");
  102.         sense++;
  103.     }
  104.     for(k = 0;k<M[i][j].cheiroForte;k++){
  105.         printf("Você sente um cheiro forte\n");
  106.         sense++;
  107.     }
  108.     for(k = 0;k<M[i][j].brisaFraca;k++){
  109.         printf("Você sente uma brisa fraca\n");
  110.         sense++;
  111.     }
  112.     for(k = 0;k<M[i][j].brisaMedia;k++){
  113.         printf("Você sente uma brisa média\n");
  114.         sense++;
  115.     }
  116.     for(k = 0;k<M[i][j].brisaForte;k++){
  117.         printf("Você sente uma brisa forte\n");
  118.         sense++;
  119.     }
  120.     return 0;
  121. }
  122.  
  123. int shoot(int i, int j, celula ** M, char side){ //retorna 0 se errar ou for inválido, 1 se acertar. - Função flecha
  124.     if (arrow == 0){
  125.         printf("Você já gastou a sua flecha!\n");
  126.         return 0;
  127.     }
  128.     arrow--;
  129.     if (side == 'w'){
  130.         i--;
  131.     }
  132.     if (side == 's'){
  133.         i++;
  134.     }
  135.     if (side == 'a'){
  136.         j--;
  137.     }
  138.     if (side == 'd'){
  139.         j++;
  140.     }
  141.     if (i < 0 || j < 0 || i > l-1 || j > c-1) return 0;
  142.     if (M[i][j].tipo == 2){
  143.         printf("Você matou Wumpus!\n +10000 Pontos !!!\n");
  144.         M[i][j].tipo = 0;
  145.         return 1;
  146.     }else{
  147.         printf("Errou!\n");
  148.         return 0;
  149.     }
  150.  
  151. }
  152.  
  153. int askwhat(int i, int j, celula ** M, char side){ //função de pergunta
  154.     score--;
  155.     if (side == 'w'){
  156.         i--;
  157.     }
  158.     if (side == 's'){
  159.         i++;
  160.     }
  161.     if (side == 'a'){
  162.         j--;
  163.     }
  164.     if (side == 'd'){
  165.         j++;
  166.     }
  167.     if (i < 0 || j < 0 || i > l-1 || j > c-1){
  168.         printf("Você encontrou uma parede\n");
  169.         return 0;
  170.     }
  171.     sensations(i, j, M);
  172. }
  173.  
  174. // -------------------------Funções exclusivas para a IA----------------------------//
  175.  
  176. int upfirst(int i, int j, celula ** M){ //setando para cima do player
  177.     if (i < 0 || j < 0 || i > l-1 || j > c-1) //se for inválido
  178.         return 0;
  179.     M[i][j].safe = 1; //uponly
  180.     if (i >= 1 && j>= 0 && i <= l-1 && j <= c-1){
  181.         M[i-1][j].safe = 1; //upup
  182.         if (i >= 2 && j >= 0){
  183.             M[i-2][j].safe = 1; //upupup
  184.         }
  185.         if (i >= 1 && j >= 1){
  186.             M[i-1][j-1].safe = 1; //upupleft
  187.         }
  188.         if (i >= 1 && j <= c-2){
  189.             M[i-1][j+1].safe = 1; //upupright
  190.         }
  191.     }
  192.     if (i < 0 || j < 0 || i > l-1 || j > c-2){
  193.  
  194.     }else{
  195.         M[i][j+1].safe = 1; //upright
  196.         if(i >= 0 && j <= c-3){
  197.             M[i][j+2].safe = 1; //uprightright
  198.         }
  199.     }
  200.     if (i < 0 || j < 1 || i > l-1 || j > c-1){
  201.     }else{
  202.         M[i][j-1].safe = 1; //upleft
  203.         if(i >= 0 && j >= 2){
  204.             M[i][j-2].safe = 1; //upleftleft
  205.         }
  206.     }
  207.     return 0;
  208. }
  209.  
  210. int leftfirst(int i, int j, celula ** M){
  211.     if (i < 0 || j < 0 || i > l-1 || j > c-1){
  212.         return 0;
  213.     }
  214.     M[i][j].safe = 1;//left
  215.     if (j-1 >= 0){
  216.         M[i][j-1].safe = 1; //leftleft
  217.         if(j-2 >= 0){
  218.             M[i][j-2].safe = 1; //leftleftleft
  219.         }
  220.     }
  221. }
  222. int rightfirst(int i, int j, celula ** M){
  223.     if (i < 0 || j < 0 || i > l-1 || j > c-1){
  224.         return 0;
  225.     }
  226.     M[i][j].safe = 1;//right
  227.     if (j+1 <= c-1){
  228.         M[i][j+1].safe = 1; //rightright
  229.         if(j+2 <= c-1){
  230.             M[i][j+2].safe = 1; //rightrightright
  231.         }
  232.     }
  233.     return 0;
  234. }
  235. int downfirst(int i, int j, celula ** M){
  236.     if (i < 0 || j < 0 || i > l-1 || j > c-1)
  237.         return 0;
  238.     M[i][j].safe = 1; //downonly
  239.     if (i+1 <= l-1 && j <= c-1){
  240.         M[i+1][j].safe = 1; //downdown
  241.         if (i+2 <= l-1){
  242.             M[i+2][j].safe = 1; //downdowndown
  243.         }
  244.         if (i+1 <= l-1 && j >= 1){
  245.             M[i+1][j-1].safe = 1; //downdownleft
  246.         }
  247.         if (i >= 1 && j <= c-2){
  248.             M[i-1][j+1].safe = 1; //downdownright
  249.         }
  250.     }
  251.     if(j+1 <= c-1){
  252.         M[i][j+1].safe = 1; //downright
  253.         if(j+2 <= c){
  254.             M[i][j+2].safe = 1; //downrightright
  255.         }
  256.     }
  257.     if(j-1 >= 0){
  258.         M[i][j-1].safe = 1; //downleft
  259.         if(j-2 >= 0){
  260.             M[i][j-2].safe = 1; //downleftleft
  261.         }
  262.     }
  263.     return 0;
  264.  
  265. }
  266.  
  267.  
  268. int upsecond(int i, int j, celula ** M){ //setando para cima do player
  269.     if (i < 0 || j < 0 || i > l-1 || j > c-1)
  270.         return 0;
  271.     M[i][j].safe = 1; //uponly
  272.     if (i >= 1 && j>= 0 && i <= l-1 && j <= c-1){
  273.         M[i-1][j].safe = 1; //upup
  274.     }
  275.     if (i < 0 || j < 0 || i > l-1 || j > c-2){
  276.     }else{
  277.         M[i][j+1].safe = 1; //upright
  278.     }
  279.     if (i < 0 || j < 1 || i > l-1 || j > c-1){
  280.     }else{
  281.         M[i][j-1].safe = 1; //upleft
  282.     }
  283.     return 0;
  284. }
  285.  
  286. int leftsecond(int i, int j, celula ** M){
  287.     if (i < 0 || j < 0 || i > l-1 || j > c-1){
  288.         return 0;
  289.     }
  290.     M[i][j].safe = 1;//left
  291.     if (j-1 >= 0){
  292.         M[i][j-1].safe = 1; //leftleft
  293.     }
  294. }
  295. int rightsecond(int i, int j, celula ** M){
  296.     if (i < 0 || j < 0 || i > l-1 || j > c-1){
  297.         return 0;
  298.     }
  299.     M[i][j].safe = 1;//right
  300.     if (j+1 <= c-1){
  301.         M[i][j+1].safe = 1; //rightright
  302.     }
  303.     return 0;
  304. }
  305. int downsecond(int i, int j, celula ** M){
  306.     if (i < 0 || j < 0 || i > l-1 || j > c-1)
  307.         return 0;
  308.     M[i][j].safe = 1; //downonly
  309.     if (i+1 <= l-1 && j <= c-1){
  310.         M[i+1][j].safe = 1; //downdown
  311.     }
  312.     if(j+1 <= c-1){
  313.         M[i][j+1].safe = 1; //downright
  314.     }
  315.     if(j-1 >= 0){
  316.         M[i][j-1].safe = 1; //downleft
  317.     }
  318.     return 0;
  319.  
  320. }
  321.  
  322. void marksafe1(int i, int j, celula ** M){ //caso não tenha nenhuma sensação
  323.     M[i][j].safe = 1;
  324.     upfirst(i-1, j ,M);
  325.     downfirst(i+1, j ,M);
  326.     leftfirst(i, j-1, M);
  327.     rightfirst(i, j+1, M);
  328. }
  329.  
  330. void marksafe2(int i, int j, celula ** M){ //somente sensações fracas
  331.     M[i][j].safe = 1;
  332.     downsecond(i+1, j ,M);
  333.     rightsecond(i, j+1, M);
  334.     leftsecond(i, j-1, M);
  335.     upsecond(i-1, j ,M);
  336. }
  337.  
  338. void marksafe3(int i, int j, celula ** M){ //somente sensações médias - talvez desnecessário
  339.     if(i>0)
  340.         M[i-1][j].safe = 1;
  341.     if(i<l-1)
  342.         M[i+1][j].safe = 1;
  343.     if(j>0)
  344.         M[i][j-1].safe = 1;
  345.     if(j<c-1)
  346.         M[i][j+1].safe = 1;
  347. }
  348.  
  349. int monstroperto(int i, int j, celula ** M){
  350.  
  351.     M[i][j].visited = 1;
  352.     if(i>0){    
  353.         M[i-1][j].monstro++;
  354.         M[i-1][j].safe = 2;
  355.     }
  356.     if(j>0){
  357.         M[i][j-1].monstro++;
  358.         M[i][j-1].safe = 2;
  359.     }
  360.     if(i<l-1){
  361.         M[i+1][j].monstro++;
  362.         M[i+1][j].safe = 2;
  363.     }
  364.     if(l<c-1){
  365.         M[i][j+1].monstro++;
  366.         M[i][j+1].safe = 2;
  367.     }
  368.     return 0;
  369. }
  370.  
  371. int abismoperto(int i, int j, celula ** M){
  372.     if(M[i][j].visited = 1){
  373.         return 0;
  374.     }
  375.     M[i][j].visited = 1;
  376.     if(i>0){    
  377.         M[i-1][j].abismo++;
  378.         M[i-1][j].safe = 2;
  379.     }
  380.     if(j>0){
  381.         M[i][j-1].abismo++;
  382.         M[i][j-1].safe = 2;
  383.     }
  384.     if(i<l-1){
  385.         M[i+1][j].abismo++;
  386.         M[i+1][j].safe = 2;
  387.     }
  388.     if(l<c-1){
  389.         M[i][j+1].abismo++;
  390.         M[i][j+1].safe = 2;
  391.     }
  392.     return 0;
  393. }
  394.  
  395. void killmonstro(int i, int j, celula ** M){
  396.     char side;
  397.     int go = 0;
  398.     if(i>0){    
  399.         if(M[i-1][j].monstro >= 3){
  400.             side = 'w';
  401.             go++;
  402.         }
  403.     }
  404.     if(j>0){
  405.         if(M[i][j-1].monstro >= 3){
  406.             side = 'a';
  407.             go++;
  408.         }
  409.     }
  410.     if(i<l-1){
  411.         if(M[i+1][j].monstro >= 3){
  412.             side = 's';
  413.             go++;
  414.         }
  415.     }
  416.     if(l<c-1){
  417.         if(M[i][j+1].monstro >= 3){
  418.             side = 'd';
  419.             go++;
  420.         }
  421.     }
  422.     if(go != 0){
  423.         shoot(i,j,M,side);
  424.     }
  425.  
  426. }
  427.  
  428. int safemarking(int i, int j, celula ** M){
  429.     if(M[i][j].visited == 1){
  430.         return 0;
  431.     }
  432.     printf("-----------------marcação sendo feita aqui coordenada {%d, %d}-------------\n", i, j);
  433. /*    if(sense == 0){
  434.         marksafe1(i,j,M);
  435.     }
  436.     if(sense != 0 && M[i][j].brisaMedia == 0 && M[i][j].brisaForte == 0 && M[i][j].cheiroMedio == 0 && M[i][j].cheiroForte == 0){
  437.         marksafe2(i,j,M);
  438.     }
  439.     if(sense != 0 && M[i][j].brisaFraca == 0 && M[i][j].brisaForte == 0 && M[i][j].cheiroFraco == 0 && M[i][j].cheiroForte == 0){
  440.         marksafe3(i,j,M);
  441.     }*/
  442.     if(M[i][j].cheiroForte == 1){
  443.         monstroperto(i,j,M); //monstro perto
  444.         killmonstro(i,j,M);
  445.     }
  446.     if(M[i][j].brisaForte >= 1){
  447.         abismoperto(i,j,M); //vai falar que tem chance de abismo perto
  448.     }
  449.     return 0;
  450. }
  451.  
  452. // ----------------------------Fim funções IA---------------------------------//
  453.  
  454.  
  455. int main() {
  456.     int i, j, k = 0;
  457.     int begin, end;
  458.     char side, dir;
  459.  
  460.  //-----Função de leitura--------//
  461.     FILE* fp;
  462.     char* mat_content; //vetor que tem a leitura
  463.  
  464.     celula **M;
  465.  
  466.     fp = fopen("matriz.txt", "r");
  467.    
  468.     if (fp==NULL)
  469.         return -1;
  470.  
  471.     //----Fim leitura arquivo----//
  472.     //Próximas 2 linhas scanf do arquivo
  473.     fscanf(fp, "%d", &l);
  474.     fscanf(fp, "%d", &c);
  475.     steps = l*c;
  476.  
  477.     //-------Declaração da matriz ------//
  478.     M = (celula **)calloc((l), sizeof(celula*)); //declara setando como 0    
  479.  
  480.     for(i=0; i<l; i++)
  481.        M[i] = (celula *)calloc(c, sizeof(celula)); //declara setando como 0
  482.  
  483.     begin = ftell(fp); //começo após os números (é um \n)
  484.  
  485.     fseek(fp, 0, SEEK_END); //vai até o fim
  486.  
  487.     end = ftell(fp); //conta a posição do fim
  488.  
  489.     fseek(fp, begin+1, SEEK_SET); //começa a setar à partir do begin
  490.  
  491.     mat_content = (char*)malloc((end-begin)*sizeof(char)); //alocação
  492.  
  493.     fread(mat_content,sizeof(char), (end-begin), fp); //read
  494.  
  495.     //-------Fim Declaração da Matriz -------//
  496.     //------Atribuição de cada tipo à struct-------//
  497.  
  498.     for(i=0; i<l; i++){
  499.         for(j=0; j<c; j++){
  500.             while(k < (end - begin) && mat_content[k] != '\n'){
  501.                 if (mat_content[k] == 'A')
  502.                     M[i][j].tipo = 1; // Abismo é tipo 1
  503.                 if (mat_content[k] == 'M')
  504.                     M[i][j].tipo = 2; // Monstro é tipo 2
  505.                 if (mat_content[k] == 'L')
  506.                     M[i][j].tipo = 3; // Luz é tipo 3
  507.                 if (mat_content[k] == 'B')
  508.                     M[i][j].brisaForte++; //é B
  509.                 if (mat_content[k] == 'C')
  510.                     M[i][j].cheiroForte++; //é C
  511.                 if (mat_content[k] == 'b'){
  512.                         if(mat_content[k+1] == 'B'){
  513.                             M[i][j].brisaMedia++; //é bB
  514.                             k++;
  515.                         }else{
  516.                             M[i][j].brisaFraca++; //é b
  517.                         }
  518.                 }
  519.                 if (mat_content[k] == 'c'){
  520.                         if(mat_content[k+1] == 'C'){
  521.                             M[i][j].cheiroMedio++; //é cC
  522.                             k++;
  523.                         }else{
  524.                             M[i][j].cheiroFraco++; //é c
  525.                         }
  526.                 }
  527.                 k++;
  528.             }//Duas linhas  abaixo testando o scan
  529.             k++;
  530.             //printf("\ni = %d, j = %d k = %d - [%d %d %d %d %d %d %d]", i, j, k, M[i][j].tipo, M[i][j].brisaFraca, M[i][j].brisaMedia, M[i][j].brisaForte, M[i][j].cheiroFraco, M[i][j].cheiroMedio, M[i][j].cheiroForte);
  531.         }
  532.     }
  533.     //--------Fim da Atribuição-----------//
  534.  
  535.  
  536.     i = 0;
  537.     j = 0;
  538.     system("clear");
  539.     // -------------------------------Switch Type of Player-------------------------------//
  540.     printf("Digite 1 caso queira jogar, digite 0 caso queira ver a IA jogando.\n");
  541.     int playermode = 1;
  542.     scanf("%d%*c", &playermode);
  543.  
  544.     //--------------------------------------Player Mode -------------------------------------------//
  545.     printf("\nVocê se encontra no mundo de wumpus, o labirinto do terrível monstro!\n\n");
  546.     printf("O labirinto consiste de abismos, a luz e o monstro.\n\n\tO seu objetivo é desviar dos abismos");
  547.     printf(", matar o monstro, pegar a luz e voltar para a coordenada {0, 0} para sair à salvo, tudo isso enquanto toma cuidado para não se cansar!\n");
  548.     printf("\n\nControles:\n");
  549.     printf("w - Andar para cima\n");
  550.     printf("s - Andar para baixo\n");
  551.     printf("d - Andar para a direita\n");
  552.     printf("a - Andar para a esquerda\n");
  553.     printf("e - Atirar flecha\n");
  554.     printf("q - Perguntar\n");
  555.     printf("c - Acessar o menu de controles\n\n");
  556.     printf("Você está na coordenada {0, 0} e o tamanho do mapa é %d linhas x %d colunas\n", l, c);
  557.     printf("Ajuste o tamanho do terminal até que as linhas abaixo fiquem continuas\n");
  558.     if(playermode == 1){
  559.         while (steps > 0){
  560.             sense = 0;
  561.             printf("--------------------------------------------------------------------------------");
  562.             printf("Para que lado quer andar? \n");
  563.             scanf("%c%*c",&dir);
  564.             system("clear");
  565.             if(dir == 'c'){
  566.                 printf("\n\nControles:\n");
  567.                 printf("w - Andar para cima\n");
  568.                 printf("s - Andar para baixo\n");
  569.                 printf("d - Andar para a direita\n");
  570.                 printf("a - Andar para a esquerda\n");
  571.                 printf("e - Atirar flecha\n");
  572.                 printf("q - Perguntar\n");
  573.                 printf("c - Acessa o menu de controles\n");
  574.             }
  575.             if(dir == 'q'){
  576.                 printf("Para que lado você quer perguntar?\n");
  577.                 scanf("%c%*c", &side);
  578.                 printf("No quadrado perguntado ");
  579.                 askwhat(i, j, M, side);
  580.             }
  581.             if(dir == 'e'){ //q é o modo shoot
  582.                 printf("Digite o lado para qual quer atirar\n");
  583.                 scanf("%c%*c", &side);
  584.                 if(shoot(i, j, M, side) == 1){
  585.                     score += 10000;
  586.                 }
  587.                 printf("\nPara que lado quer andar? \n");
  588.                 scanf("%c%*c", &dir);
  589.                 system("clear");
  590.             }
  591.             if(dir == 'w' || dir == 's'){
  592.                 i = walk(dir, i, j);
  593.             }
  594.             if(dir == 'a' || dir == 'd'){  
  595.                 j = walk(dir, i, j);
  596.             }
  597.             printf("\nSua coordenada atual é {%d, %d}\n", i, j);
  598.             printf("Você tem %d passos restantes\n", steps);
  599.             printf("Sua pontuação atual é %d\n\n\n", score);
  600.             sensations(i, j, M);
  601.             if(sense == 0){
  602.                 printf("Você experimenta um vazio de sensações...\n");
  603.             }
  604.             printf("--------------------------------------------------------------------------------");
  605.         }
  606.         printf("Você chegou ao fim do jogo, a sua pontuação é: %d\n\n\n", score);
  607.     }
  608.     //----------------------------- Automatic Mode -------------------------------------//
  609.    
  610.     if(playermode == 0){ //
  611.         int direction = 0;
  612.         while(steps > 0){
  613.             printf("--------------------------------------------------------------------------------");
  614.             printf("\nA coordenada atual é {%d, %d}\n", i, j);
  615.             printf("A IA tem %d passos restantes\n", steps);
  616.             printf("A pontuação atual é %d\n", score);
  617.             printf("--------------------------------------------------------------------------------");
  618.  
  619.             sense = 0;
  620.             printf("coordenada {%d;%d}", i, j);
  621.             sensations(i,j, M); //pega as sensações para a IA
  622.             safemarking(i,j,M); //marca safe, deve ser colocado após cada passo juntamente com um sense = 0 e sensations
  623.             if(i == 0){ //walk down
  624.                 if(M[i+1][j].safe != 0){
  625.                     dir = 's'; //para baixo
  626.                     i = walk(dir, i, j); //isso é uma jogada, pro caso de i ser 0, é desvantajoso
  627.                     sensations(i, j, M);
  628.                     safemarking(i,j,M);
  629.                 }
  630.             }
  631.             if(i == l-1){ //walk up
  632.                 if(M[i-1][j].safe != 0){
  633.                     dir = 'w';
  634.                     i = walk(dir, i, j); //isso é uma jogada, pro caso de i ser l-1, é desvantajoso
  635.                     sensations(i, j, M);
  636.                     safemarking(i,j,M);
  637.                 }
  638.             }
  639.             if(M[i-1][j].safe != 0 && M[i-1][j].visited != 1){ //perguntar para cima
  640.                     side = 'w';
  641.                     sense = 0;
  642.                     askwhat(i,j, M, side);
  643.                     safemarking(i,j,M);
  644.             }
  645.             printf("\n\n DEBUG 2.0\n\n");
  646.             if(M[i+1][j].safe != 0){ //perguntar para baixo
  647.                 side = 's';
  648.                 if (i<l-1){
  649.                     if (M[i+1][j].visited != 1){
  650.                         sense = 0;
  651.                         askwhat(i,j, M, side);
  652.                         safemarking(i,j,M);
  653.                     }
  654.                 }
  655.             }
  656.             if(j == c-1 && i != l-1){ //virando o lado, andando 2 pra baixo (caso chegue no ponto max à direita)
  657.                 direction = 1;
  658.                 dir = 's';
  659.                 if (M[i+1][j].safe != 0){ //anda pra baixo
  660.                     i = walk(dir, i, j);
  661.                     sense = 0;
  662.                     sensations(i,j,M);
  663.                     safemarking(i,j,M);
  664.                 }
  665.                 if(i<l-1){
  666.                     if (M[i+1][j].safe != 0){
  667.                         i = walk(dir, i, j);
  668.                         sense = 0;
  669.                         sensations(i,j,M);
  670.                         safemarking(i,j,M);
  671.                 }
  672.                 }else{ //dê uma voltinha pela esquerda caso n seja safe e pergunte à direita
  673.                     if(M[i][j-1].safe != 0){
  674.                         dir = 'a';
  675.                         j = walk(dir, i, j);
  676.                         sense = 0;
  677.                         sensations(i,j,M);
  678.                         safemarking(i,j,M);
  679.                         if (M[i+1][j].safe != 0){
  680.                             dir = 's';
  681.                             i = walk(dir, i, j);
  682.                             sense = 0;
  683.                             sensations(i,j,M);
  684.                             safemarking(i,j,M);
  685.                         }
  686.                         if (M[i+1][j].safe != 0){
  687.                             dir = 's';
  688.                             i = walk(dir, i, j);
  689.                             sense = 0;
  690.                             sensations(i,j,M);
  691.                             safemarking(i,j,M);
  692.                         }
  693.                         if(M[i][j+1].safe != 0){
  694.                             sense = 0;
  695.                             side = 'd';
  696.                             askwhat(i,j, M, side);
  697.                         }
  698.                     }
  699.                 }
  700.             }
  701.             if(direction == 0){
  702.                 if(j<c-1){
  703.                     dir = 'd';
  704.                     if (M[i][j+1].safe != 0){ //------------------------------falta fazer voltinha(else)
  705.                         j = walk(dir, i, j);
  706.                         sense = 0;
  707.                         sensations(i,j,M);
  708.                         safemarking(i,j,M);
  709.                     }else{ //voltinha
  710.                         if(M[i+1][j].safe != 0){ //up voltinha
  711.                             dir = 'w';
  712.                             i = walk(dir, i, j);
  713.                             sense = 0;
  714.                             sensations(i,j,M);
  715.                             safemarking(i,j,M);
  716.                             if(j<c-1){
  717.                                 if (M[i][j+1].safe != 0){ //double left voltinha
  718.                                     dir = 'd';
  719.                                     j = walk(dir, i, j);
  720.                                     sense = 0;
  721.                                     sensations(i,j,M);
  722.                                     safemarking(i,j,M);
  723.                                 }
  724.                             }
  725.                             if(j<c-1){
  726.                                 if (M[i][j+1].safe != 0){
  727.                                     dir = 'd';
  728.                                     j = walk(dir, i, j);
  729.                                     sense = 0;
  730.                                     sensations(i,j,M);
  731.                                     safemarking(i,j,M);
  732.                                 }                       // ----- Fim double left -----//
  733.                             }
  734.                             if(M[i-1][j].safe != 0){
  735.                                 dir = 's';
  736.                                 i = walk(dir, i, j);
  737.                                 sense = 0;
  738.                                 sensations(i,j,M);
  739.                                 safemarking(i,j,M);
  740.                             }
  741.                         }
  742.                     }
  743.                 }
  744.             }
  745.             if(direction == 1){ //andar para a esquerda
  746.                 if(j>0){
  747.                     dir = 'a';
  748.                     if (M[i][j-1].safe != 0){ //------------------------------falta fazer voltinha(else)
  749.                         j = walk(dir, i, j);
  750.                         sense = 0;
  751.                         sensations(i,j,M);
  752.                         safemarking(i,j,M);
  753.                     }else{ //voltinha
  754.                         if(M[i+1][j].safe != 0){ //up voltinha
  755.                             dir = 'w';
  756.                             i = walk(dir, i, j);
  757.                             sense = 0;
  758.                             sensations(i,j,M);
  759.                             safemarking(i,j,M);
  760.                             if(j<c-1){
  761.                                 if (M[i][j-1].safe != 0){ //double right voltinha
  762.                                     dir = 'a';
  763.                                     j = walk(dir, i, j);
  764.                                     sense = 0;
  765.                                     sensations(i,j,M);
  766.                                     safemarking(i,j,M);
  767.                                 }
  768.                             }
  769.                             if(j<c-1){
  770.                                 if (M[i][j-1].safe != 0){
  771.                                     dir = 'a';
  772.                                     j = walk(dir, i, j);
  773.                                     sense = 0;
  774.                                     sensations(i,j,M);
  775.                                     safemarking(i,j,M);
  776.                                 }                       // ----- Fim double left -----//
  777.                             }
  778.                             if(M[i-1][j].safe != 0){
  779.                                 dir = 's';
  780.                                 i = walk(dir, i, j);
  781.                                 sense = 0;
  782.                                 sensations(i,j,M);
  783.                                 safemarking(i,j,M);
  784.                             }
  785.                         }
  786.                     }
  787.                 }
  788.             }
  789.         }
  790.     }
  791.        
  792.  
  793.  
  794.     // --------------------------- Fim automatic mode ------------------------//
  795.  
  796.  
  797.     //--------- Dando free no programa--------/
  798.  
  799.     fclose(fp);
  800.  
  801.     for(i=0; i<l; i++)
  802.         free(M[i]);
  803.  
  804.     free(M);
  805.  
  806.     free(mat_content);
  807.  
  808.     //--------- Fim do free ----------//
  809.  
  810.     return 0;
  811. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement