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

Langage C++ Discussion :

[CONSEIL] POO et prog structurée.


Sujet :

Langage C++

  1. #1
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2008
    Messages
    51
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2008
    Messages : 51
    Points : 33
    Points
    33
    Par défaut [CONSEIL] POO et prog structurée.
    Bonjour,

    Après avoir fait une petite année de C, mon premier langage de programmation, je suis carrément formaté à la prog structurée.
    Mes petites fonctions qui font mes petites taches, qui traitent les données etc... C'est clair, net et organisé.

    Je me suis lancé dans le C++ il y a peu et j'aime beaucoup le concepte de la POO, j'y vois dessuite beaucoup d'applications, donner des attributs et des méthodes aux objets c'est magnifique MAIS, j'ai un soucis de "réalisation".

    Je m'explique rapidement :

    Je désire réaliser un mini jeux de combat (en console) suivant (de loins) les règles Advanced Donjon & Dragon pour me faire pratiquer.

    Le concept est simple :
    Classe:
    Personnage

    Attribut : (je ne liste que l'interressant)
    m_chanceToucher

    Methode: (je ne liste que l'interressante)
    Personnage::toucher()

    Cette méthode tire au hazard 2d12 (deux dés de 12 faces) et applique au résultat une chance au toucher de x points, dépendant de l'arme que mon personnage tient en main (une classe arme existe, avec comme attribut m_modificateurTouche). Si le résultat est > 12 les dégats sont portés à l'adversaire.

    Ma question est : dois-je créer une fonction de tirage aléatoire avec en entrée les valeur de dés et face (nombre de dés, et nombre de face)
    et ce servir de ce résultat dans ma méthode de classe Personnage.

    Ou dois-je m'appliquer à la POO et l'integrer dans ma méthode directement? ce que je trouve contraignant car je dois la réécrire pour chaque Classe qui l'utiliserais. (ce générateur de dés peut servir pour l'utlisation des dégats, des sorts, des montée de niveau, et bien d'autre chose dans un jeu basé sur AD&D).

    Je pourrais aussi bien crée un objet "Dés" dont une méthode serait tirage, avec comme attribut face et nombre de tirage (de dés)

    Que me conseillez vous si je veux absoluement respecter la philosophie POO?


    Lors d'une fonction classique, si je veux l'utiliser dans les méthodes de certaines classes, dois-je faire quelque chose de particulier? (comparer au C, on devait la déclarer avant le main)

    Dsl si mes questions semblent absurde, car je n'ai pas finit la totalité des tutos disponibles mais j'aime avancer doucement et surement.

  2. #2
    Membre du Club
    Inscrit en
    Août 2006
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 40
    Points : 43
    Points
    43
    Par défaut
    Tu as très bien le droit de continuer à créer des fonctions en C++, faut pas se dire "J'y vais seulement avec des classes !".
    Alors ouais, tu pourrais créer une classe pour les Dées, mais sinon tu peux utiliser Boost qui te propose des générateurs de nombre aléatoires. Tu peux te renseigner de ce côtés: http://matthieu-brucher.developpez.c.../boost/random/
    Comme ça tu pourras appeller Boost dans tes méthodes.
    Utiliser Boost serait une très bonne habitude à prendre en C++ je pense. ^^

  3. #3
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2008
    Messages
    51
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2008
    Messages : 51
    Points : 33
    Points
    33
    Par défaut
    Ah, boost arrive plus tot que prévue dans mon cursus :p bien quand faut s'y mettre, faut s'y mettre

    Merci pour les infos

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    399
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 399
    Points : 413
    Points
    413
    Par défaut
    Salout, oui tu peux tout a fait utiliser une fonction qui est en dehors de ta classe. Pour l'utiliser il suffit tout simplement qu'elle soit déclarée avant son utilisation.

    Concernant la génération de nombre pseudo aléatoire, tu peux utiliser la même syntaxe que pour le C en incluant cstdlib.
    SPARK
    Moteur de particule C++ opensource avec modules de rendu OpenGL, Irrlicht et SFML

  5. #5
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Points : 1 543
    Points
    1 543
    Par défaut
    Salut,

    Personnellement je créerais sans doute une classe Dice, même si ce n'est que pour encapsuler Boost.Random.
    En fait je ferais même une interface Dice_ABC que manipulerait tout le reste, avec pour implémentation Dice, pour tous les avantages que ça apporte dans ce cas. Un exemple : pour écrire un test unitaire qui vérifie le comportement en cas d'attaque réussie on ne va pas appeler 100 fois la méthode pour espérer avoir dans le tas une réussite, mais on va instancier une classe Character en lui donnant une implémentation spéciale de Dice_ABC pour tricher avec le hasard et forcer une réussite du premier coup.

    Quand on fait des tests unitaires on n'aime pas beaucoup le hasard et on essaye de le découpler le plus possible du reste.
    Bon ça sort peut-être du cadre de la question et de toute façon comme souvent autant commencer par la solution la plus simple possible et remanier quand le besoin s'en fait sentir...

    MAT.

  6. #6
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Ce qui me semble plus important qu'une simple classe de dé, qui effectivement n'est qu'une surcouche très mince au dessus des fonctions de tirage aléatoire, ce serait d'avoir un moteur de lancer de dé, qui soit capable de comprendre (idéalement à la compilation, avec une syntaxe le plus proche possible, dans un premier temps dynamiquement) les syntaxes genre :
    1d20, 2d6+2, 1d10 ouvert, 6k3... et toutes les conventions de lancer de dé de ton jeu (D&D reste assez sage sur ce point)
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  7. #7
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2008
    Messages
    51
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2008
    Messages : 51
    Points : 33
    Points
    33
    Par défaut
    Citation Envoyé par JolyLoic Voir le message
    Ce qui me semble plus important qu'une simple classe de dé, qui effectivement n'est qu'une surcouche très mince au dessus des fonctions de tirage aléatoire, ce serait d'avoir un moteur de lancer de dé, qui soit capable de comprendre (idéalement à la compilation, avec une syntaxe le plus proche possible, dans un premier temps dynamiquement) les syntaxes genre :
    1d20, 2d6+2, 1d10 ouvert, 6k3... et toutes les conventions de lancer de dé de ton jeu (D&D reste assez sage sur ce point)
    En effet c'est très interressant ce que tu me dis là, ca me simplifierait la vie.

    Si je comprend bien :

    En gros je dois créer une bibliothèque .h qui me permette de traiter des éléments tel que 1d10 avec leur tirage associés?

    puis appeller une fonction blabla(1d10) et elle me renvoit le résultat tout tiré?

  8. #8
    Membre éprouvé
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Points : 1 220
    Points
    1 220
    Par défaut
    ça semble effectivement ça.

    un peu de gestion de string fait toujours du bien (allez, indice :split).
    Méphistophélès
    Si la solution ne résout pas votre problème, changez le problème...
    Cours et tutoriels C++ - FAQ C++ - Forum C++.

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

Discussions similaires

  1. difference entre POO et P structuré
    Par asmar dans le forum VB.NET
    Réponses: 1
    Dernier message: 01/04/2009, 16h55
  2. Conseils sur conception de structure de données
    Par AP dans le forum Débuter
    Réponses: 1
    Dernier message: 26/08/2008, 20h07
  3. Simuler une POO avec des structures?
    Par MPEG4 dans le forum C
    Réponses: 10
    Dernier message: 21/07/2008, 13h35
  4. Je débute -> Conseils sur mon prog (code, lisibilité etc.)
    Par asxasx dans le forum Interfaces Graphiques en Java
    Réponses: 5
    Dernier message: 22/03/2007, 08h31
  5. [POO] Créer une structure de données
    Par zulot dans le forum Langage
    Réponses: 10
    Dernier message: 15/08/2006, 12h51

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