Je veux concevoir la map d'un jeu style mario : un perso qui bouge, des blocs solides, du vide, des blocs avec quelques capacités (bumper, porte ou autre). L'implémentation se fait en C++, mais je pense qu'on s'en fout ici.
Partant sur ce qu'on fait pour TI, j'ai fait une matrice d'int classique avec des références aux différents blocs : 0 pour du vide, 1 pour un mur, etc...
Partant de là, je voyais bien un tableau d'objets créés dynamiquement en regard de la map de base. Un objet pourrait répondre à différentes questions du moteur : est-ce que le perso peut entrer ? Que se passe-t-il s'il touche le bloc ? S'il rentre cmoplètement dedans ? S'il en sort ?
Donc je voyais plusieurs types d'objets Bloc en fonction des capacités. Or pour faire une matrice de ce type de blocs (en fait, un tableau), il faut qu'ils soient identiques.
Pas de problème, on crée une classe union de tous ces types de blocs, qu'on appellera BlocGénérique. Tous les autres blocs dériveront de ce Bloc de base. Ainsi, le moteur pourra poser les questions qu'il veut aux blocs, ils seront tous capables de répondre.
Bon, c'est bien beau, mais cette méga-union à la Qt, ça me semble bien foireux. J'ai soumis le problème à Zeph ainsi :
La plateforme se base sur un tableau d'int spécifiant le type de bloc (0 = vide, 1 =mur, 2 = porte, etc...) Le chargeur de niveau lit le talbeau d'int, et crée un tableau d'objets Bloc correspondant Chaque Bloc a des méthodes : - si perso touche () - si perso entre dans bloc () - si pero complètement dans bloc () - est-ce que perso peut rentrer dans bloc ? () - etc... Evidemment, chaque bloc peut être un mur, une porte, bref, avoir des méthodes qui vont réagir différemment. Mon problème est de faire ce putain de tableau de Bloc. Je peux la jouer Qt : je crée un BlocGénérique qui est une union de tout ce qui existe comme blocs. Le tableau sera donc un tableau de BlocGénérique. Chaque Bloc (BlocVide, BlocMur, etc...) dérive de BlocGénérique, et redéfinit les méthodes à sa sauce (évidemment, on traverse le vide et pas un mur, etc...). Je sais pas pourquoi, je trouve pas ça très propre comme méthode. Qu'en penses-tu stp ? Merci d'avance. :)
Voici la conversation qui en a découlé sur IRC (*):
Qu'en pensez-vous ? Je ne vois vraiment pas de quel côté attaquer les choses... Comme d'habitude, je n'ai pas besoin d'une solution clef en main, mais d'axes de réflexion sur la manière de concevoir un format de map pour un jeu de ce type. Merci d'avance !
(*) Fac-similé de la missive de Zeph m'autorisant à reproduire publiquement, tout ou partie, et sans redevance de royalties, la conversation que nous eûmes sur IRC :