ファイルを分割する
main.cppが大きくなってきました。ファイルを分割してみましょう。1つの山場です。
ファイル分割にはヘッダーファイルを用います。ヘッダーファイルには、関数のプロトタイプ宣言と、グローバル変数の外部変数宣言(extern)を記述します。そもそもグローバル変数とは、そのソースファイル内のどこからでもアクセスできるというものであって、異なるソースファイル間ではアクセスすることが出来ないのです。そこで、他のソースファイルにあるグローバル変数にアクセスするために外部変数宣言が必要なのです。
ファイル分割にはヘッダーファイルを用います。ヘッダーファイルには、関数のプロトタイプ宣言と、グローバル変数の外部変数宣言(extern)を記述します。そもそもグローバル変数とは、そのソースファイル内のどこからでもアクセスできるというものであって、異なるソースファイル間ではアクセスすることが出来ないのです。そこで、他のソースファイルにあるグローバル変数にアクセスするために外部変数宣言が必要なのです。
ヘッダーファイルを追加する
なにはともあれ、ソリューションエクスプローラーのヘッダーファイルにmain.hを追加してください。そして、そこにmain.cppの関数のプロトタイプ宣言を全て移動してください。そして、グローバル変数はヘッダーファイルにコピーしてください。そして、型名(intなど)の前にexternをつけて外部変数宣言をしてください。移動とコピーを間違えないでください。
こうなるはずです。なお、順番は適当に入れ替えました。
main.h
extern int GameState; // ゲームの状態を格納する変数 extern int Key[256]; // キーの押下時間を格納する配列 extern int white; // 白の[[カラーコード]]を格納する int GetKeyInput(int Key[]); // キーの押下時間を調べる関数 void Title(); // タイトルの関数 void Game(); // ゲームの関数 void Clear(); // クリアの関数 void Retire(); // リタイアの関数
ためしにこのままコンパイルしてみましょう。すると関数が見つからないといったエラーが出るはずです。それはこのヘッダーファイルをmain.cppに読み込ませていないためです。では読み込ませて見ましょう。main.cppの2行目にインクルード文を追加するだけでいいです。
#include "DxLib.h" #include"main.h" int Key[256]; // キーの押下時間を格納する配列 int white; // 白のカラーコードを格納する int GameState; // ゲームの状態を格納する変数 ...
コンパイルしてみてください。今度はうまくいくはずです。
ソースファイルを追加する
今度はソースファイルを追加してみましょう。今回は、title.cpp,game.cpp,clear.cpp,retire.cppを追加し、それぞれのソースファイルに該当する関数を移動します。ここではtitle.cppの内容のみ公開します。他のシートも同様に追加し、関数を移動してください。
#include"DxLib.h" #include"main.h" // タイトルの関数 // 戻り値 なし 引数 なし void Title(){ DrawString(100,100,"タイトル画面です",white); DrawString(100,120,"Zでゲームをはじめる",white); if( Key[KEY_INPUT_Z] == 1 ) // Zキーが押されたらゲームを始める GameState = 1; }
うまくコンパイルできましたか?プログラミングの上達にはとにかく作ることが必要です。苦労して覚えた文法というのはなかなか忘れません。