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 :

Le pendu: jeu


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Avril 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Etudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2020
    Messages : 2
    Par défaut Le pendu: jeu
    Bonjour tout le monde,
    J'essaye de programmer un mini mini jeu en C, le pendu. Je pense que la majorité des gens connaissent les régles du jeu mais je brièvement rappeler le but. On a un mot caché et le but est de trouver ce mot. A chaque coup on a la possibilité de proposer une lettre, si le mot à trouver contient la lettre, elle est remplacé et ainsi de suite jusqu'à trouver le mot en question.
    J'ai un petit problème. C'est sur la partie ou on doit vérifier qu'un caractère appartient ou non au mot à trouver. Mon problème se situe au niveau de ma boucle if mais je ne comprends pas pourquoi. Après vérification (j'ai mis un printf dans la boucle if) je constate que le programme entre dans la boucle if qu'une seule fois et qu'il vérifie QUE la première lettre du mot à trouver. (Pour le mot marron par exemple il ne reconnaît que la lettre m et il faut que je rentre la lettre m à la première ittération sinon la lettre n'est pas reconnue.)

    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
    for (i=0;i<strlen(motsecret);i++)
     
            {
     
                printf("Il vous reste %d coups a jouer\nQuel est le mot secret ? %s\n", compteur, motcrypte);
     
                printf("Proposez une lettre : ");
     
                lettre = lireCaractere();
     
                if (motsecret[i] == lettre)
     
                {
     
                    motcrypte[i] = lettre;
     
                }
     
            }
    Tout ce bloc de code se trouve lui même dans une boucle while qui me permet d'arrêter le jeu grâce à un compteur. (je sais ce n'est pas très très élégant mais c'est la première chose à laquelle j'ai pensé)

  2. #2
    Membre éclairé Avatar de Bayard
    Inscrit en
    Juin 2002
    Messages
    863
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 863
    Par défaut
    Bonjour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for (i=0;i<strlen(motsecret);i++)
    strlen cacule la taille de la chaîne jusqu'à trouver le caractère '\0'.
    Faites un printf de motsecret : printf("mot secret %s",motsecret); juste pour le débug


    Idéalement poster tout le code pour que l'on puisse le compiler.

  3. #3
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 770
    Par défaut
    C'est normal

    Déjà ce n'est pas parce que ton mot à X caractères, que tous les caractères sont différents (exemple: le mot occurrence) . Donc ce n'est pas une boucle for, mais while, tant que le nombre de lettres trouvées n'est pas au moins égal à X.

    Et si seule la première case est testée c'est normal if (motsecret[i] == lettre) tu testes 1 seul caractère (le iième). Il faut parcourir tout ton mot, soit en utilisant une boucle for, soit en appelant la fonction strchr (<- lien cplusplus.com en anglais)

  4. #4
    Candidat au Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Avril 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Etudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2020
    Messages : 2
    Par défaut
    J'étais entrain de vous répondre et j'ai finis par comprendre mon erreur (enfin je crois ), je pensais que puisque la boucle if était dans une boucle for le i allait permettre la vérification de toute la chaine de caractères mais en faite non, c'est en sortant du if que le i change. Je vais essayé de corriger mon erreur et je reviens vers vous.
    Merci à vous !

  5. #5
    Membre éclairé Avatar de Bayard
    Inscrit en
    Juin 2002
    Messages
    863
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 863
    Par défaut
    Il faut qu'il y ait 2 boucles imbriquées.

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par Baki555 Voir le message
    J'étais entrain de vous répondre et j'ai finis par comprendre mon erreur (enfin je crois ), je pensais que puisque la boucle if était dans une boucle for le i allait permettre la vérification de toute la chaine de caractères
    Non. Avec ton code, non seulement il faut trouver le mot mais en plus il faut le trouver dans l'ordre des lettres.
    Accessoirement pour balayer une string, il y a plus efficace que de boucler sur strlen(string) qui, elle, fait aussi une boucle pour trouver la longueur (donc pour une boucle de n lettres tu fais n² itérations). Tu peux tout d'abord mémoriser strlen(string) ou alors boucler sur la string jusqu'au caractère '\0'.
    "boucle if"
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. Code en bourne shell du jeu Le "PENDU"
    Par piment dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 20/07/2007, 14h17
  2. Jeu Bonhomme pendu
    Par yinyann86 dans le forum Delphi
    Réponses: 11
    Dernier message: 14/11/2006, 17h03
  3. Le jeu du pendu.
    Par giggs dans le forum C
    Réponses: 5
    Dernier message: 31/10/2006, 13h40
  4. jeu du pendu
    Par krachik dans le forum Langage
    Réponses: 5
    Dernier message: 24/10/2006, 12h48
  5. Réponses: 4
    Dernier message: 24/03/2006, 13h54

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