落書きノート

ふと自分が気になった事を書いてます

SDLでゲームプログラミング

ゲームプログラミングで試したいことが出来たので、とりあえず雛形を作りました。いつものように単発で作っていくだけです。次回以降の記事からメニュー選択画面を作ってみたいと思います。思いつきなのでとりあえずmacOSで試しました。

#include <SDL2/SDL.h>
#include <stdio.h>

const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;
bool init();
bool loadMedia();
void close();
SDL_Window *gWindow = NULL;
SDL_Surface *gScreenSurface = NULL;
SDL_Surface *gHelloWorld = NULL;
SDL_Event event;
bool done = false;

bool init()
{
  bool success = true;
  if(SDL_Init(SDL_INIT_VIDEO) < 0) {
    printf( "SDL could not initialize! SDL_Error: %s\n", SDL_GetError());
    success = false;
  } else {
    gWindow = SDL_CreateWindow( "SDL Tutorial", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN );
    if(gWindow == NULL) {
      printf( "Window could not be created! SDL_Error: %s\n", SDL_GetError() );
      success = false;
    } else {
      gScreenSurface = SDL_GetWindowSurface(gWindow);
    }
  }

  return success;
}

bool loadMedia()
{
  bool success = true;
  gHelloWorld = SDL_LoadBMP("./hello_world.bmp");
  if( gHelloWorld == NULL )
    {
      printf( "Unable to load image %s! SDL Error: %s\n", "02_getting_an_image_on_the_screen/hello_world.bmp", SDL_GetError() );
      success = false;
    }
  
  return success;
}

void close()
{
  SDL_FreeSurface(gHelloWorld);
  gHelloWorld = NULL;
  SDL_DestroyWindow(gWindow);
  gWindow = NULL;
  SDL_Quit();
}

int main( int argc, char* args[] )
{
  if(!init()) {
    printf( "Failed to initialize!\n" );
  } else {
    if(!loadMedia()) {
      printf( "Failed to load media!\n" );
    }
    else {
      while(!done) {
        while(SDL_PollEvent(&event)) {
          switch(event.type) {
          case SDL_KEYDOWN:
            if(event.key.keysym.sym == SDLK_ESCAPE) {
              done = true;
            }
            break;
          case SDL_QUIT:
            done = true;
            break;
          }
          SDL_BlitSurface(gHelloWorld, NULL, gScreenSurface, NULL);
          SDL_UpdateWindowSurface(gWindow);
        }
      }
    }
  }
  
  close();
  
  return 0;
}
> brew install sdl2
> g++ menu.cpp -o menu -I/usr/local/include -L/usr/local/lib -lSDL2

f:id:kh2n:20170616155215p:plain