Bonjour à tous,

J'ai décider de m'atteler à un problème que j'ai depuis que j'ai commencé à programmer en C ...

Le passage en argument pour des fonctions !!!!!!
Primordiale pour la découpe d'un code et l'optimisation, je suis confronté à cette lacune.

Voila mon problème:

Dans mon main.c, je défini les 5 objets suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
SDL_Rect *positionobjet;
positionobjet = malloc (10*sizeof(SDL_Rect) );
for( i=0;i<10;i++)
    {
        positionobjet[i].x  = 0;
        positionobjet[i].y  = 0;
    }
 
Struct B_B_Cercle boxC1objet[10];
Struct B_B_Cercle boxC2objet[10];
 
SDL_Surface *objet[10]; /* il est remplie de sprite de corps céleste ( météorite,planète,étoile ... )
 
int h,w;
La structure B_B_Cercle est :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
typedef struct B_B_Cercle B_B_Cercle;
struct B_B_Cercle
{
   int x;
   int y;
   int rayon;
};
Voila pour les déclarations.
Je souhaite ensuite créer une fonction qui appelle ces 5 objets pour remplir les structures B_B_Cercle boxC1objet et B_B_Cercle boxC1objet.

J'ai crée la fonction suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
 
double frand_a_b(double a, double b);
 
void init_B_B_cercle_objet(SDL_Rect **position_objet,B_B_Cercle BC1[],B_B_Cercle BC2[],SDL_Surface *objet[],int h,int w)
{
 
    int nombre_aleatoire1=0,nombre_aleatoire2=0, i;
    srand(time(0));
    int a=0;
 
    for( i=0;i<10;i++)
    {
        /* on remplie le tableau de SDl_Rect positionobjet grâce à la fonction aléatoire frand */
        int b1,b2;
        b1=w-objet[i]->w;
        b2=h-objet[i]->h;
        nombre_aleatoire1=frand_a_b(a,b1);
        nombre_aleatoire2=frand_a_b(a,b2);
        position_objet[i]->x  = nombre_aleatoire1 ;
        position_objet[i]->y  = nombre_aleatoire2 ;
 
        /* On remplie le tableau de boite de test C1*/
        BC1[i].x= position_objet[i]->x + objet[i]->w/2;
        BC1[i].y= position_objet[i]->y + objet[i]->h/2;
        BC1[i].rayon=objet[i]->w/2;
 
        /* On remplie le tableau de boite de test C2*/
        BC2[i].x= BC1[i].x;
        BC2[i].y= BC1[i].y;
        BC2[i].rayon=objet[i]->w/2+4;
    }
}
 
double frand_a_b(double a, double b)
{
    return (rand()/(double)RAND_MAX)*(b-a) +a;
}
Elle est plutôt courte ^^
Ensuite j'appelle la fonction dans mon main.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
init_B_B_cercle_objet(&positionobjet,boxC1objet[10],boxC2objet[10],objet[10]),h,w);
... et la c'est le drame

J'ai besoin d'un avis extérieur car je suis paumé.

Mercie d'avance

Maxime