Pour le moment, Zozor se décale vers la droite puis disparaît de l’écran. Ce serait mieux s’il repartait dans l’autre sens une fois arrivé tout à droite, non ? Cela donnerait l’impression qu’il rebondit. Je vous conseille de créer un booléen versLaDroite qui vaut « vrai » si Zozor se déplace vers la droite (et « faux » s’il va vers la gauche). Si le booléen vaut vrai, vous décalez donc Zozor vers la droite, sinon vous le décalez vers la gauche. Surtout, n’oubliez pas de changer la valeur du booléen lorsque Zozor atteint le bord droit ou le bord gauche. Eh oui, il faut bien qu’il reparte dans l’autre sens ! Plutôt que de faire rebondir Zozor de droite à gauche, faites le rebondir en diagonale sur l’écran ! Il vous suffira de modifier positionZozor.x et positionZozor.y simultanément. Vous pouvez essayer de voir ce que ça fait si on augmente x et si on diminue y en même temps, ou bien si on augmente les deux en même temps, etc. Faites en sorte qu’un appui sur la touche P empêche Zozor de se déplacer, et qu’un nouvel appui sur la touche P relance le déplacement de Zozor. C’est un bête booléen à activer et désactiver.
jai beau essayer toujours echec si qunqu’un pouvait me filer la solution voila mon code source:
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 | #include<stdio.h> #include<stdlib.h> #include<SDL/SDL.h> #include<SDL/SDL_image.h> int main(int argc, char *argv[]) { SDL_Surface *ecran = NULL, *zozor = NULL; SDL_Rect position; SDL_Event event; int continuer = 1, tempsPrecedent = 0, tempsActuel = 0, versLaDroite = 1; SDL_Init(SDL_INIT_VIDEO); ecran = SDL_SetVideoMode(700, 400, 32, SDL_HWSURFACE); zozor = IMG_Load("zozor.bmp"); SDL_WM_SetCaption("gestion des evenement", NULL); SDL_SetColorKey(zozor, SDL_SRCCOLORKEY, SDL_MapRGB(zozor->format, 0,0,255)); position.x = 100; position.y = 100; SDL_EnableKeyRepeat(100,100); while(continuer) { 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; case SDLK_RIGHT: position.x++; break; case SDLK_LEFT: position.x--; break; } } tempsActuel = SDL_GetTicks(); if(tempsActuel - tempsPrecedent > 30) { switch(versLaDroite) { case 1: position.x++; break; case 2: if (position.x < 300) {versLaDroite = 0; position.x--;} break; } tempsPrecedent = tempsActuel; } else { SDL_Delay(30 - (tempsActuel - tempsPrecedent)); } SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255)); SDL_BlitSurface(zozor, NULL, ecran, &position); SDL_Flip(ecran); } SDL_FreeSurface(zozor); SDL_FreeSurface(ecran); SDL_Quit(); return EXIT_SUCCESS; } |