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
| #include <stdlib.h>
#include <stdio.h>
#include <SDL/SDL.h>
#define BIT_COULEURS 32
#define LARGEUR_ECRAN 800
#define HAUTEUR_ECRAN 800
#define NOIR (0), (0), (0)
#define CLAIR (255), (255), (255)
#define GRIS_CLAIR (200), (200), (200)
#define GRIS_FONCE (100), (100), (100)
#define LARGEUR 10
#define HAUTEUR 500
SDL_Surface *ecran;
int main (int argc, char** argv)
{
int tempsPrecedent, tempsActuel, dt;
int fps = 85;
int attente = 1000 / fps;
float vitesse = 0.2; //en pixels/milliseconde
SDL_Surface *barre;
SDL_Rect dest = {32, 32, LARGEUR, HAUTEUR};
SDL_Init(SDL_INIT_VIDEO);
ecran = SDL_SetVideoMode(LARGEUR_ECRAN, HAUTEUR_ECRAN, BIT_COULEURS, SDL_HWSURFACE | SDL_DOUBLEBUF);
barre = SDL_CreateRGBSurface(SDL_HWSURFACE | SDL_DOUBLEBUF, LARGEUR, HAUTEUR, 32, 0, 0, 0, 0);
SDL_FillRect(barre, NULL, SDL_MapRGB(ecran->format, GRIS_FONCE));
SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, CLAIR));
SDL_BlitSurface(barre, NULL, ecran, &dest);
SDL_UpdateRect(ecran, 0, 0, 0, 0);
SDL_Event event;
bool quit;
tempsPrecedent = SDL_GetTicks();
while (!quit)
{
while(SDL_PollEvent(&event))
{
switch(event.type)
{
case SDL_QUIT:
quit = true;
break;
case SDL_KEYDOWN:
quit = true;
break;
}
}
tempsActuel = SDL_GetTicks();
dt = tempsActuel - tempsPrecedent;
// formule : dx += vitesse * deltaT
dest.x += int(vitesse * dt);
SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, CLAIR));
SDL_BlitSurface(barre, NULL, ecran, &dest);
SDL_Flip(ecran);
if (attente >= (SDL_GetTicks() - tempsActuel)) {
SDL_Delay(attente - (SDL_GetTicks() - tempsActuel));
}
tempsPrecedent = tempsActuel;
}
SDL_FreeSurface(barre);
return EXIT_SUCCESS;
} |