IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Réduction de code


Sujet :

C++

  1. #1
    Membre habitué
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Mai 2014
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 227
    Points : 162
    Points
    162
    Par défaut Réduction de code
    Bonjour à tous , je code un comparateur de caractéristiques pour un jeu nommé Dofus.
    Je compte chargé tout les items contenant les caractéristiques et donc je ne les écrit pas en dure dans le code pour éviter de devoir recompiler à chaque ajouts.
    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
    #ifndef Stat_included
    #define Stat_included
     
    class Stat
    {
    public:
     
        Stat( int v, int i, short w, short e, short f, short wa, short a, short p, short ac, short m, short pr, short r, short in, short d, short dn, short de, short df, short dw, short da, short dc,
              short dp, short rn, short re, short rf, short rw, short ra, short rfn, short rfe, short rff, short rfw, short rfa, short apr, short mpr, short apd, short mdp, short h, short ch,
              short t, short l );
     
    private:
     
        int const stat_vitality;
        int const stat_initiative;
        short const stat_wisdom;
        short const stat_earth;
        short const stat_fire;
        short const stat_water;
        short const stat_air;
        short const stat_power;
        short const stat_actions;
        short const stat_movements;
        short const stat_prospecting;
        short const stat_reach;
        short const stat_invocation;
        short const stat_damage;
        short const stat_damage_neutral;
        short const stat_damage_earth;
        short const stat_damage_fire;
        short const stat_damage_water;
        short const stat_damage_air;
        short const stat_damage_critical;
        short const stat_damage_pushback;
        short const stat_resistance_neutral;
        short const stat_resistance_earth;
        short const stat_resistance_fire;
        short const stat_resistance_water;
        short const stat_resistance_air;
        short const stat_resistance_fixed_neutral;
        short const stat_resistance_fixed_earth;
        short const stat_resistance_fixed_fire;
        short const stat_resistance_fixed_water;
        short const stat_resistance_fixed_air;
        short const stat_actions_point_reduction;
        short const stat_movements_point_reduction;
        short const stat_actions_point_dodge;
        short const stat_movements_point_dodge;
        short const stat_heal;
        short const stat_critical_hit;
        short const stat_tackle;
        short const stat_leak;
     
    };
     
    #endif //Stat_included
    Ce n'est pas une erreur en soient mais le problème est que le constructeur est beaucoup trop long. Y'a-t-il une possibilité de réduire ce code ? Je vous remercie

  2. #2
    Expert éminent sénior

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 031
    Points : 11 379
    Points
    11 379
    Billets dans le blog
    10
    Par défaut
    Salut tu peux peut-être découper ta structure en sous structures? (BaseStats, DamageStats, ResistanceStats, ...) et avoir une structure qui les chapeauterait?
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Etant donné que toutes ces stats sont particulières et n'ont rien à voir entres elles, tu finiras fatalement par toutes les écrire.
    Tu peux les découper comme dit ci-dessus, mais ça ne changera strictement rien au fait que tu dois toutes les écrire...
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Points : 1 176
    Points
    1 176
    Par défaut
    Tu peux faire une std::map< std::string, int > où tu rajoutes tes stats:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    std::map< std::string, int > stats;
     
    stats[ "v" ] = 1;
    stats[ "i" ] = 50;
    etc..

    tu peux la rajouter dans ta classe stats. Et faire des fonctions genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void Stat::addStat( const std::string  & statName, int value )
    {
        this->statlist_[ statName ] = value;
    }
    Tu peux les charger dynamiquement depuis un fichier du coup, et effectivement, t'auras rien à compiler si tu en rajoutes une.

  5. #5
    Expert confirmé
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Points : 4 182
    Points
    4 182
    Par défaut
    En général on a tout de même besoin de spécifier une valeur par défaut pour le paramètre. On peut certes choisir une valeur arbitraire et l'appliquer à tout le monde, mais pas sûr qu'elle convienne à tous les paramètres...

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    L'utilisation d'une map, ou n'importe quelle structure, couplée à un fichier peut être intéressante, mais il faut s'assurer d'avoir des protections en cas de données corrompues (assert, ...), parce que le compilateur ne pourra plus t'indiquer que la stat à laquelle tu veux accéder n'existe pas/plus.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  7. #7
    Expert éminent sénior

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 031
    Points : 11 379
    Points
    11 379
    Billets dans le blog
    10
    Par défaut
    Citation Envoyé par Bousk Voir le message
    L'utilisation d'une map, ou n'importe quelle structure, couplée à un fichier peut être intéressante, mais il faut s'assurer d'avoir des protections en cas de données corrompues (assert, ...), parce que le compilateur ne pourra plus t'indiquer que la stat à laquelle tu veux accéder n'existe pas/plus.
    Bien vu, je propose l'association enum + std::array, pour remplacer la std::map (par contre pour le fichier...)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    enum class StatType
    {
      eWisdom,
      eEarth,
      eFire,
      eZater,
      ...
     eCcount
    };
    std::array< short, size_t( StatType::eCount ) > m_values;
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  8. #8
    Membre habitué
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Mai 2014
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 227
    Points : 162
    Points
    162
    Par défaut
    Je vous remercie pour vos réponses j'aurais appris d'autres manières de faire je pense néanmoins rester sur mon modèle actuel ^^"

    Sujet résolue

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Compression & Réduction du code
    Par Arnaud F. dans le forum jQuery
    Réponses: 2
    Dernier message: 28/08/2010, 13h01
  2. réduction de code
    Par levaron dans le forum Langage
    Réponses: 3
    Dernier message: 02/06/2009, 09h16
  3. Réduction de code
    Par NeMo_O dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 21/08/2008, 14h38
  4. réduction de code
    Par lefelinherbivore dans le forum ActionScript 1 & ActionScript 2
    Réponses: 1
    Dernier message: 24/04/2008, 21h49
  5. Réduction de code
    Par mouaa dans le forum VBA Access
    Réponses: 13
    Dernier message: 27/12/2007, 14h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo