22Fermer24
FarewellLe 12/02/2013 à 19:47
Bon, élargissons le débat cheeky

Comment vous verriez la représentation en mémoire d'un niveau ?

Je veux dire, si quand on appuis sur "start", on crée indépendamment :
- un niveau (basé sur une matrice)
- un perso
- des ennemis
- des armes
- une machine à café (parce que mes jeux font même le café)

On va se retrouver avec un tas d'objets juxtaposés. Pour communiquer entre eux, je vois troi possibilités :
- passer des pointeurs dans tous les sens. Ca fait très C school. Ca me parait lourdingue.
- utiliser des variables globales. Ca fait très crade school. Mais c'est au prime abord ce qui parait le plus simple (avant de devenir le gros bordel probablement).
- utiliser des messages. Alors en avant pour un dispatcher, des listeners, des senders, des écouteurs, des baffles, des micros, quelques DJs and co. J'avais commencé un jeu comme ça, ça devient très lourdingue dès lors qu'on est pas assisté par un soft dédié qui écrit la moitié du code (genre Qt Designer pour citer ce que je connais). On se retrouve à écrire dans les 3541816 messages parce qu'on a une souris et 3 boutons dans une fenêtre SDL.



Autre possibilité pour éviter tout ça : avoir une "hiérarchie d'appartenance" (ça se dit ?fear).
Donc grossièrement, on peut dire que un niveau possède :
- une map de tiles
- une liste de sprites pour dessiner tout ça
- un perso
- une liste d'ennemis

Le perso possède :
- une liste d'armes
- une liste d'items dans son sac à dos

Les ennemis possèdent :
- rien, c'est des connards.


La seule chose à connaitre pour les différents objets appartenant (même de loin en loin) à la map en cours, c'est l'adresse de la-dite map. Ca peut faire une var globale, ou un seul pointeur à transmettre (par exemple, comme membre de chaque objet à sa création, c'et pas meiux d'ailleurs ?).
Je sais que Code::Blocks a une structure de ce genre.


Vala vala, qu'en pensez-vous ? Quelles sont les pièges que je ne vois pas dans ces différentes possibilités ? Où et-ce que je vais m'enliser parce qu'au final, ça ne sera pas viable ?

Merci d'avance. happy