Skip to content

Instantly share code, notes, and snippets.

@jeffrydegrande
Created August 27, 2013 03:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jeffrydegrande/6349264 to your computer and use it in GitHub Desktop.
Save jeffrydegrande/6349264 to your computer and use it in GitHub Desktop.
#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