Bonsoir,

Je poste car ca fait une heure que je galère dessus sans avancer.

Voici, en substance, mon code (j'ai supprimé de nombreuses ligne de code pour le rendre plus lisible) :

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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
typedef struct bille bille;
struct bille
{
    double accel;
    double vx;
 
};
 
void CreationBille (bille *uneBille, int posInitX, int posInitY);
void DeplacerBille(bille *uneBille, bille *adTabBille, indexBille);
 
int main(int argc, char *argv[])
{
    ...
    int i = 0, max_billes = 10;
 
    bille billes[max_billes];
 
    for(i = 0; i < max_billes; i++){
        CreationBille(&(billes[i]));
    }
 
    int tempsPrecedent = 0, tempsActuel = 0;
    int continuer = 1;
    while (continuer)
    {
 
        SDL_Event event;
        while (SDL_PollEvent(&event))
            switch(event.type)
            {
                case SDL_QUIT:
                    continuer = 0;
                    break;
 
                case SDL_KEYDOWN:
                    switch (event.key.keysym.sym)
                    {
                        case SDLK_ESCAPE:
                            continuer = 0;
                            break;
                        default:
                            break;
                    }
                    break;
            }
 
 
 
        tempsActuel = SDL_GetTicks();
        if (1000 / FPS < tempsActuel - tempsPrecedent) //timer
        {
 
            for(i = 0; i < max_billes; i++){
                DeplacerBille(&(billes[i]), &(billes), i); 
            }
 
            SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 105, 105, 105));
            SDL_BlitSurface(vaisseau1.image, NULL, ecran, &(vaisseau1.position));
            for(i = 0; i < max_billes; i++){
                SDL_BlitSurface(billes[i].image, NULL, ecran, &(billes[i].position));
            }
 
            SDL_Flip(ecran);
 
            tempsPrecedent = tempsActuel;
         }else /* Si ça fait moins de 1000/FPS depuis le dernier tour de boucle, on endort le programme le temps qu'il faut */
        {
            SDL_Delay(1000/FPS - (tempsActuel - tempsPrecedent));
        }
 
 
    }
 
    for(i = 0; i < max_billes; i++){
        DestructionBille (&(billes[i]));
    }
    SDL_Quit();
 
    return EXIT_SUCCESS;
}
 
 
 
void CreationBille (bille *uneBille)
{
    uneBille->vmax = 5;
    uneBille->vx = uneBille->vmax;
 
    SDL_Surface *temporaire = SDL_LoadBMP("truc.jpg");
    if (temporaire == NULL)
    {
        printf("Echec lors du chargement de l'image d'une bille dans InitialiserBille : %s\n", SDL_GetError());
        exit(EXIT_FAILURE);
    }
    uneBille->image = SDL_DisplayFormat(temporaire);
    SDL_FreeSurface(temporaire); //mémoire libérée
    SDL_SetColorKey(uneBille->image, SDL_SRCCOLORKEY, SDL_MapRGB(uneBille->image->format, 105, 105, 105)); //rend transparent l'arrière-plan de la bille
 
    uneBille->position.x = 50;
    uneBille->position.y = 50;
 
}
 
void DeplacerBille(bille *uneBille, bille *adTabBille, indexBille) //, vaisseau unVaisseau
{
 
    int i = 0;
 
 
 
}
Voilà ce qui m'intéresse dans ma fonction déplacer bille c'est, en fonction du pointeur de la bille en premier argument, de récupérer les pointeurs respectifs des autres billes (autres index du tableau billes[]) pour faire des tests de collision (Aïe la physique !). Je dois donc faire passer le pointeur du tableau (2nd argument).

Mais là où ça se corse

c'est que si je met dans cette fonction :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
if(index == 1)
    {
            printf("%d__", uneBille);
            printf("%d\n", adTabBille[1]);
 
    }
Ces printf ne renvoient pas la même adresse (??). A votre avis c'est dû à quoi ?