BCCでSDL 簡単なプログラミング入門
BCCでSDLを使ったプログラムです。
最初は簡単なプログラムから作っていこうと思います。
かなり簡単な内容です。
ウィンドウをSDLで作って、10mm秒間隔で塗りつぶす色を変えるだけです。
初心者を対象に(自分も含め)プログラムを作って、少し進んだ課題形式で演習するのが上達の近道だと思います。
リファレンスはここhttp://www.libsdl.org/intro.jp/toc.html
まずリファレンスに軽く目を通してください。次に全部印刷して、何時でも読めるようにする事をオススメします!
リファレンスを読むのがめんどくさい人はここhttp://tokyo.cool.ne.jp/sdl/
私もここで結構勉強しましたが、ある程度使えるようになったら、何か自分の作りたいゲームを作る事をオススメします!
SDL_defined.h
#ifndef _INCLUDE_DEFINED #define _INCLUDE_DEFINED #include <SDL/SDL.h> #include <stdio.h> #define WIDTH 600 #define HEIGHT 480 #define BPP 32 #define TITLE "SDL" enum{//初期化スイッチ TIMER = 0, VIDEO, JOYSTICK, ALL }; #endif//end windowdefine |
test.cpp
#include "SDL_defined.h" #include "CanvasSDL.h" void EndProc(void); bool GetEvent(void); void MainLoop(void); /*初期化を設定後メインループに遷移する*/ int main(int argc,char *argv[]) { if( InitializeSDL(VIDEO) == false){ fprintf(stderr,"InitializeError! %s",SDL_GetError); return 1; } MainLoop(); EndProc(); return 0; } //各イベントの処理ループ void MainLoop(void){ Uint32 color; color = 0x00000000; while(true){ PaintingOut(color); ScreenUpdate(); if(GetEvent() == false)break; SDL_Delay(10);//1秒待機 if(color < 0x000000ff){ color += 0x00000001; }else if(color < 0x0000ffff){ color += 0x00000100; }else if(color < 0x00ffffff){ color += 0x00010000; }else{ color = 0x0; } } } void EndProc(void){ //モジュール内のメモリを解放する FreeCanvas(); SDL_Quit(); } bool GetEvent(){ SDL_Event ev; //SDLKey *key; while(SDL_PollEvent(&ev)){ switch(ev.type){ case SDL_QUIT://終了 return false; break; case SDL_KEYDOWN://終了 return false; break; } } return true;//変化無しで継続 } |
CanvasSDL.h
#ifndef _INCLUDE_SETUP #define _INCLUDE_SETUP #include "SDL_defined.h" bool InitializeSDL(Uint8 initType); bool SDLinit(int type); void PaintingOut(Uint32 color); void ScreenUpdate(void); void FreeCanvas(void); #endif |
CanvasSDL.cpp
#include "CanvasSDL.h" //フィールド変数 static SDL_Surface *screen; bool InitializeSDL(Uint8 initType) { //SDLの初期化 if( SDLinit(initType) == false ){ return false; } //キャプション設定(Videoモードを設定する前に先に設定する必要がある) SDL_WM_SetCaption(TITLE,NULL); //ビデオモード設定 screen = NULL; screen = SDL_SetVideoMode( WIDTH,HEIGHT,BPP, SDL_HWSURFACE | SDL_DOUBLEBUF ); return true; } bool SDLinit(int type){ switch(type){ case VIDEO: if( SDL_Init(SDL_INIT_VIDEO) < 0 ){ return false; }break; case TIMER: if( SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER) < 0 ){ return false; }break; case JOYSTICK: if( SDL_Init(SDL_INIT_VIDEO | SDL_INIT_JOYSTICK) < 0 ){ return false; }break; case ALL: if( SDL_Init(SDL_INIT_VIDEO | SDL_INIT_JOYSTICK | SDL_INIT_TIMER) < 0 ){ return false; }break; }//end initVIdeo return true; } void PaintingOut(Uint32 color){ if(screen != NULL){ SDL_FillRect( screen, NULL, color); } return; } void ScreenUpdate(void){ if(screen != NULL){ SDL_Flip(screen); } return; } void FreeCanvas(void){ if(screen != NULL){ SDL_FreeSurface(screen); screen = NULL;//CleanUp } return; } |
演習1 : グラデーションする色、黒→青→水色→白であるが、
これを逆順にグラデーションするようにしてください。(白→水色→青→黒)
演習2 : ウィンドウのサイズを任意のサイズに変更してください。
BPPの値を8、16、24と変えてみてください。
何か質問があればコメント欄にどうぞ。