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
| #include <stdlib.h>
#include <stdio.h>
#include <SDL/SDL.h>
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;
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;
}
tempsActuel = SDL_GetTicks();
if(positionball.x >=0)
{
if (tempsActuel - tempsPrecedent > 30)
{
positionball.x++;
tempsPrecedent = tempsActuel;
}
else /* Si ça fait moins de 30ms depuis le dernier tour de boucle, on endort le programme le temps qu'il faut */
{
SDL_Delay(30 - (tempsActuel - tempsPrecedent));
}
}
else if (positionball.x = 640)
{
if (tempsActuel - tempsPrecedent > 30)
{
positionball.x--;
tempsPrecedent = tempsActuel;
}
else /* Si ça fait moins de 30ms depuis le dernier tour de boucle, on endort le programme le temps qu'il faut */
{
SDL_Delay(30 - (tempsActuel - tempsPrecedent));
}
}
else
{}
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;
} |
Partager