हांगमैन: अगर खिलाड़ी सभी अक्षरों का अनुमान लगाता है तो खेल खत्म हो जाता है

मैं सी कक्षा में अपने प्रोग्रामिंग के लिए एक हैंगमन कार्यक्रम कर रहा हूं। मुझे यह पता लगाना प्रतीत नहीं होता कि मैं यह आखिरी कदम कैसे करूंगा, जो खिलाड़ी को सभी सही अक्षरों का अनुमान लगाने के बाद खेल को रोक रहा है। मुझे लगता है कि समस्या प्ले समारोह में है।

#include    
#include    
#include    
// MAXWORD, which will be the max word length 
#define     MAXWORD     20
// INCORRECT_GUESSES, which will be the max guesses
#define     INCORRECT_GUESSES   5

/* Prototypes */

// Fills theArray with howMany copies of theLetter
void    fill_array( char *theArray, int howMany, char theLetter );

// Get char from player, checks the letter, shows progress so far
int     get_letter( char *theWord, char *soFar );

// Check if letter is in word, updates progress so far
int     letter_in_word( char *theWord, char *soFar, char theLetter );

// Convert the word to lowercase
void    lower_string( char *someWord );

// Play one game
void    play( char *theWord );    

/* Function definitions */
int main( )
{
    char theWord [ MAXWORD ];
    FILE*   word;
    word = fopen( "guesswords.txt", "r" );

    if ( word == NULL )
    {
        printf( "No input file found..........\n" );
        return -1;
    }
    printf("Want to play a game?\n");
    fscanf( word, "%s", theWord );


    lower_string( theWord );


    play( theWord );

    fclose( word );
    return 0;
}

// Get char from player, checks the letter, shows progress so far
int get_letter( char *theWord, char *soFar )
{
    char theLetter;
    printf("\nPlease enter a letter: ");
    scanf( " %c", &theLetter );
    theLetter = tolower(theLetter);

    letter_in_word( theWord, soFar, theLetter );

    return theLetter;
}

// Fills theArray with howMany copies of theLetter
void fill_array( char *theArray, int howMany, char theLetter )
{
    int i;
    for( i=0; i0)
    {
        printf( "\nCongratz! your letter was in the word\n" );
        printf("%s\n", soFar);
        return 1;
    }

}

// Convert the word to lowercase
void lower_string( char *someWord )
{
    int i, cha;
    int len = strlen( someWord );
    for( i=0; i0)
        {
            printf( "\nYou have %d guesses left\n", guess);
        }
        else
        {
            printf( "\nYou have won!" );     
        }
    }
}
0

1 उत्तर

एक व्यक्ति जीतने का मतलब है कि आप खेल रहे हैं। तो केवल प्रिंटिंग "\ n के बजाय आपने" जीता है, आपको play फ़ंक्शन से play फ़ंक्शन से पहले play की आवश्यकता है खिलाड़ी जीता है:

// ...
    if( i == INCORRECT_GUESSES-1)
    {
        printf( "\nSorry, you're out of guesses\nBetter luck next time!\n" ); 
        return; //<- player lost, return
    }
// ...
    else
    {
        printf( "\nYou have won!" );     
        return; //<- player won, return
    }
}
1
जोड़ा
@ वूलस्टार धन्यवाद, मैंने केवल जीतने वाले मामले पर ध्यान दिया, लेकिन मैंने आपके सुझाव के साथ संपादित किया।
जोड़ा लेखक Hunter McMillen, स्रोत
सच है, हालांकि स्पष्ट होने के लिए चोट नहीं पहुंची।
जोड़ा लेखक Hunter McMillen, स्रोत
वास्तव में हारने वाले मामले में कोई वापसी की आवश्यकता नहीं थी, क्योंकि हारने का मामला भी लूप को समाप्त करता है और पूरी तरह से लौटाता है। एक बेहतर (मेरी राय में) समाधान गेम जीतने पर वापस लौटना है, लेकिन लूप में "खोना" संदेश भी नहीं है - इसे केवल तभी चलाएं जब लूप सामान्य रूप से समाप्त हो जाए।
जोड़ा लेखक mah, स्रोत
आप वापसी चाहते हैं; गलत अनुमान मामले में भी।
जोड़ा लेखक woolstar, स्रोत