Created
August 27, 2013 03:11
-
-
Save jeffrydegrande/6349264 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include "SDL.h" | |
#define SCREEN_WIDTH 640 | |
#define SCREEN_HEIGHT 480 | |
#define SPRITE_SIZE 32 | |
SDL_Texture *loadTexture(SDL_Renderer *renderer, const char *filename, int colorkey) { | |
SDL_Surface *bmp = SDL_LoadBMP(filename); | |
if (colorkey > 0) { | |
SDL_SetColorKey(bmp, SDL_TRUE, colorkey); | |
} | |
SDL_Texture *texture = SDL_CreateTextureFromSurface(renderer, bmp); | |
SDL_FreeSurface(bmp); | |
return texture; | |
} | |
int main(int argc, char* argv[]) | |
{ | |
SDL_Rect rcSprite, rcGrass; | |
SDL_Event event; | |
const Uint8 *keystate; | |
int gameover; | |
/* initialize video system */ | |
SDL_Init(SDL_INIT_EVERYTHING); | |
SDL_Window *window = SDL_CreateWindow("SDL Move", | |
SDL_WINDOWPOS_CENTERED, | |
SDL_WINDOWPOS_CENTERED, | |
SCREEN_WIDTH, | |
SCREEN_HEIGHT, | |
SDL_WINDOW_SHOWN); | |
SDL_Renderer *renderer = SDL_CreateRenderer(window, -1, | |
SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC); | |
// int colorkey = SDL_MapRGB(window->format, 255, 0, 255); | |
SDL_Texture *sprite = loadTexture(renderer, "sprite.bmp", 0); | |
SDL_Texture *grass = loadTexture(renderer, "grass.bmp", 0); | |
/* set sprite position */ | |
rcSprite.x = 0; | |
rcSprite.y = 0; | |
gameover = 0; | |
/* message pump */ | |
while (!gameover) | |
{ | |
/* look for an event */ | |
if (SDL_PollEvent(&event)) { | |
/* an event was found */ | |
switch (event.type) { | |
/* close button clicked */ | |
case SDL_QUIT: | |
gameover = 1; | |
break; | |
/* handle the keyboard */ | |
case SDL_KEYDOWN: | |
switch (event.key.keysym.sym) { | |
case SDLK_ESCAPE: | |
case SDLK_q: | |
gameover = 1; | |
break; | |
case SDLK_LEFT: | |
rcSprite.x -= 5; | |
break; | |
case SDLK_RIGHT: | |
rcSprite.x += 5; | |
break; | |
case SDLK_UP: | |
rcSprite.y -= 5; | |
break; | |
case SDLK_DOWN: | |
rcSprite.y += 5; | |
break; | |
} | |
break; | |
} | |
} | |
/* collide with edges of screen */ | |
if ( rcSprite.x < 0 ) { | |
rcSprite.x = 0; | |
} | |
else if ( rcSprite.x > SCREEN_WIDTH-SPRITE_SIZE ) { | |
rcSprite.x = SCREEN_WIDTH-SPRITE_SIZE; | |
} | |
if ( rcSprite.y < 0 ) { | |
rcSprite.y = 0; | |
} | |
else if ( rcSprite.y > SCREEN_HEIGHT-SPRITE_SIZE ) { | |
rcSprite.y = SCREEN_HEIGHT-SPRITE_SIZE; | |
} | |
rcGrass.x = 0; | |
rcGrass.y = 0; | |
rcGrass.w = 32; | |
rcGrass.h = 32; | |
SDL_RenderClear(renderer); | |
SDL_RenderCopy(renderer, grass, NULL, &rcGrass); | |
/* draw the grass */ | |
for (int x = 0; x < SCREEN_WIDTH / SPRITE_SIZE; x++) { | |
for (int y = 0; y < SCREEN_HEIGHT / SPRITE_SIZE; y++) { | |
rcGrass.x = x * SPRITE_SIZE; | |
rcGrass.y = y * SPRITE_SIZE; | |
SDL_RenderCopy(renderer, grass, NULL, &rcGrass); | |
} | |
} | |
/* draw the sprite */ | |
rcSprite.w = 32; | |
rcSprite.h = 32; | |
SDL_RenderCopy(renderer, sprite, NULL, &rcSprite); | |
SDL_RenderPresent(renderer); | |
} | |
/* clean up */ | |
SDL_DestroyTexture(sprite); | |
SDL_DestroyTexture(grass); | |
SDL_DestroyRenderer(renderer); | |
SDL_DestroyWindow(window); | |
SDL_Quit(); | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment