今度は先頭の方から作っていきます。
まず、ヘッダを2つ追加します。 1つは共通関数を登録する物で、もうひとつはゲーム本編用です。
また別に説明しますね。
次に、ゲーム全体の管理データの実体を定義します。
//----------------------------------------------------------------------
// 変数
//----------------------------------------------------------------------
// ゲーム全体の管理データ(実体)
MainData_t g_MainData;
●GetCheckHitKeyAll_2()
メインループに出てきたANY KEYの処理です。
何れかのキーが押されているとカウントアップで、離すと0になります。
GetHitKeyStateAll_2の全キー版と思ってください。
//----------------------------------------------------------------------
// 何かキーが押され続けたカウントを取得する。全キー対象
// カウントが1かどうか聞けば、
//----------------------------------------------------------------------
static void GetCheckHitKeyAll_2(int *HitCount)
{
// 何かキーが押された?
if( CheckHitKeyAll() > 0 ) {
// 押されている間カウントする。
(*HitCount)++;
} else {
// 開放されたら0に戻す。
(*HitCount) = 0;
}
}
ゲーム全体の管理データの初期値を設定しています。
//----------------------------------------------------------------------
// ゲームの各種値を初期化
//----------------------------------------------------------------------
void MainInit()
{
g_MainData.gameState = GAME_STATE_TITLE; //タイトル画面でスタート
}
●Title()、NameInput()、GameOver()、Ending()
現状は同じような処理なので、まとめて解説します。
CenterDrawString()は画面の中央に表示する共通関数です。同じような処理が多いのでまとめてみました。
全て関数は、画面の文字を表示して、特定のキーが押されたら状態を遷移する処理になっています。
状態の変更は戻り値で行ないます。状態を継続する場合は、ゲーム全体の管理データに入っているgameStateの値を戻り値として戻す事で現在の状態を維持しています。
//----------------------------------------------------------------------
// タイトル画面
//----------------------------------------------------------------------
GameState_t Title()
{
// センター上気味にタイトル文字表示
CenterDrawString( GAME_TITLE_STR, 32, 160, GetColor(255,255,255) );
// HIT ANY KEY
CenterDrawString( "HIT ANY KEY", 20, 240, GetColor(155,155,255) );
// 何かキーが押された?
if( g_MainData.AllKeyCount == 1 ) {
// 次のフレームは名前入力へ
return GAME_STATE_NAME;
}
// 継続
return g_MainData.gameState;
}
//----------------------------------------------------------------------
// 名前入力
//----------------------------------------------------------------------
GameState_t NameInput()
{
// 名前入力画面のダミー
CenterDrawString( "なまえ の にゅうりょく", 20, 120, GetColor(255,255,255) );
CenterDrawString( "なまえ:そふとや", 20, 200, GetColor(255,255,255) );
CenterDrawString( "HIT ANY KEY", 20, 280, GetColor(155,155,255) );
// 何かキーが押された?
if( g_MainData.AllKeyCount == 1 ) {
// 次のフレームはゲーム本編へ
return GAME_STATE_MAIN;
}
// 継続
return g_MainData.gameState;
}
//----------------------------------------------------------------------
// ゲームオーバー
//----------------------------------------------------------------------
GameState_t GameOver()
{
// ゲームオーバーの表示
CenterDrawString( "あなたは しんでしまった。", 28, 160, GetColor(255,255,255) );
// HIT ANY KEY
CenterDrawString( "HIT ANY KEY", 20, 280, GetColor(155,155,255) );
// 何かキーが押された?
if( g_MainData.AllKeyCount == 1 ) {
// 次のフレームはゲーム本編へ
return GAME_STATE_MAIN;
}
// 継続
return g_MainData.gameState;
}
//----------------------------------------------------------------------
// エンディング
//----------------------------------------------------------------------
GameState_t Ending()
{
// エンディングの表示
CenterDrawString( "ゲームクリア おめでとう!", 28, 200, GetColor(255,255,255) );
// HIT ANY KEY
CenterDrawString( "HIT ANY KEY", 20, 320, GetColor(155,155,255) );
// 何かキーが押された?
if( g_MainData.AllKeyCount == 1 ) {
// 次のフレームはゲームタイトルへ
return GAME_STATE_TITLE;
}
// 継続
return g_MainData.gameState;
}
以上でmain.cppを終わります。
まだ続きます。