第一章「SDLの基本的な使い方」第十四話(特別編)


さぁ、いきなり第一章終わってませんでした。笑

というのは、ソースの分割をしてなかったのです。

基本編のままなら、1ファイルのままで十分ですが、実戦となると、データの量が急激に増えるので、
1ファイルじゃとても多すぎて、混乱が多くなることでしょう。

ソースの分割ということで、ページも分割してみました。
この二つのリンク先と、ここのメインソースを合わせて、やっと十三話のプログラムになります。

InitEventEnd
Anime



大きく分けて、メイン処理、初期化&終了処理、アニメーション処理の三つにしてみました。
それぞれにヘッダーがあり、メインのところには、Def.hという、必要なincludeなどをまとめたものがある。
他のソースは、専用ヘッダーとDef.hだけを呼び出せばいいようにしました。

そして、各ページに、#ifndef、#endifなどありますが、これは、二重インクルード防止の方法です。

Def.hには、screenの二重宣言を防ぐために、メイン以外では外部変数(extern)宣言になるように設定しました。


Def.hのソース

#ifndef __DEF_H__ //もし、まだ__DEF_H__が宣言されていなければ、以下の内容を実行。 #define __DEF_H__ //__DEF_H__を宣言。 #include #include "SDL/SDL.h" #include "SDL/SDL_image.h" #pragma comment(lib, "SDL.lib") #pragma comment(lib, "SDLmain.lib") #pragma comment(lib, "SDL_image.lib") #ifdef __MAIN_CPP__ //もし、__MAIN_CPP__が宣言されていたら(呼び出したのがMain.cppなら) SDL_Surface *screen; //普通にscreenを定義 #else extern SDL_Surface *screen; //Main.cpp以外なら外部ファイルのscreenを呼び出したことになる。 #endif //ここまでが、#ifdef __MAIN_CPP__の範囲 #endif //ここまでが、#ifndef __DEF_H__の範囲。

Main.cppのソース

#define __MAIN_CPP__ //def.hでの分岐用に宣言しておく。 #include "Def.h" //各ヘッダーのみをincludeすればいい。 #include "InitEventEnd.h" #include "Anime.h" int main(int argc, char* argv[]) { if(!Init()) //初期化&確認 { printf("初期化に失敗しました"); return 0; } InitAnime(); //アニメ初期化へ while(1) //メインループ { Anime(); //アニメ処理へ SDL_Flip(screen); if(!Event()) break; //イベントへ SDL_Delay(60); //休憩。 } EndAnime(); //アニメ終了処理 End(); //終了処理へ return 0; }





〜〜次こそは実践編だと思う。〜〜