Bonjour, alors voila mon problème, je début dans le langage C et j'essaye de crée un pong, je pense que vous connaisé la basse de se jeu. Mes je bute sur une phase de mon programme, j'ai crée une ball, et 2bare, mais la ball part de gauche et quand elle est a droit elle ne ricoche pas, elle disparait, je vous montre mon code

merci de votre aide
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
113
114
115
116
117
118
119
120
 
#include <stdlib.h>
#include <stdio.h>
#include <SDL/SDL.h>
 
#define GAUCHE 0
#define DROITE 1
#define HAUT 2
#define BAS 3
 
int main(int argc, char *argv[])
{
    SDL_Surface *ecran = NULL,*bare = NULL, *ligne=NULL,*bare2=NULL,*ball=NULL;
    SDL_Rect positionbare,positionligne,positionbare2, positionball;
    SDL_Event event;
    int continuer = 1;
    int tempsPrecedent = 0, tempsActuel = 0;
 
    int bougerH = DROITE;
    int bougerV = HAUT;
 
 
 
 
    SDL_Init(SDL_INIT_VIDEO);
 
 
    ecran = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE| SDL_DOUBLEBUF);//charge la fenetre et la taille
    bare = SDL_CreateRGBSurface(SDL_HWSURFACE, 10, 100, 32, 0, 0, 0, 0); // Allocation de la surface
    bare2 = SDL_CreateRGBSurface(SDL_HWSURFACE, 10, 100, 32, 0, 0, 0, 0); // Allocation de la surface
    ball = SDL_CreateRGBSurface(SDL_HWSURFACE, 10, 10, 32, 0, 0, 0, 0);
    ligne = SDL_CreateRGBSurface(SDL_HWSURFACE, 5, 480, 32, 0, 0, 0, 0);
    SDL_WM_SetCaption("Pong", NULL);
 
    positionbare2.x = 620;
    positionbare2.y = 180;
    positionligne.x= (640 / 2)- (2 / 2) ;//coordonné de la ligne
    positionligne.y=(480 / 2)- (480 / 2);
    positionbare.x = 10;
    positionbare.y = 180;
    positionball.x= 0;
    positionball.y= 0;
    SDL_EnableKeyRepeat(10, 10);// répétition des touche
 
 
 
    while(continuer)//boucle event
    {
     SDL_PollEvent(&event); /* On attend un évènement qu'on récupère dans event */
        switch(event.type) /* On teste le type d'évènement */
        {
            case SDL_QUIT: /* Si c'est un évènement QUITTER */
                continuer = 0; /* On met le booléen à 0, donc la boucle va s'arrêter */
                break;
            case SDL_KEYDOWN:
        switch(event.key.keysym.sym)
            {
            case SDLK_UP: // Flèche haut
                positionbare.y--;
                break;
            case SDLK_DOWN: // Flèche bas
                positionbare.y++;
                break;
            }
        break;
        }
 
      if(positionball.x == 0)
    bougerH = DROITE;
else if(positionball.x == (640 - ball->width))
    bougerH = GAUCHE;
if(positionball.y == 0)
    bougerV = BAS;
else if(positionball.y == (480 - ball->height))
    bougerV = HAUT;
//...
switch(bougerV)
{
    case HAUT:
        positionball.y--;
    break;
    case BAS:
        positionball.y++;
    break;
}
switch(bougerH)
{
    case GAUCHE:
        positionball.x--;
    break;
    case DROITE:
        positionball.x++;
    break;
}
 
 
        SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 0, 0,0));
        SDL_FillRect(ligne, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
        SDL_BlitSurface(ligne, NULL, ecran, &positionligne);
        SDL_FillRect(bare, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));//charge la couleur de l'écran
        SDL_BlitSurface(bare, NULL, ecran, &positionbare); // Collage de la surface sur l'écran
        SDL_FillRect(bare2, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));//charge la couleur de l'écran
        SDL_BlitSurface(bare2, NULL, ecran, &positionbare2);
        SDL_FillRect(ball, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));//charge la couleur de l'écran
        SDL_BlitSurface(ball, NULL, ecran, &positionball);
        SDL_Flip(ecran);//on initialise l'écran
 
 
    }
 
 
 
 
    SDL_FreeSurface(bare); // Libération de la surface
    SDL_Quit();
 
 
 
    return EXIT_SUCCESS;
}