Partage
  • Partager sur Facebook
  • Partager sur Twitter

Votre avis sur le code d'un débutant

    23 novembre 2017 à 19:46:45

    Bien le bonjour,

    Je suis en ce moment le cours "Apprenez à programmer en C !" de Mathieu Nebra et je viens de finir le TP Plus ou Moins, et j'aimerais un avis sur le code source que je viens de faire pour que j'améliore mes compétences :

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <windows.h>
    
    int main()
    {
        int Test = 0;
        const int Min = 1;
        int Max = 0;
        int NombreMystere = 0;
        int NombreDeJoueur = 0;
        int Reponse = 0;
        int Coups = 0;
        int Menu = 2;
        int Menu2 = 1;
        int Gagne = 0;
        int Difficulte = 0;
    
        printf("PLUS OU MOINS, Le but est de trouve le nombre cache qui est aleatoire.\n Veuillez selectionnez votre mode de jeux : 1 joueur = 1, 2 joueurs = 2\n");
        scanf("%d", &NombreDeJoueur);
        if (NombreDeJoueur == 42)
        {
            printf("Salut de Skalefor\n");
            Sleep(1500); //Commande qui demande #include <windows.h>; il permet de faire un minuteur
            return 0;
        }
        else if (NombreDeJoueur == 2)
        {
            while (Menu == 2)
            {
            NombreMystere = 0;
            Coups = 0;
            Menu2 = 0;
            Gagne = 0;
    
            printf("Joueur 2 Mettez votre nombre.\n");
            scanf("%d", &NombreMystere);
            system("cls");
            printf("Joueur 1 Vous pouvez commencer.\n");
            while (Gagne == 0)
            {
            scanf("%d", &Reponse);
            if (Reponse == NombreMystere)
            {
                Coups++;
                printf("Bravo, Vous avez gagne en %d\n", Coups);
                Gagne = 1;
            }
            else if (Reponse > NombreMystere)
            {
                Coups++;
                printf("C'est moins !\n");
            }
            else if (Reponse < NombreMystere)
            {
                Coups++;
                printf("C'est plus !\n");
            }
            }
            printf("Vous voulez rejouer ou quitter ? : Quitter = 1, Rejouer = 2.\n");
            scanf("%d", &Menu);
            if (Menu == 1)
            {
                return 0;
            }
            }
        }
        else if (NombreDeJoueur == 1)
        {
            while (Menu2 == 1)
            {
            NombreMystere = 0;
            Menu2 = 0;
            Max = 0;
            Gagne = 0;
            Coups = 0;
    
            printf("Choisissez votre mode de difficulte ! :\nFacile = 1 (Entre 1 et 100)\nNormal = 2 (Entre 1 et 1000)\nDifficile = 3 (Entre 1 et 10000)\n");
            scanf("%d", &Difficulte);
            if (Difficulte == 1)
            {
                Max = 100;
                printf("Votre mode de difficulte : Facile\n");
            }
            else if (Difficulte == 2)
            {
                Max = 1000;
                printf("Votre mode de difficulte : Normal\n");
            }
            else if (Difficulte == 3)
            {
                Max = 10000;
                printf("Votre mode de difficulte : Difficile\n");
            }
            srand(time(NULL));
            NombreMystere = (rand() % (Max - Min + 1)) + Min;
    
            printf("Vous pouvez commencer !\n");
            while (Gagne == 0)
            {
            scanf("%d", &Reponse);
            if (Reponse == NombreMystere)
            {
                Coups++;
                printf("Bravo, Vous avez gagne en %d\n", Coups);
                Gagne = 1;
            }
            else if (Reponse > NombreMystere)
            {
                Coups++;
                printf("C'est moins !\n");
            }
            else if (Reponse < NombreMystere)
            {
                Coups++;
                printf("C'est plus !\n");
            }
            }
            printf("Vous voulez rejouer ou quitter ? = Quitter = 2, Rejouer = 1.\n");
            scanf("%d", &Menu2);
            if (Menu2 == 2)
            {
                return 0;
            }
            }
        }
    }
    

    Merci encore, ^^

    -
    Edité par Skalefor 24 novembre 2017 à 12:24:51

    • Partager sur Facebook
    • Partager sur Twitter
    Hier, j'ai dis une blague à un parisien il n'a pas ris
      24 novembre 2017 à 0:40:07

      Bonjour,

      Quelques commentaires rapides...

      Il y a de nombreuses erreurs d'indentation qui empêchent de voir la structure du code (l'imbrication des boucles et conditions).

      Le programme affiche des fautes d'orthographe.

      Il est louche de voir un appel à srand en plein code, ça devrait être dans les premières instructions.

      L'incrémentation de Coups n'est pas faite là où logiquement elle le devrait.

      • Partager sur Facebook
      • Partager sur Twitter
        24 novembre 2017 à 14:52:03

        Bonjour,

        Fais très attention à la façon dont tu écris ton code, comme l'a dit Marc dans le commentaire précédent l'indentation (décalé d'une tabulation)

        est très importante car elle permet de rendre ton code plus lisible, plus agréable à lire.

        Ton bloc "if (difficulte)" devrait être défini avant le bloc "nombre de joueur == 2" car de la manière dont tu as procédé les MAX variables (100, 1000 et 10000) ne sont pas pris en compte dans le mode de jeu "2 joueurs" or la difficulté doit être la même que ce soit en mode 1 joueur ou en mode 2 joueurs.

        Pour le premier While, tu n'as pas besoin de re initialiser tes variables car tu l'as déjà fait lors de la déclaration des variables, donc ça te rajoute des lignes de code inutilement.

        Le 2ème while (variable booléenne) tu n'as pas besoin de préciser "Gagne == 0" dans la condition de ton while car tu as déjà définit Gagne à 0 dans la déclaration de tes variables. Concernant le compteur de coups, tu pourrais le mettre après le dernier ELSE IF, plutôt que le mettre 3 fois. Car le nombre de coups est pris en compte lorsque tu fais un tour de boucle, donc juste après ton ELSE IF avant de revenir au début du WHILE et donc d'entamer un autre tour.

        Pareil pour WHILE (MENU2 == 1), tu n'as pas besoin de ré initialiser tes variables qui l'ont déjà été tout au début. Fais attention au nom de tes variables, pour MENU2 c'est assez clair mais pour le MENU on ne sait pas vraiment à quoi il correspond (choix du nombre de joueurs ? etc...). Pour le choix du niveau de difficulté, un simple conseil d'optimisation de lignes de code: je te conseille d'utiliser un SWITCH plutôt que des IF, ELSE IF, lorsque tu as plusieurs cas qui se répétent comme ça. Exemple:

        Switch(difficulte)

        { case 1: 

        Max = 100;

        printf("Votre mode de difficulte : Normal\n");

        break;

        case 2:

        Max = 1000;

        printf("Votre mode de difficulte : Normal\n");

        break;

        etc.... }

        Voila ce sont tous les conseils que je peux te donner :) à toi de jouer

        Marc Mongenet a écrit:

        "Il est louche de voir un appel à srand en plein code, ça devrait être dans les premières instructions."

        Bonjour Marc, je ne vois pas en quoi il est louche de définir son nombreMystere avec srand en plein code, lorsque l'appel

        se trouve au bon endroit. Le nombre mystere doit être généré automatiquement lorsque le joueur choisis le mode 1 joueur, et pas tout au début du programme sinon il sera généré pour tout le jeu quelque soit le mode de joueur choisis.

        -
        Edité par SalimMosbahi 24 novembre 2017 à 15:00:07

        • Partager sur Facebook
        • Partager sur Twitter
          24 novembre 2017 à 15:30:22

          SalimMosbahi a écrit:

          "Il est louche de voir un appel à srand en plein code, ça devrait être dans les premières instructions."

          Bonjour Marc, je ne vois pas en quoi il est louche de définir son nombreMystere avec srand en plein code, lorsque l'appel

          se trouve au bon endroit. Le nombre mystere doit être généré automatiquement lorsque le joueur choisis le mode 1 joueur, et pas tout au début du programme sinon il sera généré pour tout le jeu quelque soit le mode de joueur choisis.

          C'est rand qui génère un nombre mystère, pas srand. La fonction srand réinitialise le générateur, avec une graine qui n'a ici rien d'aléatoire puisqu'il s'agit du timestamp Unix.

          • Partager sur Facebook
          • Partager sur Twitter
            24 novembre 2017 à 15:31:48

            ah autant pour moi j'ai peut être lu trop vite je croyais que tu parlais de la définition du nombre mystère avec RAND. En effet oui le SRAND doit être défini dans la déclaration de variables.

            Autant pour moi ^^'

            • Partager sur Facebook
            • Partager sur Twitter

            Votre avis sur le code d'un débutant

            × 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