Partage
  • Partager sur Facebook
  • Partager sur Twitter

tp plus moins tres ameliore!!

mon code est il bien ???

    12 octobre 2006 à 17:26:02

    bonjour!!
    j'ai fais le tp plus ou moins assez ameliorer:
    -compteur de coups
    -mode 2 joueurs
    -regles
    -en programmation modulaire
    -et j'aimerais faire aussi des meilleurs scores

    mais pour les meilleurs scores, ils faut surment faire le chapitre de mateo21 avant l'allocution dinamique or je pense pas etre capable d'y alle car j'ai encore un peu de mal avec les pointeurs(en fait je ne les pas encore utilise donc je comprend pas trop l'utilite pour l'instant)et aussi le chapitre sur les preprocesseurs (surtout avec les conditions, je menbrouille avec les endif, ....)
    donc mon code (tres long et un peu le bazar)

    main.c

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

    int main()
    {
            //Les variables:
        long choixMenu = 0;


        printf("\n\n\n\t\t\tBienvenue dans le jeu : Plus ou moins 2.0 !!\n\n\n\n\n");

        printf("Que voulez-vous faire ?\n\n\n");
        printf("1. Mode solo :\n");
        printf("2. Mode multijoueur :\n");
        printf("3. Regles :\n");
        printf("4. Meilleures scores :\n");
        printf("5. Quitter :\n\n");
        printf("Votre choix est le numero ");
        scanf("%ld", &choixMenu);
        printf("\n\n\n");


            switch (choixMenu)
            {
            case 1:
            ljoueur();
            break;

            case 2:
            _2joueur();
            break;

            case 3:
            regles();
            break;

            case 4:

            break;

            case 5:
            printf("You exit the progamme !!\n\nThank you !!\n\n\n\n");
            return 0;
            break;

            default:
            printf("Syntax error !!! You exit the programme !!!\n\n\n\n");
            return 0;

            }
            return 0;
    }


    regles.h
    //Le prototype :
    long regles();


    1 joueur.h

    // prototype:
    long ljoueur();


    2 joueur.h

    //Le prototype :
    long _2joueur();


    1 joueur.c

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include "1 joueur.h"

    long ljoueur ()
    {
                    //Les variables:
        long MaxNiv1 = 100, MaxNiv2 = 1000, MaxNiv3 = 10000, MaxNiv4 = 100000, MaxNiv5 = 1000000;
        long MaxNiv6 = 10000000, MaxNiv7 = 100000000, MaxBoss = 1000000000, retour=1;
        const long Min = 1;
        long nombreMystereNiv1 = 0, nombreMystereNiv2 = 0, nombreEntre = 0, choixMenu = 0;
        long nbCoup = 1, choixMenuDifficulte = 0, nombreMystereNiv3 = 0, nbrMystereNiv4 = 0;
        long nbrMystereNiv5 = 0, nbrMystereNiv6 = 0, nbrMystereNiv7 = 0, nbrMystereBoss = 0;


        while(retour == 1)
        {


            printf("Vous avez choisi : 1 joueur.\n\n\n\n");
            printf("Choisissez le niveau de difficulte :\n\n\n");

            printf("Niveau 1 : tres facile (de 1 a 100) :\n");
            printf("Niveau 2 : facile (de 1 a 1 000) :\n");
            printf("Niveau 3 : moyen (de 1 a 10 000) :\n");
            printf("Niveau 4 : assez difficile (de 1 a 100 000) :\n");
            printf("Niveau 5 : difficile (de 1 a 1 000 000) :\n");
            printf("Niveau 6 : tres difficile (de 1 a 10 000 000) :\n");
            printf("Niveau 7 : infernal (de 1 a 100 000 000) :\n\n");
            printf("Boss final : de 1 a 1 000 000 000 :\n\n\n\n\n");
            printf("Votre choix est le numero ");
            scanf("%ld", &choixMenuDifficulte);
            printf("\n\n\n\n");

            srand(time(NULL));

            switch (choixMenuDifficulte)
            {
            case 1:

                printf("Vous avez choisi : niveau 1.\n\n\n");
                printf("Appuyer sur ENTREE pour commencez le jeu !!\n\n\n");
                getch();
                system("CLS");
                nombreMystereNiv1 = (rand() % (MaxNiv1 - Min + 1)) + Min;

                            do
                {
        printf("Entrez un nombre : ");
        scanf("%ld", &nombreEntre);

        if (nombreEntre < nombreMystereNiv1)
        {
        printf("\nLe chiffre est plus grand !!\n\n\n");
        nbCoup++;
        }

        else if (nombreEntre > nombreMystereNiv1)
        {
        printf("\nLe chiffre est plus petit !!\n\n\n");
        nbCoup++;
        }

        else
        printf("\n\n\nBravo !!Vous avez trouvez le nombre mystere en %ld coups!!\n\n\n\n", nbCoup);

                } while(nombreEntre != nombreMystereNiv1);



            break;




            case 2:

                printf("Vous avez choisi : niveau 2.\n\n\n");
                printf("Appuyer sur ENTREE pour commencez le jeu !!\n\n\n");
                getch();
                system("CLS");
                nombreMystereNiv2 = (rand() % (MaxNiv2 - Min + 1)) + Min;

                            do
                {
        printf("Entrez un nombre : ");
        scanf("%ld", &nombreEntre);

        if (nombreEntre < nombreMystereNiv2)
        {
        printf("\nLe chiffre est plus grand !!\n\n\n");
        nbCoup++;
        }

        else if (nombreEntre > nombreMystereNiv2)
        {
        printf("\nLe chiffre est plus petit !!\n\n\n");
        nbCoup++;
        }

        else
        printf("\n\n\nBravo !!Vous avez trouvez le nombre mystere en %ld coups!!\n\n\n\n", nbCoup);

                } while(nombreEntre != nombreMystereNiv2);



            break;



            case 3:

                printf("Vous avez choisi : niveau 3.\n\n\n");
                printf("Appuyer sur ENTREE pour commencez le jeu !!\n\n\n");
                getch();
                system("CLS");
                nombreMystereNiv3 = (rand() % (MaxNiv3 - Min + 1)) + Min;

                            do
                {
        printf("Entrez un nombre : ");
        scanf("%ld", &nombreEntre);

        if (nombreEntre < nombreMystereNiv3)
        {
        printf("\nLe chiffre est plus grand !!\n\n\n");
        nbCoup++;
        }

        else if (nombreEntre > nombreMystereNiv3)
        {
        printf("\nLe chiffre est plus petit !!\n\n\n");
        nbCoup++;
        }

        else
        printf("\n\n\nBravo !!Vous avez trouvez le nombre mystere en %ld coups!!\n\n\n\n", nbCoup);

                } while(nombreEntre != nombreMystereNiv3);


                break;


                case 4:

                printf("Vous avez choisi : niveau 4.\n\n\n");
                printf("Appuyer sur ENTREE pour commencez le jeu !!\n\n\n");
                getch();
                system("CLS");
                nbrMystereNiv4 = (rand() % (MaxNiv4 - Min + 1)) + Min;

                            do
                {
        printf("Entrez un nombre : ");
        scanf("%ld", &nombreEntre);

        if (nombreEntre < nbrMystereNiv4)
        {
        printf("\nLe chiffre est plus grand !!\n\n\n");
        nbCoup++;
        }

        else if (nombreEntre > nbrMystereNiv4)
        {
        printf("\nLe chiffre est plus petit !!\n\n\n");
        nbCoup++;
        }

        else
        printf("\n\n\nBravo !!Vous avez trouvez le nombre mystere en %ld coups!!\n\n\n\n", nbCoup);

                } while(nombreEntre != nbrMystereNiv4);


                break;


                case 5:

                printf("Vous avez choisi : niveau 5.\n\n\n");
                printf("Appuyer sur ENTREE pour commencez le jeu !!\n\n\n");
                getch();
                system("CLS");
                nbrMystereNiv5 = (rand() % (MaxNiv5 - Min + 1)) + Min;

                            do
                {
        printf("Entrez un nombre : ");
        scanf("%ld", &nombreEntre);

        if (nombreEntre < nbrMystereNiv5)
        {
        printf("\nLe chiffre est plus grand !!\n\n\n");
        nbCoup++;
        }

        else if (nombreEntre > nbrMystereNiv5)
        {
        printf("\nLe chiffre est plus petit !!\n\n\n");
        nbCoup++;
        }

        else
        printf("\n\n\nBravo !!Vous avez trouvez le nombre mystere en %ld coups!!\n\n\n\n", nbCoup);

                } while(nombreEntre != nbrMystereNiv5);



                break;


                case 6:

                printf("Vous avez choisi : niveau 6.\n\n\n");
                printf("Appuyer sur ENTREE pour commencez le jeu !!\n\n\n");
                getch();
                system("CLS");
                nbrMystereNiv6 = (rand() % (MaxNiv6 - Min + 1)) + Min;

                            do
                {
        printf("Entrez un nombre : ");
        scanf("%ld", &nombreEntre);

        if (nombreEntre < nbrMystereNiv6)
        {
        printf("\nLe chiffre est plus grand !!\n\n\n");
        nbCoup++;
        }

        else if (nombreEntre > nbrMystereNiv6)
        {
        printf("\nLe chiffre est plus petit !!\n\n\n");
        nbCoup++;
        }

        else
        printf("\n\n\nBravo !!Vous avez trouvez le nombre mystere en %ld coups!!\n\n\n\n", nbCoup);

                } while(nombreEntre != nbrMystereNiv6);



                break;


                case 7:

                printf("Vous avez choisi : niveau 7.\n\n\n");
                printf("Appuyer sur ENTREE pour commencez le jeu !!\n\n\n");
                getch();
                system("CLS");
                nbrMystereNiv7 = (rand() % (MaxNiv7 - Min + 1)) + Min;

                            do
                {
        printf("Entrez un nombre : ");
        scanf("%ld", &nombreEntre);

        if (nombreEntre < nbrMystereNiv7)
        {
        printf("\nLe chiffre est plus grand !!\n\n\n");
        nbCoup++;
        }

        else if (nombreEntre > nbrMystereNiv7)
        {
        printf("\nLe chiffre est plus petit !!\n\n\n");
        nbCoup++;
        }

        else
        printf("\n\n\nBravo !!Vous avez trouvez le nombre mystere en %ld coups!!\n\n\n\n", nbCoup);

                } while(nombreEntre != nbrMystereNiv7);


                break;



                        case 8:

                printf("Vous avez choisi : Boss final.\n\n\n");
                printf("Appuyer sur ENTREE pour commencez le jeu !!\n\n\n");
                getch();
                system("CLS");
                nbrMystereBoss = (rand() % (MaxBoss - Min + 1)) + Min;

                            do
                {
        printf("Entrez un nombre : ");
        scanf("%ld", &nombreEntre);

        if (nombreEntre < nbrMystereBoss)
        {
        printf("\nLe chiffre est plus grand !!\n\n\n");
        nbCoup++;
        }

        else if (nombreEntre > nbrMystereBoss)
        {
        printf("\nLe chiffre est plus petit !!\n\n\n");
        nbCoup++;
        }

        else
        printf("\n\n\nBravo !!Vous avez trouvez le nombre mystere en %ld coups!!\n\n\n\n", nbCoup);

                } while(nombreEntre != nbrMystereBoss);


                break;


            default:

            printf("Syntax error !!! You exit the programme !!!\n\n\n\n");
            return 0;
                }

        printf("Voulez-vous recommencez un partie ?\n\n1. Oui (recommencez).\n2. Non (quitter).\n\n"
               "\n\nVotre choix est le numero ");
        scanf("%ld", &retour);
        system("pause");

        }
    }


    2 joueur.c

    #include <stdio.h>
    #include <stdlib.h>
    #include "2 joueur.h"

    long _2joueur()
    {
            long nbrEntreeJoueur_1 = 0, nbrEntreeJoueur_2 = 0, nbCoup = 1;
            long choixDifficulte_2joueur = 0, retour = 1;

            while(retour == 1)
            {

            printf("Vous avez choisi : 2 joueurs.\n\n\n\n");

            printf("Il n'y a pas de limite donc decider du nombre maximum !!!\n\n\n\n");

            printf("Joueur 1, Entree le nombre mystere : ");
            scanf("%ld", &nbrEntreeJoueur_1);
            system("CLS");

            do
                {
        printf("Entrez un nombre : ");
        scanf("%ld", &nbrEntreeJoueur_2);

        if (nbrEntreeJoueur_2 < nbrEntreeJoueur_1)
        {
        printf("\nLe chiffre est plus grand !!\n\n\n");
        nbCoup++;
        }

        else if (nbrEntreeJoueur_2 > nbrEntreeJoueur_1)
        {
        printf("\nLe chiffre est plus petit !!\n\n\n");
        nbCoup++;
        }

        else
        printf("\n\n\nBravo !!Vous avez trouvez le nombre mystere en %ld coups!!\n\n\n\n", nbCoup);

                } while(nbrEntreeJoueur_2 != nbrEntreeJoueur_1);

            printf("Voulez-vous recommencez une partie ?\n\n1. Oui (recommencez).\n2. Non (quitter).\n\n"
               "\n\nVotre choix est le numero ");
        scanf("%ld", &retour);
        system("pause");
            }

    }


    regles.c

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

    long regles()
    {

            long choixRegles = 0, retour = 1;

            while(retour == 1)
            {

            printf("Vous avez choisi : Regles.\n\n\n\n");

            printf("Que voulez-vous faire :\n\n\n");

            printf("1. Regles pour le jeu solo.\n");
            printf("2. Regles pour le jeu multijoueur.\n\n");

            printf("Votre choix est le numero ");
            scanf("%ld", &choixRegles);
            printf("\n\n\n");

            switch (choixRegles)
            {
                case 1:

                printf("Vous avez choisi : Regles pour le jeu solo.\n\n\n\n");

                printf("La regle est simple :\n"
                       "\nL'ordinateur choisi un nombre suivant le niveaux de difficulte.\n"
                       "Puis vous devez le deviner.\n\n\n");

                break;

                case 2:

                printf("Vous avez choisi : Regles pour le jeu multijoueur.\n\n\n\n"

                       "C'est un jeu qui se joue à 2.Le premier joueur rentre le nombre secret.\n"
                       "Le second doit deviner le nombre que le premier a rentrer.\n\n\n");
                break;

                default:
                printf("Syntax error !!! You exit the programme !!!\n\n\n\n");
                return 0;
            }

            printf("Voulez vous retourner au sommaire ?\n\n"
                   "1. Oui (retour au sommaire).\n2. Non (quitter).\n\n"
                   "\n\nVotre choix est le numero ");
            scanf("%ld", &retour);
            system("pause");

            }

    }


    voila
    merci de vos reponses!
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      12 octobre 2006 à 19:03:10

      un programme ne peut être considéré comme correct avec du scanf() non "sécurisé", ce qui est difficile à maîtriser.

      En effet ton projet à l'air bien mais remplace les scanf() par du fgets():
      http://www.siteduzero.com/tuto-3-11181-1-c-realiser-des-saisies-securisees-grace-a-fgets.html
      • Partager sur Facebook
      • Partager sur Twitter
        12 octobre 2006 à 20:01:38

        Pas besoin de retaper tout le code pour chaque niveau... seuls le chiffre du niveau et la valeur maximale changent. L'utilisation du switch est approprié mais très très mal mis a profit..

        fflush(stdin);
        scanf("%d", &numNiveau);

        min = 1;

        switch(numNiveau)
        {
            case 1:
               Max = 100;
               break;
            case 2:
               Max = 1000;
               break;
            //etc
        }

        nombreMystere = (rand() % (Max - Min + 1)) + Min;

        printf("Vous avez choisi : niveau %d.\n\n\n", numNiveau);
        printf("Appuyer sur ENTREE pour commencez le jeu !!\n\n\n");
        getch();
        system("CLS");

        //etc.. le code est le meme pour chaque niveau, le taper une seule fois suffit.

        • Partager sur Facebook
        • Partager sur Twitter
        Inkamath on GitHub - Interpréteur d'expressions mathématiques. Reprise du développement en cours.
          12 octobre 2006 à 20:47:57


          fflush(stdin);


          => Moui, comportement indéterminé.
          • Partager sur Facebook
          • Partager sur Twitter
            12 octobre 2006 à 20:52:46

            Citation : Octal


            fflush(stdin);



            => Moui, comportement indéterminé.



            C'est toujours mieux que de ne rien mettre.. et c'est suffisant pour un débutant.
            • Partager sur Facebook
            • Partager sur Twitter
            Inkamath on GitHub - Interpréteur d'expressions mathématiques. Reprise du développement en cours.
              12 octobre 2006 à 20:56:16

              Citation : octal


              fflush(stdin);



              => Moui, comportement indéterminé.



              excuse mais je comprend pas trop ce que tu veux dire !!!
              et pas trop sympas!!!
              edit: au fait c'est quoi fflush(stdin) j'en ai deja entendu parle mais c'est pas comme scanf mais "securise"!!
              merci
              • Partager sur Facebook
              • Partager sur Twitter
                12 octobre 2006 à 21:04:08

                fflush(stdin);
                Cette fonction permet de vider le flux d'entrée standard (les caractères saisis contenus dans le buffer). Si une fonction d'entrée a échoué, elle laisse des caractères dans le buffer. En utilisant cette fonction avant chaque fonction d'entrée, on s'assure que les caractères potentiellement présent dans le buffer ne perturberont pas la nouvelle saisie. Cela ne garantie en rien le bon fonctionnement de la fonction scanf, mais évite tout simplement le type d'erreur le plus souvent rencontré par les débutants avec les fonctions d'entrée standard.
                • Partager sur Facebook
                • Partager sur Twitter
                Inkamath on GitHub - Interpréteur d'expressions mathématiques. Reprise du développement en cours.
                  12 octobre 2006 à 21:11:01

                  ok, je crois qu'on l'utilise quand ya scanf("%s");
                  pour eviter de revoir les mots dans la suite si on a tape des espaces
                  c'est dans le tuto de kroops
                  edit:
                  j'ai changer et tester ca marche!!
                  1 joueur.c(le reste ne change pas!)

                  #include <stdio.h>
                  #include <stdlib.h>
                  #include <time.h>
                  #include "1 joueur.h"

                  long ljoueur ()
                  {
                                  //Les variables:
                      long Max = 0, retour = 1, nbCoup = 1, choixDifficulte = 0;
                      const long Min = 1;
                      long nombreMystere = 0, nombreEntre = 0, choixMenu = 0;


                      while(retour == 1)
                      {


                          printf("Vous avez choisi : 1 joueur.\n\n\n\n");
                          printf("Choisissez le niveau de difficulte :\n\n\n");

                          printf("Niveau 1 : tres facile (de 1 a 100) :\n");
                          printf("Niveau 2 : facile (de 1 a 1 000) :\n");
                          printf("Niveau 3 : moyen (de 1 a 10 000) :\n");
                          printf("Niveau 4 : assez difficile (de 1 a 100 000) :\n");
                          printf("Niveau 5 : difficile (de 1 a 1 000 000) :\n");
                          printf("Niveau 6 : tres difficile (de 1 a 10 000 000) :\n");
                          printf("Niveau 7 : infernal (de 1 a 100 000 000) :\n\n");
                          printf("Boss final : de 1 a 1 000 000 000 :\n\n\n\n\n");
                          printf("Votre choix est le numero ");
                          scanf("%ld", &choixDifficulte);
                          printf("\n\n\n\n");


                          switch (choixDifficulte)
                          {
                              case 1:

                              Max = 100;
                              break;
                              case 2:
                              Max = 1000;
                              break;
                              case 3:
                              Max = 10000;
                              break;
                              case 4:
                              Max = 100000;
                              break;
                              case 5:
                              Max = 1000000;
                              break;
                              case 6:
                              Max = 10000000;
                              break;
                              case 7:
                              Max = 100000000;
                              break;
                              case 8:
                              Max = 1000000000;
                              break;
                              default:
                              printf("Syntax error !! You exit the programme !!");
                              getch();
                          }


                              printf("Vous avez choisi : niveau %ld.\n\n\n", choixDifficulte);
                              printf("Appuyer sur ENTREE pour commencez le jeu !!\n\n\n");
                              getch();
                              system("CLS");

                              srand(time(NULL));
                              nombreMystere = (rand() % (Max - Min + 1)) + Min;

                                          do
                              {
                      printf("Entrez un nombre : ");
                      scanf("%ld", &nombreEntre);

                      if (nombreEntre < nombreMystere)
                      {
                      printf("\nLe chiffre est plus grand !!\n\n\n");
                      nbCoup++;
                      }

                      else if (nombreEntre > nombreMystere)
                      {
                      printf("\nLe chiffre est plus petit !!\n\n\n");
                      nbCoup++;
                      }

                      else
                      printf("\n\n\nBravo !!Vous avez trouvez le nombre mystere en %ld coups!!\n\n\n\n", nbCoup);

                              } while(nombreEntre != nombreMystere);

                      printf("Voulez-vous recommencez un partie ?\n\n1. Oui (recommencez).\n2. Non (quitter).\n\n"
                             "\n\nVotre choix est le numero ");
                      scanf("%ld", &retour);
                      getch();
                      }   // fin de la boucle


                  } // fin de la fonction


                  voila
                  merci inakoll et aux autre sinon pour meilleur score c'est pas:
                  (genre)

                  FILE* ....
                  fopen

                  merci
                  • Partager sur Facebook
                  • Partager sur Twitter
                    12 octobre 2006 à 21:32:08

                    Oui, par exemple avec le code suivant :

                    printf("Entrez votre nom : ");
                    scanf("%s", nom);
                    printf("Entrez votre prenom : ");
                    scanf("%s", prenom);


                    Et si à l'execution on fait ceci :

                    Entrez votre nom : De France
                    Entrez votre prenom :

                    Appuyez sur ENTREE pour continuer.


                    La chaîne de caractère "nom" contiendrait "De" et prénom contiendrait "France". Tout simplement parce que la fonction scanf prend fin lorsque l'on appuie sur ENTREE. Or on ne demande a scanf de saisir qu'une seule chaîne de caractère "%s", sachant que scanf considère le caractère ESPACE comme un délimiteur, elle va donc laisser le reste des caractères non traités dans le buffer. Au second appel de la fonction, le buffer contiendra encore "France" et c'est cette chaîne qui sera directement traité par la fonction. C'est pour cela que l'utilisateur n'a pas le temps de saisir quoi que ce soit.
                    Il faut quand même savoir que ce n'est pas la seule raison qui pousse scanf à laisser des caractères dans dans le buffer. Une erreur de conversion peut aussi causer ce type d'erreur. Les débutants utilisent fflush(stdin) souvent avant chaque appel de la fonction scanf pour éviter cette erreur. Mais encore une fois, cela ne garantie en rien le bon fonctionnement de la fonction scanf, une erreur de conversion est toujours possible. Il est difficile d'utiliser scanf d'une manière sure. C'est pourquoi beaucoup de programmeurs utilisent d'autres fonctions d'entrée (comme gets, fgets) et des fonctions de conversion pour parvenir au même résultat que scanf mais de manière plus sure. Il y a plusieurs tutos traitant de ces méthodes dans la catégories "Vos Tutos"..
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Inkamath on GitHub - Interpréteur d'expressions mathématiques. Reprise du développement en cours.

                    tp plus moins tres ameliore!!

                    × 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