rendered paste body#include "SDL.h"
#include "windows.h"
#define TILE_SIZE 32
#define WORLD_SIZEX 20
#define WORLD_SIZEY 20
#define SCREEN_SIZEX 12
#define SCREEN_SIZEY 12
int gameover;
int speedplayer1 = 1;
SDL_Rect srcCam;
/* source and destination rectangles */
SDL_Rect rcSrc, rcSprite;
SDL_Surface* tiles[3];
char map[WORLD_SIZEY][WORLD_SIZEX] = {
{2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2},
{2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2},
{2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2},
{2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2},
{2, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 2},
{2, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 2},
{2, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 2},
{2, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 2},
{2, 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 2},
{2, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2},
{2, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2},
{2, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 2},
{2, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 2},
{2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2},
{2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2},
{2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2},
{2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2},
{2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2},
{2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2},
{2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2}, } ;
void load_tiles()
{
tiles[0] = SDL_LoadBMP("data//graphic//tile0.bmp");
tiles[1] = SDL_LoadBMP("data//graphic//tile1.bmp");
tiles[2] = SDL_LoadBMP("data//graphic//tile2.bmp");
}
void draw_tiles(SDL_Surface *screen)
{
SDL_Rect rect;
SDL_Rect srcRect;
for (int y = 0; y < SCREEN_SIZEY; y++)
{
for (int x = 0; x < SCREEN_SIZEX; x++)
{
int scroll_x = (srcCam.x / TILE_SIZE);
int scroll_y = (srcCam.y / TILE_SIZE);
int offset_x = scroll_x & (TILE_SIZE - 1);
int offset_y = scroll_y & (TILE_SIZE - 1);
int tile = map[offset_x][offset_y];
rect.x = (tile - 1) * TILE_SIZE;
rect.y = 0;
rect.w = TILE_SIZE;
rect.h = TILE_SIZE;
SDL_BlitSurface( tiles[tile], &srcRect, screen, &rect );
}
}
}
void HandleEvent(SDL_Event event)
{
srcCam.x = 0;
srcCam.y = 0;
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_a:
if ( rcSrc.x == 192 )
rcSrc.x = 224;
else
rcSrc.x = 192;
rcSprite.x -= speedplayer1*32;
srcCam.x -= 32;
Sleep(300);
break;
case SDLK_d:
if ( rcSrc.x == 64 )
rcSrc.x = 96;
else
rcSrc.x = 64;
rcSprite.x += speedplayer1*32;
srcCam.x += 32;
Sleep(300);
break;
case SDLK_w:
if ( rcSrc.x == 0 )
rcSrc.x = 32;
else
rcSrc.x = 0;
rcSprite.y -= speedplayer1*32;
srcCam.y -= 32;
Sleep(300);
break;
case SDLK_s:
if ( rcSrc.x == 128 )
rcSrc.x = 160;
else
rcSrc.x = 128;
rcSprite.y += speedplayer1*32;
srcCam.y += 32;
Sleep(300);
break;
}
break;
}
}
int main ( int argc, char *argv[] )
{
SDL_Surface *screen, *temp, *lol, *sprite;
int colorkey;
/* initialize SDL */
SDL_Init(SDL_INIT_VIDEO);
/* set the title bar */
SDL_WM_SetCaption("Oxeria RPG", "MMORPG");
/* create window */
screen = SDL_SetVideoMode(640, 480, 0, 0);
/* set keyboard repeat */
SDL_EnableKeyRepeat(20, 20);
load_tiles();
draw_tiles(screen);
if ( SDL_Init(SDL_INIT_VIDEO) < 0 )
{
printf("Unable to init SDL: %s\n", SDL_GetError());
gameover = 0;
}
if( !screen ) {
fprintf(stderr, "Couldn't create a surface: SCREEN%s\n",
SDL_GetError());
return -1;
}
if( !tiles ) {
fprintf(stderr, "Couldn't create a surface: TILES%s\n",
SDL_GetError());
return -1;
}
if( !temp ) {
fprintf(stderr, "Couldn't create a surface: TEMP%s\n",
SDL_GetError());
return -1;
}
if( !sprite ) {
fprintf(stderr, "Couldn't create a surface: SPRITE%s\n",
SDL_GetError());
return -1;
}
/* load sprite */
temp = SDL_LoadBMP("data//graphic//sprite.bmp");
sprite = SDL_DisplayFormat(temp);
SDL_FreeSurface(temp);
// Load a bmp file as the icon of the program
SDL_WM_SetIcon(SDL_LoadBMP("data//graphic//icon.bmp"),NULL);
/* setup sprite colorkey and turn on RLE */
colorkey = SDL_MapRGB(screen->format, 255, 0, 255);
SDL_SetColorKey(sprite, SDL_SRCCOLORKEY | SDL_RLEACCEL, colorkey);
/* set sprite position */
rcSprite.x = 150;
rcSprite.y = 150;
rcSrc.x = 128;
rcSrc.y = 0;
rcSrc.w = TILE_SIZE;
rcSrc.h = TILE_SIZE;
gameover = 0;
/* message pump */
while (!gameover)
{
SDL_Event event;
/* look for an event */
if (SDL_PollEvent(&event)) {
HandleEvent(event);
}
/* collide with edges of screen */
if ( rcSprite.x < 0 ) {
rcSprite.x = 0;
}
else if ( rcSprite.x > WORLD_SIZEY-TILE_SIZE ) {
rcSprite.x = WORLD_SIZEY-TILE_SIZE;
}
if ( rcSprite.y < 0 ) {
rcSprite.y = 0;
}
else if ( rcSprite.y > WORLD_SIZEX-TILE_SIZE ) {
rcSprite.y = WORLD_SIZEX-TILE_SIZE;
}
/* draw the sprite */
SDL_BlitSurface(sprite, &rcSrc, screen, &rcSprite);
/* update the screen */
SDL_UpdateRect(screen, 0, 0, 0, 0);
}
/* clean up */
SDL_FreeSurface(sprite);
SDL_Quit();
return 0;
}