int main(int argc, char** argv)
{
SDL_Surface *screen, *molot, *pinck, *akula, *tor , *doska, *gvozd; // поверхности
SDL_Event event;
SDL_Rect dest_molot, dest_doska, dest_gvozd, kvadrat;
int go, flag=0;
SDL_Rect dstarea;
dstarea.x = 0;
dstarea.y = 0;
dstarea.w = scrwidth;
dstarea.h = scrheight;
/* Начальная инициализация */
if(SDL_Init(SDL_INIT_VIDEO)<0)
{
printf("Unable to init SDL: %s\n", SDL_GetError());
return 1;
}
screen = SDL_SetVideoMode(scrwidth, scrheight, scrdepth, SDL_ANYFORMAT);
if(!screen){
printf("Unable to set 600x400 video: %s\n", SDL_GetError());
return 1;
}
// рисуем предметы
pinck=SDL_LoadBMP("molot.bmp");
akula=SDL_LoadBMP("riba.bmp");
tor=SDL_LoadBMP("tor.bmp");
molot=pinck;
doska=SDL_LoadBMP("doska.bmp");
gvozd=SDL_LoadBMP("gvozd.bmp");
// первоначальные данные предметов
dest_doska.x=100;
dest_doska.y=50;
dest_molot.y=67;
dest_molot.x=350;
dest_gvozd.y=70;
dest_gvozd.x=157;
kvadrat.w=600;
kvadrat.h=400;
SDL_BlitSurface (gvozd, NULL, screen, &dest_gvozd); // наложение молота
SDL_BlitSurface (molot, NULL, screen, &dest_molot); // наложение молота
SDL_BlitSurface (doska, NULL, screen, &dest_doska);
while(go)
{
while(SDL_PollEvent(&event))
{
switch (event.type)
{
case SDL_KEYDOWN:
{
if (event.key.keysym.sym == SDLK_ESCAPE)
{
go = 0;
break;
}
if(event.key.keysym.sym == SDLK_1)
{
SDL_FillRect(screen, &dstarea, SDL_MapRGB(screen->format, 0, 0, 0));
SDL_BlitSurface (gvozd, NULL, screen, &dest_gvozd);
SDL_BlitSurface (doska, NULL, screen, &dest_doska);
molot=tor;
dest_molot.y=40;
dest_molot.x=350;
SDL_BlitSurface (molot, NULL, screen, &dest_molot);
SDL_Flip(screen);
}
if(event.key.keysym.sym == SDLK_2)
{
SDL_FillRect(screen, &dstarea, SDL_MapRGB(screen->format, 0, 0, 0));
SDL_BlitSurface (gvozd, NULL, screen, &dest_gvozd);
SDL_BlitSurface (doska, NULL, screen, &dest_doska);
molot=akula;
dest_molot.y=40;
dest_molot.x=290;
SDL_BlitSurface (molot, NULL, screen, &dest_molot);
SDL_Flip(screen);
}
if(event.key.keysym.sym == SDLK_3)
{
SDL_FillRect(screen, &dstarea, SDL_MapRGB(screen->format, 0, 0, 0));
SDL_BlitSurface (gvozd, NULL, screen, &dest_gvozd);
SDL_BlitSurface (doska, NULL, screen, &dest_doska);
molot=pinck;
dest_molot.y=67;
dest_molot.x=350;
SDL_BlitSurface (molot, NULL, screen, &dest_molot);
SDL_Flip(screen);
}
if (event.key.keysym.sym == SDLK_RETURN)
{
while((dest_gvozd.x+112)<dest_molot.x && (dest_gvozd.x+112)>dest_doska.x )
{
SDL_FillRect(screen, &dstarea, SDL_MapRGB(screen->format, 0, 0, 0));
SDL_BlitSurface (molot, NULL, screen, &dest_molot);
SDL_BlitSurface (gvozd, NULL, screen, &dest_gvozd);
dest_molot.x--;
SDL_BlitSurface (doska, NULL, screen, &dest_doska);
SDL_Delay(10);
SDL_Flip(screen); /* Принудительное обновление окна программы */
}
if((dest_gvozd.x+112)>dest_doska.x)
{
flag=20;
}
while((flag>0) && ((dest_gvozd.x+50)>dest_doska.x))
{
SDL_FillRect(screen, &dstarea, SDL_MapRGB(screen->format, 0, 0, 0));
SDL_BlitSurface (molot, NULL, screen, &dest_molot);
SDL_BlitSurface (gvozd, NULL, screen, &dest_gvozd);
dest_gvozd.x--;
dest_molot.x++;
flag--;
SDL_BlitSurface (doska, NULL, screen, &dest_doska);
SDL_Delay(1);
SDL_Flip(screen); /* Принудительное обновление окна программы */
}
flag=0;
}
}
}
}
SDL_Delay(1);
SDL_Flip(screen); /* Принудительное обновление окна программы */
}