Advertisement
Luz_Azevedo

Forca - pequenos problemas

May 31st, 2019
154
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 7.66 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #define TAM 100
  5.  
  6. char para_maiuscula(char x);
  7. int eminuscula(char x);
  8. int eletra(char x);
  9. void fgets_sem_enter(char str[], int tam);
  10. void choose_word();
  11. void guess_letter();
  12. void letter_in_word(char x);
  13. void erro();
  14. void Dica(int tam, char x);
  15. int dica_completa(int tam);
  16. void dica_ini();
  17. void zera_dica();
  18. void Erros(int tam);
  19. void current_dica(int tam);
  20. void inicio();
  21. void instrucoes();
  22.  
  23. char palavra[TAM];
  24. char dica[TAM];
  25. char digitados[TAM] = {0};
  26. char erros[TAM];
  27. int Erro = 0;
  28. int completa = 1;
  29. int indice_erros = 0;
  30.  
  31. //Transforma char em maiuscula
  32. char para_maiuscula(char x)
  33. {
  34.     int dif = 'a' - 'A';
  35.     x -= dif;
  36.     return x;
  37. }
  38.  
  39. //Checa se um char é minusculo
  40. int eminuscula(char x)
  41. {
  42.     if(x >= 'a' && x <= 'z')
  43.         return 1;
  44.     return 0;
  45. }
  46.  
  47. //Checa se um char é letra
  48. int eletra(char x)
  49. {
  50.     if ((x >= 'A' && x <= 'Z') || (x >= 'a' && x <= 'z'))
  51.         return 1;
  52.     return 0;
  53. }
  54.  
  55. // Remove o enter digitado no fgets
  56. void fgets_sem_enter(char str[], int tam)
  57. {
  58.     int i;
  59.     fgets(str, tam, stdin);
  60.  
  61.     for(i = 0; i < tam ; i++)
  62.     {
  63.         if (str[i] == '\n')
  64.         {
  65.             str[i] = '\0';
  66.             break;
  67.         }
  68.     }
  69. }
  70.  
  71. //transforma dica em '_'
  72. void zera_dica()
  73. {
  74.     int i;
  75.     int tam = strlen(palavra);
  76.     for(i = 0; i < tam; i++)
  77.     {
  78.         if (palavra[i] == ' ')
  79.             dica[i] = ' ';
  80.         else
  81.             dica[i] = '_';
  82.     }
  83. }
  84.  
  85. //imprime a primeira dica
  86. void dica_ini()
  87. {
  88.     int tam  = strlen(palavra);
  89.     int i;
  90.     printf("    ");
  91.     for(i = 0; i < tam; i++)
  92.     {
  93.         printf("%c ", dica[i]);
  94.     }
  95.     printf("\n");
  96. }
  97.  
  98. //imprime a dica com a letra adivinhada substituida caso ela esteja certa, senao, imprime a dica da maneira que estava antes
  99. void Dica(int tam, char x)
  100. {
  101.     int i;
  102.     char opcao, enter;
  103.  
  104.     for(i = 0; i < tam; i++)
  105.     {
  106.         if ( x == palavra[i])
  107.         {
  108.             dica[i] = x;
  109.         }
  110.     }
  111.  
  112.     current_dica(tam);
  113.     printf("\n\n");
  114.  
  115.     if (dica_completa(tam))
  116.     {
  117.         completa = 0;
  118.         printf("\n\n    PARABENS!1!!!1!um!1!  VOCE GANHOU!\n\n");
  119.        
  120.         jogarnov:
  121.         printf("\n\n    DESEJA JOGAR NOVAMENTE?\n\n");
  122.         printf("    S:SIM\n");
  123.         printf("    N:NAO");
  124.         scanf("%c%c", &opcao, &enter);
  125.         switch(opcao)
  126.         {
  127.         case 's':   case 'S':
  128.             inicio();
  129.             break;
  130.         case 'n': case 'N':
  131.             break;
  132.         default:
  133.             goto jogarnov;
  134.         }
  135.     }
  136. }
  137.  
  138. //inprime o estado atual da dica
  139. void current_dica(int tam)
  140. {
  141.     int i;
  142.     printf("    ");
  143.     for(i = 0; i < tam; i++)
  144.     {
  145.         printf("%c ", dica[i]);
  146.     }
  147. }
  148.  
  149. //Imprime os erros ja digitados
  150. void Erros(int tam)
  151. {
  152.     int i;
  153.     printf("    Erros: ");
  154.     for(i = 0; i < tam; i++)
  155.     {
  156.         printf("%c - ", erros[i]);
  157.     }
  158.     printf("\n");
  159. }
  160.  
  161. //verifica se a dica esta completa
  162. int dica_completa(int tam)
  163. {
  164.     int i;
  165.     for(i = 0; i < tam ; i++)
  166.     {
  167.         if (dica[i] == '_')
  168.             return 0;
  169.     }
  170.     return 1;
  171. }
  172.  
  173. //imprime o boneco de acordo com o numero de erros
  174. void erro()
  175. {
  176.     if (Erro == 0)
  177.     {
  178.         printf("\n");
  179.         printf("     ______________\n");
  180.         printf("     |           \\|\n");
  181.         printf("                  |\n");
  182.         printf("                  |\n");
  183.         printf("                  |\n");
  184.         printf("                  |\n");
  185.         printf("    ______________|_\n");
  186.         printf("\n\n");
  187.     }
  188.     else if (Erro == 1)
  189.     {
  190.         printf("\n");
  191.         printf("     ______________\n");
  192.         printf("     |           \\|\n");
  193.         printf("     O            |\n");
  194.         printf("                  |\n");
  195.         printf("                  |\n");
  196.         printf("                  |\n");
  197.         printf("    ______________|_\n");
  198.         printf("\n\n");
  199.     }
  200.     else if (Erro == 2)
  201.     {
  202.         printf("\n");
  203.         printf("     ______________\n");
  204.         printf("     |           \\|\n");
  205.         printf("     O            |\n");
  206.         printf("     |            |\n");
  207.         printf("                  |\n");
  208.         printf("                  |\n");
  209.         printf("    ______________|_\n");
  210.         printf("\n\n");
  211.     }
  212.     else if (Erro == 3)
  213.     {
  214.         printf("\n");
  215.         printf("     ______________\n");
  216.         printf("     |           \\|\n");
  217.         printf("     O            |\n");
  218.         printf("    /|            |\n");
  219.         printf("                  |\n");
  220.         printf("                  |\n");
  221.         printf("    ______________|_\n");
  222.         printf("\n\n");
  223.     }
  224.     else if (Erro == 4)
  225.     {
  226.         printf("\n");
  227.         printf("     ______________\n");
  228.         printf("     |           \\|\n");
  229.         printf("     O            |\n");
  230.         printf("    /|\\          |\n");
  231.         printf("                  |\n");
  232.         printf("                  |\n");
  233.         printf("    ______________|_\n");
  234.         printf("\n\n");
  235.     }
  236.     else if (Erro == 5)
  237.     {
  238.         printf("\n");
  239.         printf("     ______________\n");
  240.         printf("     |           \\|\n");
  241.         printf("     O            |\n");
  242.         printf("    /|\\          |\n");
  243.         printf("    /             |\n");
  244.         printf("                  |\n");
  245.         printf("    ______________|_\n");
  246.         printf("\n\n");
  247.     }
  248.     else if (Erro == 6)
  249.     {
  250.         printf("\n");
  251.         printf("    \n VOCE PERDEU \n");
  252.         printf("     ______________\n");
  253.         printf("     |            \\|\n");
  254.         printf("     O            |\n");
  255.         printf("    /|\\          |\n");
  256.         printf("    / \\          |\n");
  257.         printf("                  |\n");
  258.         printf("    ______________|_\n");
  259.         printf("\n\n");
  260.     }
  261. }
  262.  
  263. //o usuario1 escolhe a palavra
  264. void choose_word()
  265. {
  266.     system("cls");
  267.     printf("\n         JOGO DA FORCA\n");
  268.     printf("              ===============\n");
  269.     printf("\n  Escolha uma palavra: ");
  270.     fgets_sem_enter(palavra, TAM);
  271.     strupr(palavra);
  272.     system("cls");
  273. }
  274.  
  275. // usuario2 tenta adivinhar uma letra da plavra
  276. void guess_letter()
  277. {
  278.     int cont = 0;
  279.     if (cont == 0)
  280.     {
  281.         zera_dica();
  282.         printf("\n         JOGO DA FORCA\n");
  283.         printf("              ===============\n\n");
  284.         Erros(indice_erros);
  285.         erro();
  286.         dica_ini();
  287.         printf("\n");
  288.         cont++;
  289.     }
  290.     char letra;
  291.     char enter;
  292.  
  293.     int i = 0;
  294.     int j, k;
  295.  
  296.     while(Erro <= 6 && completa)
  297.     {
  298.        
  299.         printf("\n  Adivinhe uma letra: ");
  300.         scanf("%c%c", &letra, &enter);
  301.  
  302.         while (!(eletra(letra)))
  303.         {
  304.             printf("\n  Por favor, digite uma LETRA: ");
  305.             scanf("%c%c", &letra, &enter);
  306.         }
  307.  
  308.         //converte a letra digitada para miuscula
  309.         if (eminuscula(letra))
  310.         {
  311.             letra = para_maiuscula(letra);
  312.         }
  313.  
  314.         if (i == 0)
  315.         {
  316.             digitados[i] = letra;
  317.             i++;
  318.         }
  319.         else
  320.         {
  321.         loop:
  322.             for(j = 0, k = 0; j < i; j++)
  323.             {
  324.                 if (letra == digitados[j])
  325.                     k = 1;
  326.             }
  327.             if (k != 0)
  328.             {
  329.                 printf("\n  Voce ja digitou esta letra! Por favor, digite uma letra diferente: ");
  330.                 scanf("%c%c", &letra, &enter);
  331.  
  332.                 while (!(eletra(letra)))
  333.                 {
  334.                     printf("\n  Por favor, digite uma LETRA: ");
  335.                     scanf("%c%c", &letra, &enter);
  336.                 }
  337.                 if (eminuscula(letra))
  338.                 {
  339.                     letra = para_maiuscula(letra);
  340.                 }
  341.                 goto loop;
  342.             }
  343.             digitados[i] = letra;
  344.             i++;
  345.         }
  346.         system("cls");
  347.         printf("\n         JOGO DA FORCA\n");
  348.         printf("              ===============\n\n");
  349.         letter_in_word(letra);
  350.     }
  351. }
  352.  
  353. void letter_in_word(char x)
  354. {
  355.     int i, j = 0;
  356.  
  357.     int tam = strlen(palavra);
  358.     for(i = 0; i < tam ; i++)
  359.     {
  360.         if (x == palavra[i])
  361.         {
  362.             j++;
  363.             Erros(indice_erros);
  364.             erro();
  365.             Dica(tam, x);
  366.             break;
  367.         }
  368.     }
  369.     if ( j == 0 )
  370.     {
  371.         erros[indice_erros] = x;
  372.         indice_erros++;
  373.         Erros(indice_erros);
  374.         Erro++;
  375.         erro();
  376.         current_dica(tam);
  377.         printf("\n\n");
  378.     }
  379. }
  380.  
  381. void instrucoes()
  382. {
  383.     system("cls");
  384.     char enter;
  385.     printf("\n\n        INSTRUCOES\n");
  386.     printf("           ============\n\n");
  387.     printf("    1:TU TEM Q ADIVINHAR A PALAVRA\n");
  388.     printf("    2:DIGITA AS LETRA E FE");
  389.     scanf("%c", &enter);
  390.     return;
  391. }
  392. void inicio()
  393. {
  394.     bege:
  395.    
  396.     system("cls");
  397.     printf("\n         JOGO DA FORCA\n");
  398.     printf("              ===============\n");
  399.     char opcao, enter;
  400.     printf("    J:JOGAR\n");
  401.     printf("    I:INSTRUCOES\n");
  402.     printf("    S:SAIR\n");
  403.  
  404.     scanf("%c%c", &opcao, &enter);
  405.     switch(opcao)
  406.     {
  407.     case 'J':
  408.     case 'j':
  409.         choose_word();
  410.         guess_letter();
  411.         break;
  412.     case 'I':
  413.     case 'i':
  414.         instrucoes();
  415.         goto bege;
  416.         break;
  417.     case 'S':
  418.     case 's':
  419.         return;
  420.     default:
  421.         goto bege;
  422.     }
  423. }
  424. int main()
  425. {
  426.     inicio();
  427.     return 0;
  428. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement