Pendu: terminer le jeu si le joueur devine toutes les lettres

Je fais un programme de pendu pour ma programmation en classe C. Je n'arrive pas à comprendre comment je ferais cette dernière étape, qui est d'arrêter le jeu après que le joueur devine toutes les bonnes lettres. Le problème que je ressens est dans la fonction de lecture.

#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 Réponses

Une personne qui gagne signifie que vous avez fini de jouer. Donc au lieu de seulement d'imprimer "\ nVous avez gagné" , vous devez retourner depuis la fonction play le joueur a gagné:

// ...
    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
ajouté
@woolstar Merci, je n'ai fait attention qu'au cas gagnant, mais j'ai édité avec votre suggestion.
ajouté l'auteur Hunter McMillen, source
Vrai, ne pouvait pas blesser d'être explicite cependant.
ajouté l'auteur Hunter McMillen, source
En fait, aucun retour n'est nécessaire dans le cas de la perte ici, puisque le cas perdant termine également la boucle et revient implicitement. Une meilleure solution (à mon avis) est de revenir quand le jeu est gagné, mais n'a même pas le message "vous perdez" dans la boucle - laissez-le s'exécuter seulement si la boucle se termine normalement.
ajouté l'auteur mah, source
Vous voulez un retour; dans le cas des suppositions incorrectes aussi.
ajouté l'auteur woolstar, source