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
|
#include <stdlib.h>
#include <SDL.h>
#include<SDL_image.h>
int main(int argc, char *argv[])
{
SDL_Surface *screen, *image;
SDL_Rect dst, dstblue;
SDL_Event event;
Uint8 *keys;
int tuxX = 50, tuxY = 50;
bool done = false;
if(SDL_Init(SDL_INIT_VIDEO) <0)
{
printf("Can't init SDL: %s\n", SDL_GetError());
exit(1);
}
atexit(SDL_Quit);
screen = SDL_SetVideoMode(640, 480, 16, SDL_HWSURFACE | SDL_DOUBLEBUF);
SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, 0, 0, 255));
if(screen == NULL)
{
printf("Can't set video mode: %s\n", SDL_GetError());
exit(1);
}
image = SDL_LoadBMP("fab1.bmp");
if(image == NULL)
{
printf("Can't load image of tux: %s\n", SDL_GetError());
exit(1);
}
dst.w = image->w;
dst.h = image->h;
dstblue.w = image->w + 1;
dstblue.h = image->h + 1;
SDL_SetColorKey(image, SDL_SRCCOLORKEY, SDL_MapRGB(image->format, 255, 0, 255));
while(!done)
{
while(SDL_PollEvent(&event))
{
switch(event.type)
{
case SDL_QUIT:
done = true;
break;
}
}
keys = SDL_GetKeyState(NULL);
if(keys[SDLK_UP])
{
if(tuxY > 10)
tuxY--;
}
if(keys[SDLK_DOWN])
{
if(tuxY < 470 - image->h)
tuxY++;
}
if(keys[SDLK_RIGHT])
{
if(tuxX < 630 - image->w)
tuxX++;
}
if(keys[SDLK_LEFT])
{
if(tuxX > 10)
tuxX--;
}
dst.x = tuxX;
dst.y = tuxY;
dstblue.x = tuxX - 1;
dstblue.y = tuxY - 1;
SDL_FillRect(screen, &dstblue, SDL_MapRGB(screen->format, 0, 0, 255));
SDL_BlitSurface(image, NULL, screen, &dst);
SDL_Flip(screen);
}
SDL_FreeSurface(image);
return 0;
} |
Partager