Kaktusen

Kaktus - Digging

Apr 13th, 2012
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.86 KB | None | 0 0
  1. #include "SDL/SDL.h"
  2. #include "classes.h"
  3.  
  4. SDL_Surface *tileset = SDL_LoadBMP("data/images/tileset.bmp");
  5. SDL_Surface *background = SDL_LoadBMP("data/images/background.bmp");
  6. SDL_Surface *screen = SDL_SetVideoMode(640, 480, 32, SDL_SWSURFACE);
  7.  
  8. void apply_surface(int x, int y, SDL_Surface *source, SDL_Surface *destination) {
  9.     SDL_Rect rect;
  10.  
  11.     rect.x = x;
  12.     rect.y = y;
  13.  
  14.     SDL_BlitSurface(source, NULL, destination, &rect);
  15. }
  16.  
  17. void load_sprite(int x, int y, SDL_Surface *source, SDL_Surface *destination, int bx, int by, int width, int height) {
  18.     SDL_Rect rect;
  19.     SDL_Rect offset;
  20.  
  21.     offset.x = x;
  22.     offset.y = y;
  23.  
  24.     rect.x = bx;
  25.     rect.y = by;
  26.     rect.w = width;
  27.     rect.h = height;
  28.  
  29.     SDL_BlitSurface(source, &rect, destination, &offset);
  30. }
  31.  
  32. int main(int argc, char *args[]) {
  33.     SDL_Init(SDL_INIT_EVERYTHING);
  34.  
  35.     bool gameLoop = true;
  36.     int currentTick = SDL_GetTicks();
  37.     Uint8 *key;
  38.     int maxFps = 30;
  39.     int i, i2;
  40.  
  41.     Uint32 colorkey = SDL_MapRGB( tileset->format, 255, 0, 255);
  42.     SDL_SetColorKey( tileset, SDL_SRCCOLORKEY, colorkey );
  43.  
  44.     cPlayer.x = 0;
  45.     cPlayer.y = 0;
  46.  
  47.     int map[15][20] = {
  48.         {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
  49.         {3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3},
  50.         {3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3},
  51.         {3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3},
  52.         {3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3},
  53.         {3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3},
  54.         {3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3},
  55.         {3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3},
  56.         {3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3},
  57.         {3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3},
  58.         {3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3},
  59.         {3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3},
  60.         {3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3},
  61.         {3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3},
  62.         {3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3},
  63.     };
  64.  
  65.     while(gameLoop) {
  66.         SDL_PumpEvents();
  67.         key = SDL_GetKeyState(NULL);
  68.         currentTick = SDL_GetTicks();
  69.         apply_surface(0, 0, background, screen);
  70.  
  71.  
  72.         //fps
  73.         if(SDL_GetTicks() - currentTick < 1000 / maxFps) {
  74.             SDL_Delay(((1000/maxFps)-(SDL_GetTicks() - currentTick)));
  75.         }
  76.  
  77.         if(key[SDLK_LEFT] || key[SDLK_a]) {
  78.             cPlayer.x -= 32;
  79.         }
  80.         else if(key[SDLK_RIGHT] || key[SDLK_d]) {
  81.             cPlayer.x += 32;
  82.         }
  83.         else if(key[SDLK_DOWN] || key[SDLK_s]) {
  84.             cPlayer.y += 32;
  85.         }
  86.         else if(key[SDLK_UP] || key[SDLK_w]) {
  87.             cPlayer.y -= 32;
  88.         }
  89.  
  90.         if(key[SDLK_ESCAPE]) {
  91.             gameLoop = false;
  92.         }
  93.  
  94.         for(i=0; i<15; i++) {
  95.             for(i2=0; i2<20; i2++) {
  96.                 switch(map[i][i2]) {
  97.                     case 0:
  98.                         load_sprite(i2*32, i*32, tileset, screen, 2+32, 1, 32, 32);
  99.                         break;
  100.  
  101.                     case 1:
  102.                         load_sprite(i2*32, i*32, tileset, screen, 4+(32*4), 1, 32, 32);
  103.                         break;
  104.  
  105.                     case 2:
  106.                         load_sprite(i2*32, i*32, tileset, screen, 3+(32*3), 1, 32, 32);
  107.                         break;
  108.  
  109.                     case 3:
  110.                         load_sprite(i2*32, i*32, tileset, screen, 3+(32*2), 1, 32, 32);
  111.                         break;
  112.  
  113.                     case 4:
  114.                         load_sprite(i2*32, i*32, tileset, screen, 5+(32*5), 1, 32, 32);
  115.                 }
  116.                 if(i2 == cPlayer.x / 32 && i == cPlayer.y / 32) {
  117.                     map[i][i2] = 0;
  118.                 }
  119.             }
  120.         }
  121.         load_sprite(cPlayer.x, cPlayer.y, tileset, screen, 1, 1, 32, 32);
  122.  
  123.         SDL_Flip(screen);
  124.     }
  125.  
  126.     SDL_FreeSurface(tileset);
  127.     SDL_FreeSurface(background);
  128.     SDL_Quit();
  129. }
Advertisement
Add Comment
Please, Sign In to add comment