Sve@r | caps lock a écrit :
Bonjour,
Je vais essayer de faire simple pour me faire comprendre, voici le header :
Code :
- void jouer(SDL_Surface* ecran);
- void deplacerJoueur(int carte[][NB_BLOCS_HAUTEUR], SDL_Rect *pos, int direction);
- int mangerObjet(int *premiereCase, int *secondeCase);
|
Dans la fonction jouer() j'ai déclaré une variable :
Maintenant la fonction jouer() appelle la fonction deplacerJoueur() qui à son tour appelle la fonction mangerObjet()
Et c'est d'ici que je souhaite effectuer des manipulations sur la variable "score"
Comment dois-je procéder ? avec des return ?
|
De façon classique, cela se fera comme ça
Code :
- void jouer(SDL_Surface* ecran)
- {
- ...
- int score=0;
- ...
- deplacerJoueur(..., ..., ..., &score);
- }
- void deplacerJoueur(int carte[][NB_BLOCS_HAUTEUR], SDL_Rect *pos, int direction, int *score)
- {
- ...
- ...
- mangerObjet(..., ..., ..., score);
- }
- int mangerObjet(int *premiereCase, int *secondeCase, int *score)
- {
- ...
- ...
- *score=nouvelle_valeur;
- ...
- }
|
Ca c'est la méthode basique. Le principal inconvénient c'est que si tu multiplies les variables, tu vas multiplier les paramètres et les pointeurs et au final tu ne t'y retrouveras plus.
Une solution plus réfléchie est de commencer par créer une structure destinée à gérer tous les éléments de ton jeu. Ca pourrait donc être un truc de ce style
Code :
- typedef struct {
- ...
- ...
- int score;
- ...
- } t_joueur;
|
Puis tu t'en sers comme ça
Code :
- void jouer(SDL_Surface* ecran)
- {
- ...
- t_joueur joueur;
- joueur.score=0;
- ...
- deplacerJoueur(..., ..., ..., &joueur);
- }
- void deplacerJoueur(int carte[][NB_BLOCS_HAUTEUR], SDL_Rect *pos, int direction, t_joueur *joueur)
- {
- ...
- ...
- mangerObjet(..., ..., ..., joueur);
- }
- int mangerObjet(int *premiereCase, int *secondeCase, t_joueur *joueur)
- {
- ...
- ...
- joueur->score=nouvelle_valeur;
- ...
- }
|
Ainsi, si t'as besoin d'un nouvel élément te suffit de l'intégrer dans ta structure et t'en servir là où t'en as besoin.... |