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 121 122 123 124 125 126 127 128 129 130
|
// Le header de SDL
#include <SDL.h>
#include <math.h>
#define SECONDES *1000
// Les surfaces
SDL_Surface * sEcran;
SDL_Surface * sImage;
int currentTime = SDL_GetTicks();
int nextUpdateTime = currentTime;
void init()
{
// Initialisation
SDL_Init(SDL_INIT_VIDEO);
sEcran = SDL_SetVideoMode(800, 600, 32,SDL_HWSURFACE|SDL_DOUBLEBUF|SDL_FULLSCREEN);
SDL_ShowCursor(0);
// Chargement de l'image
sImage=SDL_LoadBMP("img.bmp");
}
void Quit()
{
SDL_FreeSurface(sImage);
SDL_FreeSurface(sEcran);
SDL_ShowCursor(1);
SDL_Quit();
bool exit(0);
}
int main(int argc, char *argv[])
{
init();
SDL_Rect rect; // Source
SDL_Rect dest; // Destination
SDL_Rect rect2; // Source
SDL_Rect dest2; // Destination
SDL_Event event; // On en aura besoin plus tard
rect.x=0;
rect.y=0;
rect.w=80;
rect.h=80; // L'image fait 80x80
dest.x=360;
dest.y=260;
dest.w=80;
dest.h=80;
// Boucle principale
while(true)
{
SDL_FillRect(sEcran,NULL,0);
Uint8 *keys;
keys = SDL_GetKeyState(NULL);
if(keys[SDLK_UP])
{
dest.y-=1;
if(dest.y<0)
dest.y=0;
}
if(keys[SDLK_DOWN])
{
dest.y+=1;
if(dest.y>519)
dest.y=519;
}
if(keys[SDLK_RIGHT])
{
dest.x+=1;
if(dest.x>719)
dest.x=719;
}
if(keys[SDLK_LEFT])
{
dest.x-=1;
if(dest.x<0)
dest.x=0;
}
// Tant qu'il y a des evennements
while(SDL_PollEvent(&event))
{
// Si c'est un message SDL_QUIT
if(event.type==SDL_QUIT)
{
Quit();
}
else if(event.type==SDL_KEYDOWN)
{
// Si c'est la touche Echap
if(event.key.keysym.sym==SDLK_ESCAPE)
Quit();
if(event.key.keysym.sym==SDLK_SPACE)
{
long posYinit = dest.y;
while((posYinit - dest.y) < 300)// Début de la boucle de saut
{
dest.y--;
// On met a jour la "date" actuelle
currentTime = SDL_GetTicks();
if( currentTime > nextUpdateTime )
{
/* On fixe la date du prochain changement : une demi seconde après */
nextUpdateTime = currentTime + 500;
}
}
}
}
}
SDL_BlitSurface(sImage,&rect,sEcran,&dest);
SDL_Flip(sEcran);
}
return 0;
} |
Partager