Ou déclarer une class qui va servir à plusieurs endroits ? - C++ - Programmation
Marsh Posté le 01-04-2012 à 13:48:32
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+,
Marsh Posté le 01-04-2012 à 13:52:12
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 ?
Marsh Posté le 03-04-2012 à 09:41:25
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.
Marsh Posté le 03-04-2012 à 13:18:50
En gros, tu veux avoir un objet "mes armes" qui ne change pas dans tout le jeu, une seule instance ?
Marsh Posté le 05-04-2012 à 15:52:23
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)
Marsh Posté le 01-04-2012 à 12:35:08
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 :
| 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 édité par beuted le 01-04-2012 à 13:17:15