#include "DxLib.h"
int Key[256]; // キーが押されているフレーム数を格納する
// キーの入力状態を更新する
int gpUpdateKey(){
char tmpKey[256]; // 現在のキーの入力状態を格納する
GetHitKeyStateAll( tmpKey ); // 全てのキーの入力状態を得る
for( int i=0; i<256; i++ ){
if( tmpKey[i] != 0 ){ // i番のキーコードに対応するキーが押されていたら
Key[i]++; // 加算
} else { // 押されていなければ
Key[i] = 0; // 0にする
}
}
return 0;
}
// 画面状態の定数
enum {
STATE_TITLE, // タイトル画面
STATE_MAIN, // メイン画面
STATE_END, // ゲーム終了
};
//-------------------------------------------------
// タイトル
//-------------------------------------------------
int title()
{
DrawFormatString( 190, 250, GetColor(255,255,255), "Please Push Enter");
if( Key[ KEY_INPUT_RETURN ]==1 ) return TRUE; // Enterが押されたらTRUE
return FALSE; // Enterが押されなければFALSE
}
//-------------------------------------------------
// ゲームメイン
//-------------------------------------------------
// ゲームメイン
int gmain()
{
DrawFormatString( 190, 250, GetColor(255,255,255), "ゲームメイン");
if( Key[ KEY_INPUT_RETURN ] == 1 ) return TRUE; // ENTERが押されたらTRUE
return FALSE; // ENTERが押されなければFALSE
}
//-------------------------------------------------
// メインループ
//-------------------------------------------------
int WINAPI WinMain( HINSTANCE, HINSTANCE,LPSTR, int ){
ChangeWindowMode( TRUE ), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK ); // ウィンドウモード変更と初期化と裏画面設定
// 現在の状態
int state = STATE_TITLE;
// while( 裏画面を表画面に反映, メッセージ処理, 画面クリア, キーの更新 )
while( ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0 && gpUpdateKey()==0 && ( state!=STATE_END ) ){
switch( state ){
case STATE_TITLE: // タイトル画面
// タイトル
if( title() ){
// なにか押されたら選択画面へ
state = STATE_MAIN;
}
break;
case STATE_MAIN: // メイン画面
// ゲームメイン
if( gmain() ){
// 終了したらタイトルへ
state = STATE_TITLE;
}
break;
}
}
DxLib_End(); // DXライブラリ終了処理
return 0;
}
ゲームメインが実行されたらBGMを流し、
ゲームからタイトルに戻ったらBGMを停止し、
再びゲームメインが実行されたらBGMを初めから再生するといったようなプログラムにしたいです。
PlayMusicやPlaySoundFileなどの関数を使ってやってみたのですが、
タイトルの時点で鳴ってしまったりして悩んでいます。
どのように書いたらいいでしょうか?