Partage
  • Partager sur Facebook
  • Partager sur Twitter

pb pendu SOS SOS SOS

pendu avec dico

Sujet résolu
    6 août 2006 à 14:01:09

    bonjour,
    je viens d'intégrer avec mon jeu du pendu le dictionnaire
    mais cela ne marche pas du tout
    car j'ai rentré 3 mots
    mais il me crée des mots que je n'ai pas demandé et accepte comme lettre \n
    qui valide pour et enlève une *
    merci de votre aide par avance
    je suis complétement noyé
    et j'ai détaillé à fond le code que voici

    #include <stdio.h>
    #include <stdlib.h>
    #include <ctype.h>
    #include <string.h>
    #include <time.h>

    #define min 1 //le premier mot du dico
    #define TAILLEMAX 1000

    int main()
    {
        /* explication des variables choisis
        motsecret est le mot que l'on recherche dans le pendu
        chaine est le mot secret à découvrir avec les *
        c1 est la taille totale de mon dico avec tous les mots
        coup est le nombre de coups restant
        i est une variable de sélection d'un caractère d'une chaine
        change est le changement du nombre de coups
        lettre est la lettre rentrée par le joueur
        nbligne est le nombre de lignes du dico
        nbalatoir est le nombre aléatoire de la ligne*/

        char motsecret[100]="", chaine[100]="", c1[TAILLEMAX]="";
        int coup=10, i=0, change=0,lettre=0, nbligne=0, nbaleatoir=0;
        FILE *dico=NULL;

            //affichage de l'en-tête du jeu et de la règle de ce dernier
            printf("\n\n");
            printf("     **************************************\n");
            printf("     *                                    *\n");
            printf("     * Bienvenue dans le jeu du pendu!!!! *\n");
            printf("     *                                    *\n");
            printf("     **************************************\n");
            printf("\n\n");
            printf("                   *****                   \n");
            printf("                 * * * *                   \n");
            printf("                  *O*  *                   \n");
            printf("                   *   *   /////////////   \n");
            printf("                   *   *   /serez vous /   \n");
            printf("                   *   *   /  le       /   \n");
            printf("                  * *  *   / prochain!!/   \n");
            printf("                 *   * *   /////////////   \n");
            printf("                       *                   \n");
            printf("                     *****                 \n");
            printf("     **************************************\n");
            printf("     *                                    *\n");
            printf("     *       Voici la regle du jeu        *\n");
            printf("     *                                    *\n");
            printf("     **************************************\n");
            printf("\n\n");
            printf("Vous devez essayer de decouvrir un mot ecrit tout en majuscule\n");
            printf("en un nombre minimun de 10 coups. Pour cela, vous devez proposer\n");
            printf("une lettre non accentue, si jamais la lettre se trouve dans le mot\n");
            printf("a recherche, alors la(les) lettre(s) sera(ont) affiche(s). Sinon\n");
            printf("vous perdez un coup. Le jeu se poursuit, jusqu'au moment ou vous ne\n");
            printf("pouvez plus jouer, car vous n'avez plus de coup a jouer.\n");
            printf("\n");
            printf("\n************ REMARQUE IMPORTANTE *************************************\n");
            printf("\nQuand vous tapez une lettre, vous pouvez la tape en minuscule, mais\n");
            printf("elle NE DOIT PAS contenir de lettre accentuee.\n\n\n");
            printf("************ A VOTRE PENDAISON ***************************************\n\n");

        //initialisation du choix aléatoire qui doit apparaître qu'une seule fois
        srand(time(NULL));


        /*écriture du dictionnaire avec un choix de quelques mots pour initialiser
        le jeu du pendu.*/

        dico=fopen("dico.txt","w");
        if (dico != NULL)//on regarde si dico existe
        {
            //on écrit son contenu
            fputs("MAISON\nBLEU\nAVION\n", dico);
            fclose(dico);
        }



        //lecture du dictionnaire pour voir le nombre de mots qu'il y a dedans
        dico=fopen("dico.txt","r");
        if (dico != NULL)
        {
            while( fgets(c1, TAILLEMAX, dico)!=NULL)
            {
                nbligne++;//on compte le nombre de lignes car il n'y a q'un seul mot par ligne
            }
            fclose(dico);
        }

        //on sélectionne une ligne aléatoirement dans la liste
        nbaleatoir = (rand() % (nbligne - min + 1)) + min;

        //on va sélectionner le mot secret
        dico=fopen("dico.txt", "r");
        if (dico != NULL)
        {
            fseek(dico, nbaleatoir, SEEK_SET);//je me place sur la ligne qui contient le mot au hasard
            fgets(motsecret, 100, dico);//on met motsecret
            fclose(dico);
        }

            /*affichage du mot secret sous forme d'un nombre * qui correspond au nombre de
            caractères a trouvé ce qui initialise la recherche*/

            strcpy(chaine, motsecret);
            for (i=0; i<sizeof(motsecret); i++)
            {
                if(chaine[i] != '\0')
                    chaine[i]='*';
            }


            /* On commence les choses sérieuses
            en se disant tant qu'il me reste des coups à jouer, je joue.
            Ce qui parait évident, dès le début.
            Et tant que je n'ai pas gagné, je continue à jouer*/

            while((coup != 0) && (strcmp(chaine, motsecret) != 0))
            {

            /*indication du nombre de coup à jouer qui dépend de l'orthographe du mot coup
            différence entre le singulier et le pluriel*/

            if (coup !=1)
                printf("il vous reste %ld coups a jouer\n", coup);
            else
                printf("il vous reste %ld coup a jouer\n", coup);

            /*indication du mot secret sous forme d'étoiles * avec apparition des lettres
            si on en a trouvé*/

            printf("quel est le mot secret : %s\n", chaine);

            //choix de la lettre par l'utilisateur
            printf("Proposez une lettre : ");
            lettre=getchar();

            //on passe le caractère en majuscule si cela n'ai pas fait par le joueur
            lettre = toupper(lettre);

            //comparaison entre la lettre et la chaine de motsecret
            for (i=0; i<sizeof(motsecret); i++)
            {
                if (lettre == motsecret[i])
                {
                    chaine[i]=motsecret[i];
                    change++;//nb indique un changement dès qu'on trouve une bonne lettre
                }
            }

            //si on ne trouve pas une lettre adéquate alors le nombre de coups dimininue
            if (change == 0)
                coup--;

            fflush(stdin);//on purge la sélection de la lettre tapee par le joueur

            //séparation entre chaque nouveau choix du joueur
            printf("\n\n");

            //réinitialisation du changement
            change=0;

            //confirmation d'avoir trouvé
            if (strcmp(chaine, motsecret) == 0)
                printf("Bravo, vous avez trouve le MOT SECRET qui est %s\n\n", motsecret);

            }

            //le mot de la fin avec une touche d'humour
            if (coup ==0)
        {
            printf("     ********************************\n");
            printf("     *                              *\n");
            printf("     *       Vous etes pendu        *\n");
            printf("     *   Ce jeu, vous a ete fatal   *\n");
            printf("     *       Adios Amigo            *\n");
            printf("     *                              *\n");
            printf("     ********************************\n\n");
        }

        system("PAUSE");
            return 0;
    }
    • Partager sur Facebook
    • Partager sur Twitter
      6 août 2006 à 21:24:23

      Premièrement si tu pouvais m'expliquer l'intérêt de créer un fichier, de le remplir, le fermer et le ré-ouvrir pour finalement le lire(!!), çà m'aiderait .
      De plus tu le réouvre DEUX fois !!

      La meilleur façon de faire çà reste:

      char *dico[]=
      {
          "MAISON",
          "BLEU",
          "AVION",
      };

      ...

      int dico_nbwords=sizeof(dico)/sizeof(dico[0]);
      nbaleatoire=rand_int(0,dico_nbwords);// je te laisse le soin de coder cette fonction

      strcpy(chaine,dico[nbaleatoire]);
      char *ptr=chaine;
      while(*ptr)
      {
          (*ptr)='*';
          ptr++;
      }


      Soit dit en passant:
      nbaleatoir = (rand() % (nbligne - min + 1)) + min;

      ne donne pas un nombre aléatoire car certains nombres auront une probabilité plus importante que d'autres .

      Bon je vais pas refaire le code, le reste m'a l'air au point si ce n'est que tu ne vérifie pas si la lettre en question a déjà été proposée par l'utilisateur .
      • Partager sur Facebook
      • Partager sur Twitter
        6 août 2006 à 23:27:29

        rien qu'au titre de ton post je ne le lit meme pas.
        </span>
        • Partager sur Facebook
        • Partager sur Twitter
          7 août 2006 à 12:42:58

          je vais essayer de faire cette fonction et revoir le pendu si cela marche ce coup ci
          • Partager sur Facebook
          • Partager sur Twitter

          pb pendu SOS SOS SOS

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown