今日の雑記

生きることでいっぱいいっぱい

libSDL_shmups を組み込んだ場合の理想系

こんなのを想像というか妄想しています。「main.c」の「main 関数」の一例。


int main(int argc, char *argv[])
{
const int INTERVAL_BASE = 16;
SDL_Event event;
int interval = INTERVAL_BASE;
long prvTickCount = 0;
long nowTick;
int frame;

srand(num);

*1 initSDL();

SDL_PCB_TestInit(SCREEN_X, SCREEN_Y);

if(SDL_SHMUPS_base_init() == SDL_FALSE){
*2 ExitProgram();
return -1;
}
SDL_SHMUPS_frame_init(128, 0);
SDL_SHMUPS_noize_init(SCREEN_SX, SCREEN_SY);
SDL_SHMUPS_star_init(512, 128.0f, 0.0f, 512.0f, 480.0f);
if(SDL_SHMUPS_stgctrl_init() == SDL_FALSE){
*2 ExitProgram();
return -1;
}

*2 atexit(ExitProgram);

SDL_SHMUPS_effect_init(1024);
SDL_SHMUPS_collision_init();
SDL_SHMUPS_ship_init(128.0f, 0.0f, 512.0f, 480.0f);
SDL_SHMUPS_enemy_init(128.0f, 0.0f, 512.0f, 480.0f);

GameExec = SDL_TRUE;

while(SDL_TRUE){
SDL_PollEvent(&event);
keys = SDL_PCB_PadGet();
if(keys[SDLK_ESCAPE] == SDL_PRESSED || event.type == SDL_QUIT){
GameExec = SDL_FALSE;
}
if(!GameExec){
break;
}
nowTick = SDL_GetTicks();
frame = (nowTick - prvTickCount) / interval;
if(frame <= 0){
SDL_Delay(prvTickCount + interval - nowTick);
}
prvTickCount = SDL_GetTicks();
*2 ExecProcess();
*2 DrawProcess();
*1 flipSDL();
*1 clearSDL();
}

return 0;
}

まあ大体こんな感じなコードを想定してるというか、現状ほぼこれに近い形です。これを極力崩したくないなあ、というのと、「最低限」という形を取るに当たり「なるべくコードを増やしたくない」とは思っています。
ソース中にある注釈(*?)は、

  • *1)別のソースに存在
  • *2)「main.c」と同じソース内にある別の関数

です。現状では「*1」に関してはライブラリに組み込んでませんが、将来的にはどうしようか、と...。