IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Petite explication sur jeu : comment la fonction est-elle appelée?


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 27
    Par défaut Petite explication sur jeu : comment la fonction est-elle appelée?
    salut,
    sur un tuto du jeu du "pendu", je ne comprends pas bien comment on a appelé la fonction "rechercheLettre" qui va vérifier si la lettre tapée par l'utilisateur sur le clavier est égale à une lettre dans le mot...? (pas la fonction en elle-même "rechercheLettre", mais comment on l'a appelé)

    les 2 autres fonctions ont bien été "appelées" : " lettre = lireCaractere(); " , ou " if (gagne(lettreTrouvee)) ",

    mais dans la boucle while, il y a juste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (!rechercheLettre(lettre, motSecret, lettreTrouvee))
    (je ne comprends pas bien comment on a fait le lien entre l'étape de "je tape la touche au clavier" et "je vais demander à ma fonction de vérifier")

    Voilà Merci !

    Voilà le petit code du jeu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
     
    int gagne(int lettreTrouvee[]);
    int rechercheLettre(char lettre, char motSecret[], int lettreTrouvee[]);
    char lireCaractere();
     
    int main(int argc, char* argv[])
    {
        char lettre = 0; // Stocke la lettre proposée par l'utilisateur (retour du scanf)
        char motSecret[] = "MARRON"; // C'est le mot à trouver
        int lettreTrouvee[6] = {0}; // Un tableau de booléens. Chaque case correspond à une lettre du mot secret. 0 = lettre non trouvée, 1 = lettre trouvée
        int coupsRestants = 10; // Compteur de coups restants (0 = mort)
        int i = 0; // Une petite variable pour parcourir les tableaux
     
        printf("Bienvenue dans le Pendu !\n\n");
     
        // On continue à jouer tant qu'il reste au moins un coup à jouer ou qu'on
        // n'a pas gagné
        while (coupsRestants > 0 && !gagne(lettreTrouvee))
        {
            printf("\n\nIl vous reste %d coups a jouer", coupsRestants);
            printf("\nQuel est le mot secret ? ");
     
            /* On affiche le mot secret en masquant les lettres non trouvées
            Exemple : *A**ON */
            for (i = 0 ; i < 6 ; i++)
            {
                if (lettreTrouvee[i]) // Si on a trouvé la lettre n°i
                    printf("%c", motSecret[i]); // On l'affiche
                else
                    printf("*"); // Sinon, on affiche une étoile pour les lettres non trouvées
            }
     
            printf("\nProposez une lettre : ");
            lettre = lireCaractere();
     
            // Si ce n'était PAS la bonne lettre
            if (!rechercheLettre(lettre, motSecret, lettreTrouvee))
            {
                coupsRestants--; // On enlève un coup au joueur
            }
        }
     
     
        if (gagne(lettreTrouvee))
            printf("\n\nGagne ! Le mot secret etait bien : %s", motSecret);
        else
            printf("\n\nPerdu ! Le mot secret etait : %s", motSecret);
     
            return 0;
    }
     
    char lireCaractere()
    {
        char caractere = 0;
     
        caractere = getchar(); // On lit le premier caractère
        caractere = toupper(caractere); // On met la lettre en majuscule si elle ne l'est pas déjà
     
        // On lit les autres caractères mémorisés un à un jusqu'à l'\n
        while (getchar() != '\n') ;
     
        return caractere; // On retourne le premier caractère qu'on a lu
    }
     
    int gagne(int lettreTrouvee[])
    {
        int i = 0;
        int joueurGagne = 1;
     
        for (i = 0 ; i < 6 ; i++)
        {
            if (lettreTrouvee[i] == 0)
                joueurGagne = 0;
        }
     
        return joueurGagne;
    }
     
    int rechercheLettre(char lettre, char motSecret[], int lettreTrouvee[])
    {
        int i = 0;
        int bonneLettre = 0;
     
        // On parcourt motSecret pour vérifier si la lettre proposée y est
        for (i = 0 ; motSecret[i] != '\0' ; i++)
        {
            if (lettre == motSecret[i]) // Si la lettre y est
            {
                bonneLettre = 1; // On mémorise que c'était une bonne lettre
                lettreTrouvee[i] = 1; // On met à 1 le case du tableau de booléens correspondant à la lettre actuelle
            }
        }
     
        return bonneLettre;
    }

  2. #2
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    mais dans la boucle while, il y a juste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (!rechercheLettre(lettre, motSecret, lettreTrouvee))
    Je ne comprend pas bien où tu butes. Dans la boucle while, le code lit une nouvelle lettre par lireCaractere() puis fait sa vérification :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
        while (coupsRestants > 0 && !gagne(lettreTrouvee))
        {
    ....
            lettre = lireCaractere(); 
            // Si ce n'était PAS la bonne lettre
            if (!rechercheLettre(lettre, motSecret, lettreTrouvee))
            {
    ....
            }
       }

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 27
    Par défaut
    mais pour moi cette condition n'appelle pas la fonction?

    elle dit juste "si la condition est fausse" donc si la lettre n'est pas la bonne, on va enlever un coup. ?

    il y a ce point d'exclamation " ! "devant, alors que j'aurais pensé plutôt d'abord appeler la fonction, pour demander à vérifier tout ce qu'il y a dans la fonction. Et ensuite, lui dire en effet : si la lettre ne correspond à aucune lettre du mot, en effet fait telle action (ici enlever un coup).

    Tu vois?

    edit: en gros, comment on sait, après avoir lu la lettre (avec lireCaracteres(); ), que la fonction rechercheLettre est actionnée, qu'elle va aller vérifier si la lettre est OK ou non? la fonction rechercheLettre est tout en bas du code, et dans notre boucle while, on ne l'appelle pas, on met juste une condition, mais cette condition elle existe que si on a déjà vérifié avant la lettre avec la fonction?

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    La fonction est exécutée d'abord, puis elle retourne une valeur. Le "if" se sert de cette valeur comme condition.
    En clair, à cause du "!", si la fonction retourne une valeur égale à 0, le bloc du "if" est exécuté.

  5. #5
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     if (!rechercheLettre(lettre, motSecret, lettreTrouvee))
    Ici, la fonction rechercheLettre() est appelée et la valeur retournée est complémentée (par le !) : si la valeur retournée était différente de zéro, elle devient 0, sinon elle devient 1.

    Cela fonctionne comme si on avait (en passant par une variable int resultat) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     resultat = rechercheLettre(lettre, motSecret, lettreTrouvee);
     if(resultat  == 0) ....

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 27
    Par défaut
    Donc de mettre une condition sur une fonction, ça actionne la fonction aussi? car diogene ton exemple avec "resultat" me paraît très clair, par contre simplement mettre une condition, et alors la fonction est déjà lancée, ça me brouille l'esprit... on peut donc faire les 2 en 1...

  7. #7
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Lorsque tu écris
    alors, condition est une expression qui est évaluée pour savoir si elle vaut VRAI ou FAUX.

    L'appel d'une fonction est une expression comme une autre. Pour évaluer cette expression, la fonction est appelée et l'expression prend pour valeur la valeur retournée par la fonction.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Cherche une petite explication sur le mvc
    Par keviin55 dans le forum Modélisation
    Réponses: 5
    Dernier message: 01/06/2011, 23h57
  2. [SAN] Petites explications sur le MAPPING et LUN
    Par alex_m94 dans le forum Windows
    Réponses: 2
    Dernier message: 01/10/2010, 16h51
  3. Petite question sur le typage des fonctions
    Par Dim Me As New Idiot dans le forum F#
    Réponses: 4
    Dernier message: 13/07/2010, 10h41
  4. Petite explication sur les variables externes
    Par Ladgalen dans le forum Débuter
    Réponses: 10
    Dernier message: 15/10/2009, 14h41
  5. petite explication sur les classes
    Par elmcherqui dans le forum Qt
    Réponses: 2
    Dernier message: 15/05/2008, 11h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo