Advertisement
Es7evam

Untitled

Apr 29th, 2016
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.55 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 = 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. } celula;
  17.  
  18. 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.
  19.     steps--;
  20.     score--;
  21.     if (dir == 'w'){
  22.         i--;
  23.     }
  24.     if (dir == 's'){
  25.         i++;
  26.     }
  27.     if (dir == 'a'){
  28.         j--;
  29.     }
  30.     if (dir == 'd'){
  31.         j++;
  32.     }
  33.     if(i < 0){
  34.         printf("Movimento invalido!\n");
  35.         i++;
  36.     }
  37.     if(j < 0){
  38.         printf("Movimento invalido!\n");
  39.         j++;
  40.     }
  41.     if(i > l-1){
  42.         printf("Movimento invalido!\n");
  43.         i--;
  44.     }
  45.     if(j > c-1){
  46.         printf("Movimento invalido!\n");
  47.         j--;
  48.     }
  49.     if(dir == 'w' || dir == 's') return i;
  50.     if(dir == 'a' || dir == 'd') return j;
  51. }
  52.  
  53.  
  54. void sensations(int i, int j, celula ** M){ //sensações no local
  55.     if (i == 0 && j == 0 && luzfound == 1){
  56.         printf("Voce saiu do mundo de Wumpus a salvo!\n");
  57.         score += 1000;
  58.     }
  59.     if (M[i][j].tipo == 1){
  60.         printf("Voce encontrou um abismo!\n");
  61.         score -= 1000;
  62.         steps = 0;
  63.         i = j = 0; //volta para o inicio
  64.     }
  65.     if (M[i][j].tipo == 2){
  66.         printf("Voce encontrou um monstro!\n");
  67.         score -=10000;
  68.         steps = 0;
  69.         i = j = 0; //volta para o inicio
  70.     }
  71.     if (M[i][j].tipo == 3){
  72.         printf("Parabens, voce encontrou a luz\n");
  73.         score += 1000;
  74.         luzfound = 1;
  75.     }
  76.     //imprimindo as sensações
  77.     int k;
  78.     for(k = 0;k<M[i][j].cheiroFraco;k++){
  79.         printf("Você sente um cheiro fraco\n");
  80.     }
  81.     for(k = 0;k<M[i][j].cheiroMedio;k++){
  82.         printf("Você sente um cheiro médio\n");
  83.     }
  84.     for(k = 0;k<M[i][j].cheiroForte;k++){
  85.         printf("Você sente um cheiro forte\n");
  86.     }
  87.     for(k = 0;k<M[i][j].brisaFraca;k++){
  88.         printf("Você sente uma brisa fraca\n");
  89.     }
  90.     for(k = 0;k<M[i][j].brisaMedia;k++){
  91.         printf("Você sente uma brisa média\n");
  92.     }
  93.     for(k = 0;k<M[i][j].brisaForte;k++){
  94.         printf("Você sente uma brisa forte\n");
  95.     }
  96. }
  97.  
  98. int shoot(int i, int j, celula ** M, char side){ //retorna 0 se errar ou for inválido, 1 se acertar. - Função flecha
  99.     if (arrow == 0){
  100.         printf("Você já gastou a sua flecha!\n");
  101.         return 0;
  102.     }
  103.     arrow--;
  104.     if (side == 'w'){
  105.         i--;
  106.     }
  107.     if (side == 's'){
  108.         i++;
  109.     }
  110.     if (side == 'a'){
  111.         j--;
  112.     }
  113.     if (side == 'd'){
  114.         j++;
  115.     }
  116.     if (i < 0 || j < 0 || i > l-1 || j > c-1) return 0;
  117.     if (M[i][j].tipo == 2){
  118.         printf("Você matou Wumpus!\n");
  119.         return 1;
  120.     }else{
  121.         printf("Errou!\n");
  122.         return 0;
  123.     }
  124.  
  125. }
  126.  
  127. int askwhat(int i, int j, celula ** M, char side){ //função de pergunta
  128.     score--;
  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){
  142.         printf("Você encontrou uma parede\n");
  143.         return 0;
  144.     }
  145.     sensations(i, j, M);
  146. }
  147.  
  148.  
  149. int main() {
  150.     int i, j, k = 0;
  151.     int begin, end, l = 0, c = 0;
  152.     char side, dir;
  153.  
  154.  //-----Função de leitura--------//
  155.     FILE* fp;
  156.     char* mat_content; //vetor que tem a leitura
  157.  
  158.     celula **M;
  159.  
  160.     fp = fopen("matriz.txt", "r");
  161.    
  162.     if (fp==NULL)
  163.         return -1;
  164.  
  165.     //----Fim leitura arquivo----//
  166.     //Próximas 2 linhas scanf do arquivo
  167.     fscanf(fp, "%d", &l);
  168.     fscanf(fp, "%d", &c);
  169.     steps = l*c;
  170.  
  171.     //-------Declaração da matriz ------//
  172.     M = (celula **)calloc((l*c), sizeof(celula*)); //declara setando como 0
  173.    
  174.     for(i=0; i<l; i++)
  175.        M[i] = (celula *)calloc(c, sizeof(celula)); //declara setando como 0
  176.  
  177.     begin = ftell(fp); //começo
  178.  
  179.     fseek(fp, 0, SEEK_END); //vai até o fim
  180.  
  181.     end = ftell(fp); //conta a posição do fim
  182.  
  183.     fseek(fp, begin+1, SEEK_SET); //começa a setar à partir do begin
  184.  
  185.     mat_content = (char*)malloc((end-begin)*sizeof(char)); //alocação
  186.  
  187.     fread(mat_content,sizeof(char), (end-begin), fp); //read
  188.  
  189.     //-------Fim Declaração da Matriz -------//
  190.     //------Atribuição de cada tipo à struct-------//
  191.  
  192.     for(i=0; i<l; i++){
  193.         for(j=0; j<c; j++){
  194.             while(mat_content[k] != '\n'){
  195.                 if (mat_content[k] == 'A')
  196.                     M[i][j].tipo = 1; // Abismo é tipo 1
  197.                 if (mat_content[k] == 'M')
  198.                     M[i][j].tipo = 2; // Monstro é tipo 2
  199.                 if (mat_content[k] == 'L')
  200.                     M[i][j].tipo = 3; // Luz é tipo 3
  201.                 if (mat_content[k] == 'B')
  202.                     M[i][j].brisaForte++; //é B
  203.                 if (mat_content[k] == 'C')
  204.                     M[i][j].cheiroForte++; //é C
  205.                 if (mat_content[k] == 'b'){
  206.                         if(mat_content[k+1] == 'B'){
  207.                             M[i][j].brisaMedia++; //é bB
  208.                             k++;
  209.                         }else{
  210.                             M[i][j].brisaFraca++; //é b
  211.                         }
  212.                 }
  213.                 if (mat_content[k] == 'c'){
  214.                         if(mat_content[k+1] == 'C'){
  215.                             M[i][j].cheiroMedio++; //é cC
  216.                             k++;
  217.                         }else{
  218.                             M[i][j].cheiroFraco++; //é c
  219.                         }
  220.                 }
  221.                 k++;
  222.             }//Linha abaixo testando o scan
  223.             k++;
  224.             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);
  225.         }
  226.     }
  227.     //--------Fim da Atribuição-----------//
  228.  
  229.     i = 0;
  230.     j = 0;
  231.  
  232. /*
  233.     scanf("%c",&dir);
  234.  
  235.     do {
  236.         printf("Sua coordenada atual é {%d, %d}\n", i, j);
  237.         scanf("%c",&dir);
  238.         if(dir == 'q'){ //q é o modo shoot
  239.             printf("Digite o lado para qual quer atirar\n");
  240.             scanf("%c", &side);
  241.             if(shoot(i, j, M, side) == 1){
  242.                 score += 10000;
  243.             }
  244.             scanf("%c", &dir);
  245.         }
  246.         if(dir == 'w' || dir == 's'){
  247.             i = walk(dir, i, j);
  248.         }
  249.         if(dir == 'a' || dir == 'd'){  
  250.             j = walk(dir, i, j);
  251.         }
  252.         sensations(i, j, M);
  253.     }while (steps != 0);
  254.     printf("Você chegou ao fim do jogo, a sua pontuação é: %d", score);
  255.     */
  256.  
  257.     //--------- Dando free no programa--------/
  258.  
  259.     fclose(fp);
  260.  
  261.     for(i=0; i<c; i++)
  262.         free(M[i]);
  263.  
  264.     free(M);
  265.  
  266.     free(mat_content);
  267.  
  268.     //--------- Fim do free ----------//
  269.  
  270.     return 0;
  271. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement