Partage
  • Partager sur Facebook
  • Partager sur Twitter

TP du Pendu, du tutorial C

Correction

    15 août 2006 à 0:38:22

    Bonjour a tous, tous d'abord, merci pour ce super site,
    pour l'instant je ne l'ai que peu visiter,
    mais je trouve le tutorial sur le C vraiment bien fait, et le forum aussi.
    Je débute donc en C et j'en suis actuelement a la fin de la 2eme partie, lorsque il faut réaliser un jeu du "pendu"
    j'ai réalise ce jeu, il marche, et il contient les fonction de bases, demander dans le TP (avec un dictinaire séparer dans un fichier .txt, une possibilité de rejouer, ...)
    Je voudrai donc savoir ce que vous en penser, si il y a des possibilité de l'ameliorer, si j'ai fai des érreur de débutants,... merci d'avance

    J'ai seulement 2 fichier : un "main", et un autre avec une fonction fourni dans l'énoncer du TP
    je met les 2 !

    J'ai essayer de bien le commenter, mais peut etre est-ce insufisant ??

    Donc le main :



    #include <stdio.h>
    #include <stdlib.h>

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

    #define VERS        "1.3"
    #define TAILLE_MAX  30

    int main(int argc, char *argv[])
    {
      char *position_lettre = NULL,
           place_lettre = 0,
           mot_secret[TAILLE_MAX] = {0},
           mot_code[TAILLE_MAX] = {0},
           chaine_temp[TAILLE_MAX] = {0};
      int  lettre_choisie;
      long tentatives,
           i,
           nb_de_ligne,
           ligne_mot_secret;
      FILE *dico = NULL;
      srand(time(NULL));

      do
      {
        dico = fopen("dico.txt", "r");      // ouverture de dico.txt en lecture seul
        if (dico == NULL)                     // test de l'ouverture -> si échoué
        {
                 printf("Le dictionnaire n'est pas dans le meme dossier que ce programme\n");
                 printf("veuiller telecharger \"dico.txt\",\n");
                 printf("et/ou le deplacer dans le meme repertoire que \"Pendu V ");
                 printf(VERS);
                 printf("
    .exe\"\n\n");
                 system("PAUSE");         // pause
                 exit(0);                 // quitte le programme
        }
       
       
        for (nb_de_ligne=0; fgets(chaine_temp, TAILLE_MAX, dico) != NULL; nb_de_ligne++) ;// on calcul le nb de mot dans le dico
        rewind(dico);                // pointeur remi au début du fichier
        ligne_mot_secret = (rand() % (nb_de_ligne + 1))// ligne du mot choisi au hasard
        for (i=0 ; i<=ligne_mot_secret ; i++)    // on avance le pointeur jusque au mot ...
            fgets(mot_secret , TAILLE_MAX , dico);   // ... que l'on enregistre
       
        fclose(dico);                              // on ferme le dico
       
        i = 0;
        while (i != TAILLE_MAX-1)
        {
              if (mot_secret[i] == '\n')
              mot_secret[i] = '\0';
              i++;
        }
       
        i = 0;
        while (mot_secret[i] != '\0')
        {
              mot_code[i] = '*';
              i++;
        }
       
        for (i=0 ; mot_secret[i] == '\0' ; i++)                      // on fait le mot codé (bon nb d'*)
        mot_code[i] = '*';
       
       
        printf("Bienvenue dans le Pendu !\n\n");
     
        for (tentatives=10 ; tentatives>0 ; tentatives--)  // compte jusque a 10 tentatives perdu
        {
            i = 0;
            place_lettre = -1;
            position_lettre = NULL;
            printf ("\nIl vous reste %ld coups a jouer\n", tentatives);
            printf ("Quel est le mot secret ? %s\n", mot_code);
            printf ("Proposez une lettre : ");
            lettre_choisie = lireCaractere()// on demande une lettre + en maj + buffer vidé
            while (mot_secret[i] != 0)   // cherche toute les recurrences de lettre_choisie
            {
                 position_lettre = strchr(mot_secret+place_lettre+1, lettre_choisie);//recherche de la lettre, pointeur dans mot_secret
                 place_lettre = position_lettre - mot_secret; // place de la lettre ds le mot
                 mot_code[place_lettre] = lettre_choisie;  // remplace la lettre dans mot_code
                 i++;
            }
            if (strchr(mot_secret, lettre_choisie) != NULL)   
            tentatives++;     // si on a trouver 1 lettre, on incrémente les tetatives
           
            if (!strcmp(mot_secret,mot_code)) // si on a trouver le mot, on sort de la boucle
            break;
        }
       
        if (i != 0) // si le joujeur a gagné
        {
            printf ("\n\nGagne ! Le mot secret etait bien : %s\n", mot_secret);
            printf ("Ton score est de %ld points", i);
        }
        else      // sinon
        {
            printf ("\n\nTu a perdu\n");
            //printf ("Le mot etait : %s", mot_secret);
        }
       
        printf ("\n\nVeux tu rejouer une partie ??\n");
        printf ("1 : oui\n");
        printf ("2 : non\n");
        scanf("%ld", &i);
       
      }while (i == 1);   // boucle si "oui"
     
      return 0;
    }





    et l'autre :


    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 (pour les effacer)
        while (getchar() != '\n') ;

        return caractere; // On retourne le premier caractère qu'on a lu
    }




    j'ai aussi un head, mais on devine facilement ce qu'il y a dedans : char lireCaractere();
    (Fonction.h)

    Merci d'avance pour les comentraires sur ce coddes ;)
    • Partager sur Facebook
    • Partager sur Twitter
      15 août 2006 à 6:08:09

      Juste un petit détail,tu n'as pas initialisé toutes tes variables. C'est mieux de le faire.
      • Partager sur Facebook
      • Partager sur Twitter

      TP du Pendu, du tutorial C

      × 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