Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1481 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Ou déclarer une class qui va servir à plusieurs endroits ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Ou déclarer une class qui va servir à plusieurs endroits ?

n°2134148
beuted
Posté le 01-04-2012 à 12:35:08  profilanswer
 

Salut à tous, et merci d'essayer de m'aider  :)
J'essaye de créer un petit rpg avec C++ et la bibliothèque sdl. J'ai un personnage qui se déplace sur une carte, des monstres, j'en suis à l'etape où il faut que le perso puisse taper les monstres.
Voilà pour la mise ne contexte, maintenant mon problème : mes fichiers s'organisent comme ceci :

Spoiler :


                   | personnage.h --> gererEvenements.h -->  |
Armes.h -->  |                                                             |
map.h     --> |                                                             | main.cpp
                   | pnj.h --------------------> organiserPnjs.h -->  |
(j'ai essayé de faire un schéma pour que ca soit plus clair, mais vu sa tronche je sais pas si c’était une bonne idée...)

 

Arme.h contient une classe armes qui me sert à ranger un tableau de structure "arme" contenant tout les caractéristiques de chaque armes (portée, dégâts...)
Mais je ne sais pas où définir l'objet mesArmes de type armes, sachant que je vais en avoir besoin dans "pnj" et surement dans "gererEvenements"...

 

Si je le définis directement dans armes.h (j'imagine que je vais me faire taper dessus pour avoir proposé ca) j'ai un "multiple define" à la compilation.
Si je le définis dans le main il va falloir que je le fasse remonter en paramètre je ne sais pas si c'est une bonne méthode
Peut-être qu'une classe pour organiser un tableau de trucs constants n’était pas la bonne solution ?

 

Merci d'avance pour vos reponses.

Message cité 1 fois
Message édité par beuted le 01-04-2012 à 13:17:15
mood
Publicité
Posté le 01-04-2012 à 12:35:08  profilanswer
 

n°2134152
gilou
Modérateur
Modzilla
Posté le 01-04-2012 à 13:48:32  profilanswer
 

beuted a écrit :

Si je le définis directement dans armes.h (j'imagine que je vais me faire taper dessus pour avoir proposé ca) j'ai un "multiple define" à la compilation.

Car tu n'emploies sans doute pas la technique standard  
#ifndef MYHEADER_H
#define MYHEADER_H
. . . // This will be seen by the compiler only once  
#endif /* MYHEADER_H */
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2134153
beuted
Posté le 01-04-2012 à 13:52:12  profilanswer
 

Si si je fais ca systématiquement, en fait je viens de trouver comment faire en sorte de ne pas avoir ce bug sur un autre forum :  
http://www.developpez.net/forums/d [...] plusieurs/
 
Seulement reste ma question : Est-ce la bonne solution ?

n°2134468
Aesculapiu​s
Ignorance is Strength
Posté le 03-04-2012 à 09:41:25  profilanswer
 

Recherche un peu un programme qui utilise le pattern Model View (http://qt-project.org/doc/qt-4.8/model-view-programming.html et eventuellement Controleur) pour voir a quoi ressemble ce genre de solution.. Tu peux aussi essayer d´utiliser une lib comme Qt et te servir du mechanisme signal / slot pour faire interagir tes instances.

n°2134493
Terminapor
I'll see you rise.
Posté le 03-04-2012 à 13:18:50  profilanswer
 

En gros, tu veux avoir un objet "mes armes" qui ne change pas dans tout le jeu, une seule instance ?


---------------
Perhaps you don't deserve to breathe
n°2135042
bjone
Insert booze to continue
Posté le 05-04-2012 à 15:52:23  profilanswer
 

L'état de ton jeu doit être maintenu dans une classe, cette instance de classe est crée à l'initialisation du jeu ou de la partie, et au plus simple tu maintiens un pointeur vers cette instance, ou tu la passe aux trucs qui ont en besoin (mais ça peut être chiant).
 
// CGameStates.h
class CGameStates
{
public:
    CPlayerState PlayerState;
    std::vector<CWeapons> PlayerWeapons;
    CWorld World;
    std::vector<CMonsters> Monsters;
    // blah blah
};
 
// GameLoop.cpp
 
CGameStates *GameStates = NULL;
 
// in fine appelé par le main après l'initialisation du steak haché
void GameLoop()
{
    std::auto_ptr<CGameStates> LocalGameStates( new CGameStates );  
    GameStates  = LocalGameStates.get();
 
    while( // pas quit )
    {
        // gère les messages OS
        // qui utiliseront un "extern CGameStates *GameStates;"
        // gère les entrées
        // update le monde, players
        // dessigne le monde  
    }
}
 
Sinon tu passes le CGameStates en référence ou en pointeur à chaque sous-système de jeu qui en a besoin (ce qui permet de gérer plusieurs mondes simultanément)
Mais un moment donné, tu finis toujours par mettre des trucs en pointeur global.
Sinon tu fais un singleton pour faire plus C++ (static * avec le getter itou)


Message édité par bjone le 05-04-2012 à 15:56:07

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Ou déclarer une class qui va servir à plusieurs endroits ?

 

Sujets relatifs
créer un tableau php avec tri et plusieurs tables...Récupération de plusieurs données Yahoo Finance
Différence de chargement d'une API entre exécution class et Jar[DELPHI] Tlistview : surligner une ou plusieurs lignes ?
[RESOLU] Plusieurs "like" de suite + probleme jointuredéclarer un pointeur vers un tableau de tableaux ...?
update plusieurs conditionecriture sur plusieurs xls
Batch Ms-dos - For - plusieurs instructionun peu perdu avec les storage class du C en revenant de java
Plus de sujets relatifs à : Ou déclarer une class qui va servir à plusieurs endroits ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR