Partage
  • Partager sur Facebook
  • Partager sur Twitter

Agencement des classes

    21 août 2007 à 2:22:38

    Bonjour a tous :)

    Voilà, je vien de crée un mini snake. J'ai fait le minimum, mon but n'étant pas de créer un vrai jeu. C'était juste pour moi un entrainement à la POO.

    J'aurais donc aimé savoir si j'ai coder de façon "intelligente" mon programme.

    Mes classes sont elles bien agencées entre elles ?
    Comment puis je les ammeliorées ?

    En esperant que vous jeterez un coup d'oeil :)

    Ce lien vous enverra sur le système d'upload de free. J'y ai uploader mon projet en format .rar

    Merci d'avance ;)
    • Partager sur Facebook
    • Partager sur Twitter
      21 août 2007 à 10:56:57

      Il y a plusieurs choses qui ne vont pas:
      • En C++ on utilise des enum, des constantes mais pas des #define
      • A plusieurs reprises tu défini des enum mais tu les utilise comme des int ce qui rend le code moins lisible:
        1. enum{GAUCHE,DROITE,...};
        2. ...
        3. void dirige_serpent(int dir);// <- mauvais: on ne sait pas à quoi correspond ce int

        Une bonne correction est celle-ci:
        1. enum Direction { GAUCHE,...};
        2. ...
        3. void dirige_serpent(Direction dir);// <- mieux: on voit tout de suite à quoi correspond le paramètre

      • La classe Graphique s'occupe de l'objet Serpent alors qu'elle ne devrait pas: d'après son nom, j'en déduis qu'elle s'occupe des graphismes et pas du jeu, donc il vaudrait mieux faire une classe Jeu qui s'occupe de Serpent et Graphisme et fait le lien entre les deux
      • Enfin, il y a une chose qui n'est pas très clair dans ton code: qui(quelle classe) gère les parties du corps car la définition de Serpent me laisse penser qu'elle délègue cette tâche à je ne sais trop qui !

      Voilà, je n'ai fait que parcourir le code mais ces détails ont leur importance il me semble.
      • Partager sur Facebook
      • Partager sur Twitter
        21 août 2007 à 13:12:59

        1. enum Direction { GAUCHE,...};
        2. ...
        3. void dirige_serpent(Direction dir);// <- mieux: on voit tout de suite à quoi correspond le paramètre


        C'est une faute que je fais même en C. J'avais completement oublié qu'on pouvais donner un nom à une enum :euh:


        Citation : pamaury

        En C++ on utilise des enum, des constantes mais pas des #define



        Heu, ok. Mais alors comment crée des constantes sans #define (des constantes pour tout mon programme) ? o_O

        Citation : pamaury

        Enfin, il y a une chose qui n'est pas très clair dans ton code: qui(quelle classe) gère les parties du corps car la définition de Serpent me laisse penser qu'elle délègue cette tâche à je ne sais trop qui !



        C'est un oublie. Au début je voulais le gérer dans la classe serpent puis je me suis dit que la classe Graphique serais plus pratique. J'ai simplement oublier de supprimé.

        Citation : pamaury

        La classe Graphique s'occupe de l'objet Serpent alors qu'elle ne devrait pas: d'après son nom, j'en déduis qu'elle s'occupe des graphismes et pas du jeu, donc il vaudrait mieux faire une classe Jeu qui s'occupe de Serpent et Graphisme et fait le lien entre les deux



        C'était bien ça que je me disais. Au début j'ai essayé de limiter la classe Graphique qu'au rendu graphique, mais peu a peu je l'ai laissé controler la classe serpent :-°

        Donc d'après toi, je devrais crée une classe jeu ? Elle devra possèder deux attributs, serpent et graphique c'est bien ça ?

        Merci tout de même d'avoir parcouru mon code :)

        • Partager sur Facebook
        • Partager sur Twitter
          21 août 2007 à 13:20:53

          Pour les constantes:
          1. // constante globales
          2. const int g_ma_constante_globale=10;
          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            21 août 2007 à 13:49:01

            Et dans les fichiers où tu veux l'utiliser, (si tes variables ne sont pas définies dans un header) tu fais extern const int g_ma_constante_globale;
            • Partager sur Facebook
            • Partager sur Twitter
              21 août 2007 à 15:57:52

              C'est plus du picossage mais un nom a MAJUSCULE est souvent associés aux constantes.

              Cette technique amène de la lisibilité au code. Ainsi pas besoin de spécifier dans son nom que c'est une constante n'y de rechercher sa déclaration. À la limite une constante non globale* n'a pas vraiment d'utilité alors même pas besoin de la préfixer avec un "g_"

              * Je n'exclu pas les constantes de classe ou celles sous un namespace. Une constante nommée dans une fonction est très inutile : un commentaire fait aussi bien le travail et ne coûte aucune instruction supplémentaire. Les exceptions qui confirme la règle sont les constantes de classe en private.
              • Partager sur Facebook
              • Partager sur Twitter

              Agencement des classes

              × 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