GameMain関数はゲームが始まったら毎フレーム実行される関数なので、
そこで kriby関数や metroid関数を呼ぶ switch 文を書いてしまったら
60分の1秒ごとに kriby関数や metroid関数が呼ばれてしまいます
なので、こちらの switch処理
switch (g_stagedata.stagebunki)
{
case 1:
metroid();
break;
case 2:
kriby();
break;
default:
break;
}
を、書くべき箇所は GameMain関数ではなく DrawGameMenu関数の
g_gamestate に GAME_MAIN を代入している箇所になると思います
//ステージ選択メニュー
void DrawGameMenu(){
DrawGraph(0, 0, g_imghandles.menu, FALSE);
if(CheckHitKey(KEY_INPUT_RIGHT)!=0){
DrawGraph(573, 220, g_imghandles.select, FALSE);
int key1 = GetJoypadInputState(DX_INPUT_KEY_PAD1);
if (IsAKeyTrigger(key1) == TRUE) {
// この辺りと
g_gamestate = GAME_MAIN;
}
}
if(CheckHitKey(KEY_INPUT_LEFT)!=0){
DrawGraph(77, 220, g_imghandles.select, FALSE);
int key1 = GetJoypadInputState(DX_INPUT_KEY_PAD1);
if (IsAKeyTrigger(key1) == TRUE) {
// この辺り
g_gamestate = GAME_MAIN;
}
}
}
頂いている手元のプログラムでは↑のようになっていますが、RONさんのお手元の最新版では
DrawGameMenu 関数内で g_stagedata.stagebunki に値を代入しているのですよね?
なので、恐らくこのような感じにすれば良いと思います・・・
//ステージ分岐関数
void StageBunki()
{
switch (g_stagedata.stagebunki)
{
case 1:
metroid();
break;
case 2:
kriby();
break;
default:
break;
}
}
//ステージ選択メニュー
void DrawGameMenu(){
DrawGraph(0, 0, g_imghandles.menu, FALSE);
if(CheckHitKey(KEY_INPUT_RIGHT)!=0){
DrawGraph(573, 220, g_imghandles.select, FALSE);
int key1 = GetJoypadInputState(DX_INPUT_KEY_PAD1);
if (IsAKeyTrigger(key1) == TRUE) {
g_stagedata.stagebunki = 1;
StageBunki();
g_gamestate = GAME_MAIN;
}
}
if(CheckHitKey(KEY_INPUT_LEFT)!=0){
DrawGraph(77, 220, g_imghandles.select, FALSE);
int key1 = GetJoypadInputState(DX_INPUT_KEY_PAD1);
if (IsAKeyTrigger(key1) == TRUE) {
g_stagedata.stagebunki = 2;
StageBunki();
g_gamestate = GAME_MAIN;
}
}
}