- include < SDL/SDL.h>
SDL_Surface* screen; // l´ecran principale
SDL_Event event; // gestion d´evenement
void init_SDL() // initialise SDL
{
SDL_Init(SDL_INIT_VIDEO|SDL_INIT_TIMER); // preapare SDL
screen = SDL_SetVideoMode(1024, 768, 32,SDL_HWSURFACE|SDL_DOUBLEBUF|SDL_FULLSCREEN); / / mode graphique
SDL_ShowCursor(0); / / eneleve la souris
}
SDL_Rect Rect(int x,int y,int w=0,int h=0) // pour faire un rectangle plus vite
{
SDL_Rect r;
r.x=x;
r.y=y;
r.w=w;
r.h=h;
return r;
}
SDL_Surface* LoadBMP(char* fichier,int vram=1) / / voir tutorial 2.1.2
{
SDL_Surface* f = SDL_LoadBMP(fichier); // charge l´image dans f en RAM
SDL_Surface* r;
if ( vram)
r=SDL_CreateRGBSurface(SDL_HWSURFACE, f->w, f->h, 32, 0, 0, 0, 0);// cree une image en VRAM
if ( r==NULL) vram=0; // Si plus de place en VRAM, alors r= NULL.
if ( !vram)
r=SDL_CreateRGBSurface(SDL_SWSURFACE, f->w, f->h, 32, 0, 0, 0, 0); / / cree une image en VRAM
SDL_Rect R=Rect(0,0,f->w,f->h);
SDL_BlitSurface(f,NULL,r,&); // copie l´image f de la RAM vers firstscreen en VRAM
SDL_FreeSurface(f); / / supprime la surface f : inutile maintenant --> libere la mémoire
return r;
}
int main(int argc , char **argv)
{
int s=1; / / sera le sens de déplacement de l´image : 1 = droite, -1 = gauche
int sx=1,sy=1; / / sens de déplacement en x et en y
SDL_Rect rect1; // structure rectangle ( contiendra la position de la balle pour rect1.x et rect1.y
SDL_Surface* firstscreen; / / tampon temporaire
SDL_Surface* mec[3];
int fini=0;
init_SDL(); // initialise ( plus haut)
/ / on dessine
rect1.x = 0;
rect1.y = 0;
firstscreen=LoadBMP("img.bmp");
mec[0]=LoadBMP("1.bmp");
mec[1]=LoadBMP("2.bmp");
mec[2]=LoadBMP("3.bmp");
//SDL_SetColorKey(mec[3],SDL_SRCCOLORKEY , SDL_MapRGBA(mec[3]->format,255,0,255,0));
//SDL_SetAlpha(mec[3],SDL_SRCALPHA,128);
while(1)
{
SDL_PollEvent(&); / / récupere l´evenement suivant
if ( event.type == SDL_KEYDOWN && event.key.keysym.sym == SDLK_RETURN) / / si c´est l´appui d´une touche et que C return
break; / / on sort du while.
if ( event.type == SDL_KEYDOWN)
{
if ( event.key.keysym.sym == SDLK_LEFT) rect1.x-=3;
if ( event.key.keysym.sym == SDLK_RIGHT) rect1.x+=3;
if ( event.key.keysym.sym == SDLK_UP) rect1.y-=3;
if ( event.key.keysym.sym == SDLK_DOWN) rect1.y+=3;
}
if ( rect1.x<0) sx=1;
if ( rect1.y<0) sy=1;
if ( rect1.x>950) sx=-1;
if ( rect1.y>650) sy=-1;
SDL_BlitSurface(firstscreen,NULL,screen,NULL); // colle l´image sur l´écran, a la position rect1, donc surtout a x pour la coordonnée x.
SDL_BlitSurface(mec[3],NULL,screen,&1);
SDL_Flip(screen); // affiche la prochaine frame
}
SDL_ShowCursor(1); // reactive la souris
SDL_Quit(); // quitte SDL
return 0; // quitte le programme
}