2015-11-12 1 views
0

В настоящее время моя программа отлично работает, за исключением той части, где должно отображаться постепенно висящий человек.Фиксация логической ошибки для игры в палату в c

#include <stdio.h> 
#include <string.h> 

#define SIZE 30 

void game(char w[], char g[], int len); 
void hangman(int m); 

main() { 

char word[SIZE] = "vocal"; 

int len1 = 0, i; 
char guessed[SIZE]; 

len1 = strlen(word); 
guessed[len1]; 

for(i = 0; i < len1; i++) 
    guessed[i] = '*'; 
    guessed[len1] = '\0'; 
printf("%s\n", guessed); 

game(word, guessed, len1); 
} 

void game(char w[], char g[], int len) { 
char buffer[100]; 
char letter = '\0'; 
int j; 
int misses = 0, hits = 0; 

while(g != w && misses != 8) 
{ 
    printf("Enter a guess: "); 
    fgets(buffer, 100, stdin); 
    sscanf(buffer, "%c", &letter); 



    for(j = 0; j < len; j++) 
    { 
     if(letter == w[j]) 
     { 

      g[j] = letter; 
      hits++; 
      printf("%s\n", g); 
      if(hits == len) { 
      printf("Congrats, you won!\n"); 
      misses = 8; 

     } 

Я думаю, что логика этого еще не в том, что не так, но я не знаю, как это исправить.

 else 
     { 
      if(j == len && letter != w[j]) 
      { 
       misses++; 
       hangman(misses); 
      } 
     } 
     } 
    } 

} 
} 

void hangman(int m) { 

switch(m) { 
     case 1: 
      { 
       printf("  ----------\n"); 
       printf(" |/   |\n"); 
       printf(" |   (_)\n"); 
       printf(" |\n"); 
       printf(" |\n"); 
       printf(" |\n"); 
       printf(" |\n"); 
       printf(" |\n"); 
       printf("____|____\n"); 
       break; 
      } 
      case 2: 
      { 
       printf("  ----------\n"); 
       printf(" |/   |\n"); 
       printf(" |   (_)\n"); 
       printf(" |   |\n"); 
       printf(" |\n"); 
       printf(" |\n"); 
       printf(" |\n"); 
       printf(" |\n"); 
       printf("____|____\n"); 
       break; 
      } 
      case 3: 
      { 
       printf("  ----------\n"); 
       printf(" |/   |\n"); 
       printf(" |   (_)\n"); 
       printf(" |   \\|\n"); 
       printf(" |\n"); 
       printf(" |\n"); 
       printf(" |\n"); 
       printf(" |\n"); 
       printf("____|____\n"); 
       break; 
      } 
      case 4: 
      { 
       printf("  ----------\n"); 
       printf(" |/   |\n"); 
       printf(" |   (_)\n"); 
       printf(" |   \\|/\n"); 
       printf(" |\n"); 
       printf(" |\n"); 
       printf(" |\n"); 
       printf(" |\n"); 
       printf("____|____\n"); 
       break; 
      } 
      case 5: 
      { 
       printf("  ----------\n"); 
       printf(" |/   |\n"); 
       printf(" |   (_)\n"); 
       printf(" |   \\|/\n"); 
       printf(" |   |\n"); 
       printf(" |\n"); 
       printf(" |\n"); 
       printf(" |\n"); 
       printf("____|____\n"); 
       break; 
      } 
      case 6: 
      { 
       printf("  ----------\n"); 
       printf(" |/   |\n"); 
       printf(" |   (_)\n"); 
       printf(" |   \\|/\n"); 
       printf(" |   |\n"); 
       printf(" |   /\n"); 
       printf(" |\n"); 
       printf(" |\n"); 
       printf("____|____\n"); 
       break; 
      } 
      case 7: 
      { 
       printf("  ----------\n"); 
       printf(" |/   |\n"); 
       printf(" |   (_)\n"); 
       printf(" |   \\|/\n"); 
       printf(" |   |\n"); 
       printf(" |  /\\ \n"); 
       printf(" |\n"); 
       printf(" |\n"); 
       printf("____|____\n"); 
       break; 
      } 
      case 8: 
       { 
       printf("  ----------\n"); 
       printf(" |/   |\n"); 
       printf(" |   (_)\n"); 
       printf(" |   \\|/\n"); 
       printf(" |   |\n"); 
       printf(" |  /\\ \n"); 
       printf(" |\n"); 
       printf(" |\n"); 
       printf("____|____\n"); 
       printf("You lost."); 
       break; 
       } 
      } 
} 

Если кто-нибудь может мне помочь, я был бы очень признателен!

+0

Ну, отступ указывает, что он, вероятно, ошибочен, но вам нужно будет добавить больше кода из самой первой части условных чисел, то есть первая 'if' до последней закрывающей скобки – Madivad

+0

Я бы не стал скажем, что он «отлично работает». Все, что он делает, - это побудить меня больше догадок. –

+0

@Madivad Это все утверждения if. Это все код – cluless1

ответ

0

Хорошо, были некоторые логические ошибки, которые вы ожидали. Я попытался выполнить минимальный набор изменений. Теперь он работает, но вы можете его наверняка улучшить. Например, игра должна сообщать пользователю, хочет ли он снова играть.

(include also stdlib.h for the function exit()) 

void game(char w[], char g[], int len) 
{ 
    char buffer[100]; 
    char letter = '\0'; 
    int j; 
    int misses = 0, hits = 0; 
    int global_miss = 0; 

    while(g != w && misses != 8) 
    { 
     printf("Enter a guess: "); 
     fgets(buffer, 100, stdin); 
     sscanf(buffer, "%c", &letter); 
     misses = 0; 

     for(j = 0; j < len; j++) 
     { 
      if(letter == w[j]) 
      { 
       misses = 0; 
       hits++; 
       g[j] = letter; 
       printf("%s\n", g); 
       if(hits == len) {printf("Congrats, you won!\n"); exit(111);} 
      } else { 
       misses++; 
       fprintf(stdout, "misses = %d\n", misses); 
       if (misses == len) { 
        fprintf(stdout, "This letter is wrong! Try again"); 
        global_miss += 1; 
        hangman(global_miss); 
        if (global_miss == 8) { 
         printf("Sorry you lose!\n"); 
         exit(111); 
        } 
       } 
      } 
     } 
    } 
} 

Вы также должны удалить это неиспользуемое выражение в вашем главный:

guessed[len1]; 

И, пожалуйста, определить INT основного (смотрите также: What should main() return in C and C++? если вы заинтересованы в дебатах междунара против недействительного основных)

+0

Эта ссылка была очень полезна, и я больше не буду использовать 'main()'. Кроме того, большое спасибо за код. Я исправил его еще и смог заставить его работать точно так, как говорится в рекомендациях – cluless1

Смежные вопросы