Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
856 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [C] fonctions imbriquées, je m'y perds [résolu]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] fonctions imbriquées, je m'y perds [résolu]

n°2140522
caps lock
Posté le 03-05-2012 à 18:07:21  profilanswer
 

Bonjour,
 
Je vais essayer de faire simple pour me faire comprendre, voici le header :

Code :
  1. void jouer(SDL_Surface* ecran);
  2. void deplacerJoueur(int carte[][NB_BLOCS_HAUTEUR], SDL_Rect *pos, int direction);
  3. int mangerObjet(int *premiereCase, int *secondeCase);


 
Dans la fonction jouer()  j'ai déclaré une variable :

Code :
  1. int score=0;


 
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 ?

Message cité 1 fois
Message édité par caps lock le 03-05-2012 à 23:15:19
mood
Publicité
Posté le 03-05-2012 à 18:07:21  profilanswer
 

n°2140530
theshockwa​ve
I work at a firm named Koslow
Posté le 03-05-2012 à 19:15:30  profilanswer
 

il faut que tu passes un pointeur sur les variables que tu comptes manipuler à ta fonction qui effectue la manipulation.
 
En général, tu vas avoir plusieurs choses qui vont déterminer l'état complet de ton jeu. Il est d'usage de regrouper ces choses au sein d'une structure d'état du jeu et de transmettre cette structure d'état aux fonctions intéressées.


---------------
last.fm
n°2140537
caps lock
Posté le 03-05-2012 à 19:45:31  profilanswer
 

C'est exactement ce que j'essaie de faire sur le topic : http://forum.hardware.fr/forum2.ph [...] nojs=0#bas
 

n°2140607
Sve@r
Posté le 03-05-2012 à 22:53:28  profilanswer
 

caps lock a écrit :

Bonjour,
 
Je vais essayer de faire simple pour me faire comprendre, voici le header :

Code :
  1. void jouer(SDL_Surface* ecran);
  2. void deplacerJoueur(int carte[][NB_BLOCS_HAUTEUR], SDL_Rect *pos, int direction);
  3. int mangerObjet(int *premiereCase, int *secondeCase);


 
Dans la fonction jouer()  j'ai déclaré une variable :

Code :
  1. int score=0;


 
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 :
  1. void jouer(SDL_Surface* ecran)
  2. {
  3.      ...
  4.      int score=0;
  5.      ...
  6.      deplacerJoueur(..., ..., ..., &score);
  7. }
  8. void deplacerJoueur(int carte[][NB_BLOCS_HAUTEUR], SDL_Rect *pos, int direction, int *score)
  9. {
  10.     ...
  11.     ...
  12.     mangerObjet(..., ..., ..., score);
  13. }
  14. int mangerObjet(int *premiereCase, int *secondeCase, int *score)
  15. {
  16.     ...
  17.     ...
  18.     *score=nouvelle_valeur;
  19.     ...
  20. }


 
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 :
  1. typedef struct {
  2.     ...
  3.     ...
  4.     int score;
  5.     ...
  6. } t_joueur;


 
Puis tu t'en sers comme ça
 

Code :
  1. void jouer(SDL_Surface* ecran)
  2. {
  3.      ...
  4.      t_joueur joueur;
  5.      joueur.score=0;
  6.      ...
  7.      deplacerJoueur(..., ..., ..., &joueur);
  8. }
  9. void deplacerJoueur(int carte[][NB_BLOCS_HAUTEUR], SDL_Rect *pos, int direction, t_joueur *joueur)
  10. {
  11.     ...
  12.     ...
  13.     mangerObjet(..., ..., ..., joueur);
  14. }
  15. int mangerObjet(int *premiereCase, int *secondeCase, t_joueur *joueur)
  16. {
  17.     ...
  18.     ...
  19.     joueur->score=nouvelle_valeur;
  20.     ...
  21. }


 
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....

n°2140614
caps lock
Posté le 03-05-2012 à 23:14:51  profilanswer
 

Excellent ça a fonctionné du premier coup. Merci :jap:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [C] fonctions imbriquées, je m'y perds [résolu]

 

Sujets relatifs
[C] SDL avec combo BlitSurface() + Flip()[C# .net] Navigation vers un TAB précis d'un FORM.
fonction qui transforme une matrice en vecteur en langage CCalcul de la norme d'un vecteur généré de façon aléatoire en langage C
Ouvrir un fichier en CLire port série C# et convertir en texte
Le C est-il mieux que le C# ?[C#] Remplacer le symbole € par valeur hexadecimale [Résolu]
pacman en C[C] débutant a=b différent de b=a ?
Plus de sujets relatifs à : [C] fonctions imbriquées, je m'y perds [résolu]


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR