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_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); /* Принудительное обновление окна программы */ }