Partage
  • Partager sur Facebook
  • Partager sur Twitter

Programmation modulaire

Sujet résolu
    4 novembre 2006 à 21:44:59

    J'ai commencer le SDL et je suis rendu au TP de Mario Sokoban, seulement j'ai encore des difficultées avec la programmation modulaire. Je me suis alors dit que je devrais faire mon pendu a l'aide de différantes fonctions et m'assurer de bien comprendre avant de me lancer dans un jeux SDL. Mais j'ai beau lire et relire le chapitre je ne comprend pas comment je peu faire une fonction qui renvoit un tableau.

    Je veut que mon motMystre soit choisit dans une autres fonction que le main alors de fopen à fclose, je veut tout mettre ce bout de code dans une autre fonction pourriez-vous m'aider en regardant mon code et m'expliquer comment faire?

    #include <stdio.h>
    #include <stdlib.h>
    #include <ctype.h>
    #include <time.h>
    #define line() printf("\n");

    int main(void)
    {
        ////////////////////////////////////////////////
        //Partie 1: Generer le mot mystere et afficher//
        //   les etoiles selon le nombre de lettres   //
        ////////////////////////////////////////////////

        long numeroRandom = 0;
        long nombreMots = 0;
        char compteur;
        FILE *fichier = NULL;
        char mot[20];
        long i = 0;//i servira a ecrire les etoiles(*) qui cache les lettres non-trouver
        char motMystere[20];


        char lettreEntree;
        long nombreCaracteres;
        int nombreVies = 5;
        int resultat = 0;
        int succes = 0;


        fichier = fopen("Mots.txt", "r");//Ouverture du fichier
        rewind(fichier);

        while ((compteur = fgetc(fichier)) != EOF) //EOF indique la fin du fichier texte.
        {
            if (compteur == '\n')
            {//Pour avoir le nombre exact il doit y avoir
                nombreMots++;//une ligne vide à la fin du fichier.
            }
        }
        rewind(fichier);

        /*Random*/
        srand(time(NULL));
        numeroRandom = (rand() % (nombreMots - 1 + 1)) + 1;
        numeroRandom--;


        /*La boucle for servira ici a mettre le mot choisit au hazard
        comme valeur a la variable motMystere*/

        for(i = 0; i < numeroRandom; i++)
        {
            fscanf(fichier, "%s", mot);//Place le curseur a la ligne voulut
        }
        i = 0;

        fscanf(fichier, "%s", motMystere);//motMystere prend comme valeur le mot secret

        rewind(fichier);
        fclose(fichier);

        /*nombreCaractere indique le nombre de caractere du mot mystere et
        définie dynamiquement la grandeur du tableau motRestant*/

        nombreCaracteres = strlen(motMystere);
        char motRestant[nombreCaracteres];


        /*Les nombre de caractere est contenu dans une variable et grace a la boucle
        for, les nombre d'étoiles(*) voulut apparaitra a l'écran. Les étoiles indique
        une lettre non trouver par le joueur.*/

        for(i=0;i<nombreCaracteres;i++)
        {
            motRestant[i] = '*';
        }
        motRestant[i] = '\0';



        ////////////////////////////////////////////////
        //      Partie 2: Recherche du caractere      //
        //   à l'intérieur de la chaine (motMystere)  //
        //   et actualiser le jeu selon le resultat   //
        ////////////////////////////////////////////////

        while((nombreVies > 0) && (succes < nombreCaracteres))
        {
            resultat = 0;
            printf("Il vous reste %ld vies", nombreVies);
            line()
            printf("Mot Mystere: ");
            printf("%s", motRestant);
            line()
            printf("Entrer une lettre: ");//Le joueur entre une lettre

            scanf("%c", &lettreEntree);
            line()
            line()

            lettreEntree = toupper(lettreEntree); // La lettre est mit en majuscule

            //lit les autres caractères mémorisés un à un jusqu'à l'\n (pour les effacer)
            while (getchar() != '\n');


            /*La boucle for vérifie chaque case de mon tableau motMystere pour voir
            si la lettre entree correspond a ce qui est écrit dans une ou plusieurs
            de ses cases*/

            for(i=0;i<nombreCaracteres;i++)
            {
                if(motMystere[i] == lettreEntree)
                {
                    motRestant[i] = lettreEntree;
                    resultat++;
                }

            }

            if(resultat>0)//Si le joueur a trouver un lettre du mot mystere...
            {
                succes = (succes + resultat);
            }
            else
            {
                nombreVies--;
            }

        }

        if(succes == nombreCaracteres)//Le joueur gagne
        {
            printf("Bravo, le mot etais bien %s, vous avez gagne!", motMystere);
        }
        else//Le joueur perd
        {
            printf("Le mot etais %s. Vous etes mort.", motMystere);
        }

        system("PAUSE");
            return 0;
    }
    • Partager sur Facebook
    • Partager sur Twitter
      5 novembre 2006 à 2:36:34

      Citation :

      j'ai beau lire et relire le chapitre je ne comprend pas comment je peu faire une fonction qui renvoit un tableau.


      On peut utiliser l'allocation dynamique pour ça.
      voila un exemple de code:
      (j'espère que je n'écrit pas trop de bétises..)

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

      char *choisir_mot()
      {
           char temp[100];
           
           FILE *fichier=fopen("test.txt","r");
           if(fichier==NULL)
                return NULL;
           fscanf(fichier,"%s",temp);
           fclose(fichier);
           
           char *mot=malloc(sizeof(char)*strlen(temp));
           strcpy(mot,temp);
           return mot;
      }

      void liberer_mot(char *mot)
      {
          free(mot);
      }

      int main()
      {
          char *mot=choisir_mot();
          if(mot!=NULL)
             printf("mot: %s\n",mot);
          liberer_mot(mot);
         
          return 0;
      }


      tout est plus ou moins dans le cour. Reste à le modifier selon tes besoin.
      • Partager sur Facebook
      • Partager sur Twitter

      Programmation modulaire

      × 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