Advertisement
thecplusplusguy

SDL tutorial 11

Jun 22nd, 2012
2,206
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.83 KB | None | 0 0
  1. //http://www.youtube.com/user/thecplusplusguy
  2. //Thanks for the typed in code to Tapit85
  3. #include <SDL/SDL.h>
  4.  
  5. bool collision(SDL_Rect* rect1,SDL_Rect* rect2)
  6. {
  7.     if(rect1->y >= rect2->y + rect2->h)
  8.         return 0;
  9.     if(rect1->x >= rect2->x + rect2->w)
  10.         return 0;
  11.     if(rect1->y + rect1->h <= rect2->y)
  12.         return 0;
  13.     if(rect1->x + rect1->w <= rect2->x)
  14.         return 0;
  15.     return 1;
  16. }
  17.  
  18.  
  19.  
  20.  
  21. int width = 640;
  22. int height = 480;
  23.  
  24. int main(int argc, char** argv)
  25. {
  26.     SDL_Init(SDL_INIT_EVERYTHING);
  27.     SDL_Surface *screen;
  28.     screen = SDL_SetVideoMode(width, height, 32, SDL_SWSURFACE);
  29.     bool running = true;
  30.     const int FPS = 30;
  31.     Uint32 start;
  32.     bool b[4] = {0,0,0,0};
  33.     SDL_Rect rect;
  34.     rect.x = 10;
  35.     rect.y = 10;
  36.     rect.w = 20;
  37.     rect.h = 20;
  38.     SDL_Rect recarr[5];
  39.     recarr[0].x=70;
  40.     recarr[0].y=0;
  41.     recarr[0].h=200;
  42.     recarr[0].w=10;
  43.  
  44.     recarr[1].x=300;
  45.     recarr[1].y=200;
  46.     recarr[1].h=20;
  47.     recarr[1].w=80;
  48.  
  49.     recarr[2].x=200;
  50.     recarr[2].y=100;
  51.     recarr[2].h=100;
  52.     recarr[2].w=10;
  53.  
  54.     recarr[3].x=40;
  55.     recarr[3].y=300;
  56.     recarr[3].h=20;
  57.     recarr[3].w=60;
  58.  
  59.     recarr[4].x=100;
  60.     recarr[4].y=0;
  61.     recarr[4].h=200;
  62.     recarr[4].w=10;
  63.  
  64.     Uint32 color2 = SDL_MapRGB(screen->format, 0xff,0xff,0xff);
  65.     Uint32 color = SDL_MapRGB(screen->format, 0,0,0);
  66.     for(int i = 0; i < 5; i += 1) {
  67.             SDL_FillRect(screen,&recarr[i],color2);
  68.     }
  69.     while(running) {
  70.         start = SDL_GetTicks();
  71.         SDL_Event event;
  72.         while(SDL_PollEvent(&event)) {
  73.             switch(event.type) {
  74.                 case SDL_QUIT:
  75.                     running = false;
  76.                     break;
  77.                 case SDL_KEYDOWN:
  78.                     switch(event.key.keysym.sym) {
  79.                         case SDLK_UP:
  80.                             b[0] = 1;
  81.                             break;
  82.                         case SDLK_LEFT:
  83.                             b[1] = 1;
  84.                             break;
  85.                         case SDLK_DOWN:
  86.                             b[2] = 1;
  87.                             break;
  88.                         case SDLK_RIGHT:
  89.                             b[3] = 1;
  90.                             break;
  91.                    
  92.                     }
  93.                     break;
  94.                 case SDL_KEYUP:
  95.                     switch(event.key.keysym.sym) {
  96.                         case SDLK_UP:
  97.                             b[0] = 0;
  98.                             break;
  99.                         case SDLK_LEFT:
  100.                             b[1] = 0;
  101.                             break;
  102.                         case SDLK_DOWN:
  103.                             b[2] = 0;
  104.                             break;
  105.                         case SDLK_RIGHT:
  106.                             b[3] = 0;
  107.                             break;
  108.                    
  109.                     }
  110.                     break;
  111.             }
  112.         }
  113.  
  114.         SDL_FillRect(screen, &rect, color);
  115.  
  116.         //logic
  117.         if(b[0]) {
  118.             rect.y--;
  119.             for(int i = 0; i < 5; i += 1)
  120.                 if(collision(&rect,&recarr[i]))
  121.                     rect.y++;
  122.         }
  123.         if(b[1]) {
  124.             rect.x--;
  125.             for(int i = 0; i < 5; i += 1)
  126.                 if(collision(&rect,&recarr[i]))
  127.                     rect.x++;
  128.         }
  129.         if(b[2]) {
  130.             rect.y++;
  131.             for(int i = 0; i < 5; i += 1)
  132.                 if(collision(&rect,&recarr[i]))
  133.                     rect.y--;
  134.         }
  135.         if(b[3]) {
  136.             rect.x++;
  137.             for(int i = 0; i < 5; i += 1)
  138.                 if(collision(&rect,&recarr[i]))
  139.                     rect.x--;
  140.         }
  141.  
  142.  
  143.         //render
  144.         SDL_FillRect(screen, &rect, color2);
  145.         SDL_Flip(screen);
  146.  
  147.         if(1000/FPS > SDL_GetTicks()-start) {
  148.             SDL_Delay(1000/FPS-(SDL_GetTicks()-start));
  149.         }
  150.     }
  151.     SDL_Quit();
  152.     return 0;
  153. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement