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 :

Petit probleme de polymorphisme


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 3
    Par défaut Petit probleme de polymorphisme
    Bonjour,

    J'ai un petit probleme pour lequel je n'arrive pas a trouver de solution elegante.

    Dans un petit jeu que j'ecris pour m'amuser et apprendre, j'utilise courament une classe abstraite pour fixer mes interfaces que je dérive ensuite pour creer chaque objet avec un minimum d'effort. Jusque la tout va bien.

    Le probleme c'est que je voudrais pourvoir creer chaque objet en utilisant juste un parametre. Bon comme ca doit pas etre vraiment clair voila un exemple concret. Imaginons que je veuille creer des spells. je cree une classe abstraite CSpell qui contient les element de base d'un spell et une fonction vituel "effet". Ensuite je derive une classe pour chaque spell que je veux rajouter par exemple CSpellSoinMineur.

    Maintenant chaque objet de mon jeu peux etre appelé a creer un spell mais pour des raison de flexibilité j'aimerai pouvoir le faire a partir d'un indentifiant (basé sur un bon vieux #define SPELL_SOINMINEUR). du genre :
    CSpell * Monspell = SpellManager.GetSpell (SPELL_SOINMINEUR)

    Et la c'est le drame.

    Jusque la, la seule solution que j'ai trouve c'est d'avoir une class "manager" qui a l'aide d'un bon vieux switch case me renvois me cree la bonne classe et me renvois le pointeur mais c'est pass vraiment elegant. Je voudrait donc savoir si il y a meilleur moyen. C'est peut etre trivial (je suis loin d'etre un pro) mais j'ai pas trouvé la solution. J'ai regarde tout ce qui etait Metaprogrammation et Typelist sans vraiment trouver de solution a mon probleme meme si c'est un peu l'idée du Resource manager du tutorial.

    Merci d'avance.

    Lyth

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Il te faut une factory. Un minimum de recherche rien que sur ce forum devrait te donner pas mal de réponses / codes, et notamment quelque chose de plus élégant que le switch (à savoir une table associative qui stocke des pointeurs vers des fonctions de création des instances).

  3. #3
    Futur Membre du Club
    Inscrit en
    Mars 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 3
    Par défaut
    Merci ! j'ai trouvé c'est pil poil ce qu'il me faut. En fait je connaissait pas le nom mais je me doutais bien qu'il devais exister quelque chose. Je devrais pouvoir m'en sortir sans trop de probleme. Au pire j'ai "Modern C++ Design" qui devrais arriver dans quelques jours.

    Desolé d'avoir poser une question recurente

    Lyth

  4. #4
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 296
    Par défaut
    Tu cherches effectivement une factory. Voir la recherche avancée, cela a déjà été abordé à plusieurs reprises. J'avais même donné un lien vers une plugable factory, que je n'avais pas finie de documenter, construite autour du design de celle de MC++D/loki.

    <disgression>
    Avoir une classe par sort ne me parait pas une super idée vu qu'au final ton système sera difficilement extensible.
    Je chercherai plutôt à factoriser tout cela. Voir quels sont les divers effets chifrés possibles, et décrire ensuite un sort (dans un simple fichier chargé au démarrage p.ex.) en fonction des effets.
    Par exemple *tous* les soins impactent les PV de la cible du sort, le score de la caractéristique "PV courants" pouvant varier suivant telle ou telle formule, prendre tant de temps à incanter, tant de temps à faire effet en fonction du soin exact (léger, modéré, grand, régen, ...). L'arrêt du polymorph dispose aussi d'un effet de soin dans la famille xDD de TSR/WotC. En déplaçant la partie "dynamique" de "sort" vers "effet", le système devient beaucoup plus souple AHMA. Et en plus, la saisie des règles peut être déléguée à un non codeur qui utilisera un langage de description à vous.

    Le jour où tu rajoutes un nouveau sort (dans les vrai jdrs pizza/cassoulet (pas en même temps) les jeteurs de sorts sont toujours à même de concevoir de nouveaux sorts), pas besoin de changer les exécutables et tout recompiler.

    J'avais déjà blablater sur des sujets fort similaires => recherche avancé sur PNJ, races, ...
    </>
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  5. #5
    Futur Membre du Club
    Inscrit en
    Mars 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 3
    Par défaut
    Le probléme c'est que je me doutais bien que ca devais exister mais que je n'avais rien pour l'associer au terme de factory. Ca serait peut etre une bonne idée de rajouter une petit chapitre dans la FAQ dans le chapitre de polymorphisme afin de rediriger les gens vers les factory directement


    Pas de probleme pour ta disgression, tout les conseils sont bon a prendre. je vais aller jeter un petit coup d'oeil a tout ca. Si je comprend bien, tu préconise l'utilisation de script. C'est effectivement une chose a laquelle j'avais pensé et pas seulement pour les spells. C'est sur ma "to do" liste mais pour l'instant dans la mesure ou je ne vise pas forcement a un produit finit mais que c'est plus une facon de me former, je vais rester sur cette solution, meme si il me faut tout casser apres c'est pas bien grave.
    Mon idée de base etait qu'un objet n'avait pas a savoir quel spell il avait et de creer des objets spells avec une methode "applique toi a moi". Ainsi, le spell gére tout seul sa duré de vie, son effet etc ...
    Ca me parait etre une bonne solution au niveau de la fléxibilité. Par exemple si demain j'ai envie de faire un spell qui me teleporte a un endroit, j'ai juste a coder ca dans un nouveau spell et je n'ai pas a me soucier de modifier mes objets.

    On verra bien ce que ca donnera

    Merci encore de vos réponse.

    Lyth

  6. #6
    Membre émérite
    Homme Profil pro
    Inscrit en
    Février 2006
    Messages
    943
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 943
    Par défaut
    en effet,

    par contre si tu ne veux plus rendre 10 PV mais 12 PV tu doit tout recompiler.
    maintenant tu peux faire un MIX ou les données de chacune des sorts seraient dans un fichier et ou tes classes iraient piocher.
    mais tu perd l'avantage de rajouter des sorts a la volé.

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

Discussions similaires

  1. Petit problème de fork
    Par osmose22 dans le forum Linux
    Réponses: 7
    Dernier message: 18/03/2007, 21h10
  2. [TP]petit probleme avec solution
    Par pompompolom dans le forum Turbo Pascal
    Réponses: 1
    Dernier message: 02/12/2004, 19h48
  3. petit probleme avec l'éditeur de builder
    Par qZheneton dans le forum C++Builder
    Réponses: 2
    Dernier message: 28/10/2004, 16h19
  4. petit probleme de requete
    Par nico33307 dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 25/08/2004, 11h36
  5. petit probleme dans une requte POSTGRE SQL
    Par ghis le fou dans le forum Requêtes
    Réponses: 5
    Dernier message: 08/09/2003, 13h51

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