|
|
|
|
Bonjour,
Je suis actuellement en train de programmer un petit jeu genre Sokoban en C++. J'ai pour cela crée différentes classes : une pour les caisses, une pour les murs, etc... Elles fonctionnent toutes très bien et le premier niveau est jouable parfaitement.
Mais alors, où est le problème ??? J'y arrive... :-)
J'aimerais que mon jeu ait plus qu'un niveau. Et donc, je me demandais s'il était possible de créer dynamiquement un tableau et d'y mettre des objets de mes classes, pour construire le niveau. J'ai donc fureté à droite à gauche sur le Net, et j'ai vu qu'il fallait utiliser le mot-clé [i]new[/i]. Soit... C'est que je fais. Mais, j'ai un problème lors de l'appel à une fonction de l'une de mes classes. Voici les parties du code correspondantes (pour la classe [i] soko [/i] par exemple, avec un constructeur admettant en argument deux char) :
// Déclaration du pointeur
soko* Sokoban;
// Création d'un élément dans le tableau
soko *Sokoban = new soko( 7, 9 );
// Utilisation d'une fonction
Sokoban[1].Move(1,0);
Voilà. Et, lorsque je lance le programme et que j'appuie sur une flèche, le programme quitte automatiquement. Si la ligne est enlevée, tout marche bien...
Merci pour tous les gentils programmeurs (et programmeuses) qui m'aideront !
OK. Merci. Je vais essayer ça ce soir ou demain (histoire que j'ai un peu de temps)... Quoi qu'il en soit, je serais ravi de t'envoyer une version du jeu, une fois celui-ci terminé. Car, en effet, pour l'instant, les bases fonctionnent... Mais c'est tout.
|
Allez ! J'ai pas pu résister à l'envie d'essayer avant de partir bosser... :-)
|
Une question, pourquoi commence tu par Sokoban[1] ?
soko Sokoban[Nombre_de_niveau];qui normalement fonctionne. Une question : tu utilise quoi pour le mode graphique? Bonne chance. Salutation ! Char Snipeur |
Hélas, ça ne marche toujours pas : il me met la même erreur...
|
Ca y est ! J'ai enfin réussi ! En fait, voici la syntaxe à adopter :
|
Salut =)
|
Un petit changement de nom : je me suis inscrit finalement à ce site, qui a l'air pas mal du tout...
|
Yep =) désolé pour le retard... en tout cas, bienvenue parmi nous !!!
box* Box = NULLtu déclares un pointeur vers un objet ou un tableau d'objets. ensuite quand tu fais : Box = new box(14,10); Box = new box(14,8); Box = new box(15,9);tu crées 3 instances de ta classe box sur le même espace mémoire, c'est-à-dire qu'à chaque nouvelle ligne, ton objet est "effacé" et recréé. si tu veux créer un tableau de box, il faut t'y prendre comme ça : box *Box=NULL; Box = new box[3];et là tu auras trois instances de box. pour y accéder, il faudra faire : box[0]->Methode(parametre); box[1]->Methode(parametre); box[2]->Methode(parametre);et les paramètres pour le constructeur me diras-tu ???? ben en fait je sais pas trop si c'est possible de passer les paramètres à 3 instances lors de la création. Tout du moins, ce que tu peux faire c'est un accesseur à tes variables membres, c'est-à-dire une méthode qui modifiera tes valeurs. soit tu fais une fonction qui s'appelle SetMachin(int a,int b) ou "Machin" est le nom de ta ou tes variables, soit tu fais une fonction Init(int a, int b) qui corresponderait à l'initialisation de ton objet. Dans tout les cas, quelle que soit le nom de ta fonction, elle te permettrait d'initialiser les valeurs des variables de ta classe. ++ Le Parisien, il vaut mieux l'avoir en journal !!! :-P |
Lors de ton enchainement de tes 3 new box, tu ne suprimerai pas les précédent? Comment le compilateur sait qu'il doit incrémenté le tableau ou le remplacer?
|
Miracle ! Ca marche ! Maintenant, il ne me reste plus qu'à réorganiser le tout... Car, quelques petits problèmes d'affichage viennent perturber le tout ! Les caisses se déplacent, mais elles deviennent invisibles. Pas très pratique pour jouer... Donc, encore de folles heures de débuggage pour moi !
|
Non ! Encore un problème ! Maintenant, tout à l'air de marcher, mise à part la vérification du niveau (si toutes les caisses sont sur les emplacements). Je ne pense pas que le problème vienne de ma fonction, car sur plusieurs niveaux (quatre pour l'instant), elle marche parfaitement.
|