Répondre à la discussion
Affichage des résultats 1 à 14 sur 14

TP jeu du pendu



  1. #1
    frequi1

    TP jeu du pendu


    ------

    bonjour a tous,

    Alors voila ce que j'ai déja fait

    le main()
    Code:
     #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
        printf ("\t\t\t   Bienvenue au jeu du PENDU\n\n");
        char motSecret[] = "MARRON";
        char choixLettre;
        int coup = 10, longueurMotSecret = 0, i;
        longueurMotSecret = strlen (motSecret);
    
        printf("\n\nIl te reste %d coups a jouer \n",coup);
        printf ("Quel est le mot secret ?\t");
        for (i=0; i<longueurMotSecret; i++)
        {
            printf ("- ");
        }
        printf ("\nProposer un lettre : ");
        choixLettre = lireCaractere();
    
    
        return 0;
    }
    est ma fonction
    Code:
     #include <ctype.h>
    
    char lireCaractere ()
    {
    
        char caractere = 0;
        caractere = getchar(); //on lit le prremier caractere
        caractere = toupper (caractere);//on met la lettre en majuscule si elle ne l'est pas deja
        while (getchar() != '\n');// on lit les autres caractere 1 a 1 jusqu'au \n (pour les effacer)
        return caractere; // on retourne le 1er caractere qu'on a lu
    }
    je vous épargne le header.
    Alors voila tout ce passe très bien jusque la sauf que je ne sais pas par ou commencer pour lui faire comparer le caractère entré au clavier avec les caractères du mot mystère en l’occurrence pas si mystérieux puisqu'il s'agit de "MARRON". La fonction lireCaractere m'a été donner en début d'exercice.
    Quelqu'un pourrait il m'aiguiller svp.

    -----

  2. Publicité
  3. #2
    Jack
    Modérateur

    Re : TP jeu du pendu

    Il faut faire une boucle qui sera répétée autant de fois que tu as de coups à jouer (à moins que tu n'aies trouvé entre-temps.
    A chaque tour de la boucle, il faudra demander une lettre au joueur et lancer une nouvelle boucle qui va rechercher les occurrences de ce caractère dans le mot mystère.

    A+

  4. #3
    frequi1

    Re : TP jeu du pendu

    J'etais sur le point de créer un tableau de char avec allocation dynamique valeur "strlen", rechercher avec un "strchr" le caractere entré au clavier du mot a trouver et ensuite ( ??? le placer dans la bonne case ???)

  5. #4
    kwariz

    Re : TP jeu du pendu

    Bonjour,

    avant de même essayer de penser quoi que ce soit en code, il faut vant tout avoir lr gros des algos que tu vas utiliser. Si tu commences directement à pisser du code ce sera l'échec assuré.
    Jack t'a mis sur la voie, un peu plus formalisé ça peut donner :
    Code:
    répéter
      choisir un mot mystère
      morceau=0
      GAGNE=faux
      PERDU=faux
      caractères déja saisis = {}
      répéter
        saisir un caractère
        si le caractère n'a pas déjà été saisi alors
          ajouter caractère à la liste des caractère déjà saisis
          si caractère dans mot mystère alors
            mettre à jour solution
            si tout trouvé alors
              GAGNE = vrai
            fin si
          sinon
            mettre à jour pendu
            morceau = morceau + 1
            si morceau = NOMBRE_MAX
              PERDU = vrai
            fin si
          fin si
        sinon
          dire caractère déjà saisi
      tant que non PERDU et non GAGNE
      if GAGNE=vrai alors
        afficher Bravo !
      sinon
        afficher Boooh !
        afficher le mot mystere
      fin si
    
      afficher "on reccommence ?"
      demander caractère
    tant que caractère = 'o'
    Une sorte de boucle principale, il va falloir créer des fonctions, repérer les données dont on a besoin (se souvenir des caractères déjà saisis, où en en est dans la découverte du mot caché, ...) ...
    Une bonne idée au départ est de définir une structure qui va contenir l'état de ton jeu = le mot mystere, les lettres jouées (sans doute un tableau de 26 éléments du genre avec A=0, B=1, ..., Z=26 pn a Joué[13]=1 si M a déjà été joué), le nombre de morceau du pendu, ce qu'on déjà trouvé de bon ...

    Des idées pour remplir :
    Code:
    struct jeu {
    ...
    };

  6. A voir en vidéo sur Futura
  7. #5
    frequi1

    Re : TP jeu du pendu

    il faut vant tout avoir lr gros des algos que tu vas utiliser.
    Je suis désolé Kwariz mais je ne parle pas couramment l'algo (je comprends quand même quelques notions). C'est peut être une tare mais je suis plus pour des petits morceau de code (chacun son rôle) que j'essaye d'assembler plus tard entre eux.
    Ça me parais plus simple comme ça.

  8. #6
    Jack
    Modérateur

    Re : TP jeu du pendu

    je ne parle pas couramment l'algo
    Je ne vois pas trop ce qui te bloque. En gros, c'est du C siplifié, en Français de plus. Bref, tu remplace si par if, sinon par else, tantque par while, etc.

    A+

  9. Publicité
  10. #7
    kwariz

    Re : TP jeu du pendu

    L'algo ce n'est que du français mis en forme comme du code (en gros).
    Cette étape est cruciale car elle va te permettre de déterminer ce dont tu vas avoir besoin et de commencer à dégager tes structures de données.
    Tu peux difficilement te passer de cette étape.

  11. #8
    frequi1

    Re : TP jeu du pendu

    Code:
     fin si
          fin si
        sinon
    et ca je le remplace par quoi ?

    y'a quand meme un protocole a connaitre pour écrire des algos.
    est ce que je peux faire ca ?
    Code:
    ecrire bonjour
    demander un nombre
    ecrire un nombre a l'ecran
    envoyer le nombre a fonction multiplie
    recuperer nombre 
    etc etc ...
    Voila pour ce qui est de l'algo.

    Maintenant pour pas trop s'éloigner de mon problème, comment comparer 1 caractère entré par l'utilisateur avec ma chaîne de caractère "motSecret".
    Je sents le TP long et fastidieux.
    Merci A vous

  12. #9
    kwariz

    Re : TP jeu du pendu

    Citation Envoyé par frequi1 Voir le message
    Code:
     fin si
          fin si
        sinon
    et ca je le remplace par quoi ?
    Par rien car même en français ça ne veut rien dire

    Citation Envoyé par frequi1 Voir le message
    y'a quand meme un protocole a connaitre pour écrire des algos.
    est ce que je peux faire ca ?
    Code:
    ecrire bonjour
    demander un nombre
    ecrire un nombre a l'ecran
    envoyer le nombre a fonction multiplie
    recuperer nombre 
    etc etc ...
    En gros oui, car un algo c'est pour organiser tes pensées ...
    Évidemment si tu communiques avec quelqu'un d'autre il y a quelques conventions mais pas très strictes.


    Citation Envoyé par frequi1 Voir le message
    Voila pour ce qui est de l'algo.

    Maintenant pour pas trop s'éloigner de mon problème, comment comparer 1 caractère entré par l'utilisateur avec ma chaîne de caractère "motSecret".
    Je sents le TP long et fastidieux.
    Merci A vous
    Alors ma question est : pourquoi faire ? si tu le trouve le caractère tu fais quoi ?

  13. #10
    frequi1

    Re : TP jeu du pendu

    si tu le trouve le caractère tu fais quoi ?
    ben je le met a sa place dans le mot a trouver. Bon pour le moment le mot a trouver c'est pas un mystere c'est MARRON

    si par exemple je tape O sur mon clavier il doit me renvoyer

    - - - - O -
    ensuite si je tape un S (ben y'en a pas)
    ensuite le R

    il renvoi
    - - R R O - etc
    après pour les nombres de coup restant et la fin du prog je "pense" pouvoir y arriver.

  14. #11
    kwariz

    Re : TP jeu du pendu

    D'après ce que tu me dis, ce serai bien d'avoir une fonction qui en gros fait :
    on se met au début du mot mystere, si le caractere parcouru est égal au caractère charché on remplace le tiret du mot affiché par ce caractere. Ensuite si on est pas au bout du mot mystere on recommence avec le caractere suivant. Une fois qu'on est arrivé au bout, si on a trouvé le caractère cherché alors on renvoie 1 pour avertir l'appelant qu'on l'a trouvé et sinon on renvoie 0 pour l'avertir qu'il n'a pas été trouvé.

    Là ja me dis que la fonction va avoir besoin du caractère à chercher (R), du mot mystère (MARRON) et de ce qui est déjà affiché(----O-). Quand tu lui donnes R elle va renvoyer 1 (car R est dans MARRON) et va modifier le mot affiché (--RRO-). Quand tu lui donnes Q elle va renvoyer 0 (car Q n'est pas dans MARRON) et ne va pas modifier le mot affiché (on reste avec --RRO-).

    De ça on peut commencer à dégager un prototype de la fonction :
    Code:
    int verifie_caractere( char caractere, const char* mystere, char* affichage );
    On va avoir besoin d'un booleen (un int) qui va indiquer si oui ou non on a trouvé le caractère, on doit parcourir un mot donc il faut une boucle ... le squelette en algo qui s'en dégage ressemble à :
    Code:
      car_present = 0
      pour i de 0 à longueur(mystere)-1 faire 
        si mystere[i]==caractere alors
          car_present = 1
          affichage[i] = caractere
        fin si
      fin pour
      renvoyer car_present
    D'une manière générale l'implémentation du parcours d'une chaine en c se fait soit avec une boucle for et un compteur
    Code:
    for(indice=0;indice<strlen(chaine);++indice) {
      <on fait qqch>
    }
    ou une boucle while et un pointeur
    Code:
    ptr=chaine;
    while(*ptr!='\0') {
      <on fait qqch>
      ++ptr;
    }
    J'ai choisi une boucle for car le compteur me dit où je suis dans la chaine, et comme je dois modifier une autre chaine au même endroit ça semble plus simple (si le caractere est trouvé en mystere[indice] alors je dois le placer aussi en affichage[indice]). Si j'avais choisi une boucle while, j'aurais du soit gérer deux pointeurs en parallèle ou ajouter un compteur (autant utiliser for), ou faire de l'arithmétique de pointeurs.

    Le tout est, après avoir décrit en français puis formalisé en gros avec un algo, d'écrire cette fonction.

  15. #12
    frequi1

    Re : TP jeu du pendu

    Code:
    int verifie_caractere( char caractere, const char* mystere, char* affichage )
    
     affichage[i] = caractere
    affichage c'est une 2eme chaîne c'est ça ? un tableau de caractère que je doit créer dans mon main() ou il y aura les lettres trouvées et les "-"

  16. Publicité
  17. #13
    kwariz

    Re : TP jeu du pendu

    Oui, c'est une deuxième chaine. Comme quand on joue avec une feuille de papier et un crayon ... le maitre du jeu inscrit sur un bout de papier le mot secret à trouver (au pire il le garde dans la tête) : dans ton implémentation ce sera une chaine. Le joueur quant à lui ne voit que les lettres découvertes : dans ton programme il va falloir garder cette information. Il y évidemment plusieurs moyens de s'en sortir, la plus simple dans un premier temps est de garder ce qui est affiché (--RRO- par exemple) dans une seconde chaine. Il ne faudra pas oublier non plus de garder quelque part la liste des lettres déjà proposées (quoique tu peux créer une version du jeu qui va s'en passer).

    Quand on crée un programme, on ne fait que modéliser le monde réel, l'algorithme doit décrire en quelque sorte tout ce que le maitre du jeu peut faire. Les objets (mots ou lettres inscrits sur un bout de papier ou retenus, description du pendu) seront tes structures de données, les actions (choisir un mot secret, révéler une lettre, décider si on ajoute un morceau au pendu, ...) seront tes fonctions.

  18. #14
    kwariz

    Re : TP jeu du pendu

    En gros ce que tu vas devoir manipuler, avec uns sorte de trace de ce que tu vas devoir pouvoir faire (on peut oublier la liste des lettres déjà choisies dans un premier temps)

    Mot secret Mot affiché lettre choisie lettres déja proposées morceau de pendu état du jeu action
    MARRON choix du mot secret
    MARRON - - - - - - [] 0 initialisations
    MARRON - - - - - - A [] 0 saisie d'une lettre
    MARRON - A - - - - [A] 0 vérification
    MARRON - A - - - - E [A] 0 saisie d'une lettre
    MARRON - A - - - - [A,E] 1 vérification
    ...
    MARRON - ARRON M [A,E,R,S,T,O,N] 3 saisie d'une lettre
    MARRON MARRON [A,E,R,S,T,O,N] 3 GAGNE vérification
    fin du jeu

















    Bon c'est une façon de voir les choses.

Discussions similaires

  1. Le pendu en C++
    Par yuopaznn dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 02/12/2009, 19h16
  2. Pendu
    Par Kirk_met dans le forum Physique
    Réponses: 1
    Dernier message: 28/03/2005, 22h09
  3. Le paradoxe du pendu
    Par azoth dans le forum Mathématiques du supérieur
    Réponses: 17
    Dernier message: 26/01/2005, 00h28