一応こんな感じで作ってみたのですが(一対一の戦闘でしか利用できないと思いますが)、
マップで敵と遭遇した瞬間に戦闘画面にならずフリーズしてしまいます。
何がいけないのでしょうか?
遷移の仕方はまだ簡単にしてあります。
void BATTLE(int E) {
turn = Start ;
int MyTurnCount = 0 ;
int EnemyTurnCount = 0 ;
int EnemyHP = 50 ;
while( ProcessMessage() == 0 && EnemyHP > 0 )
{
ClearDrawScreen() ;
DrawGraph(0,0,sougen,TRUE) ;
DrawGraph(250,100,enemy[E],TRUE) ;
switch(turn) {
case Start : //戦闘開始処理
DrawString(260,450,"敵が現れた",GetColor(0,0,0)) ;//戦闘開始時のメッセージの表示など
if(KeyCount[KEY_INPUT_S]==1){
turn = Command ;
}
break ;
case Command : //コマンド入力処理
DrawString(260,450,"HIT C KEY",GetColor(0,255,0)) ;
if(KeyCount[KEY_INPUT_C]==1){
if(hero.sp >= ENEMYSPEED) {
turn = MyTurn ; //自分のほうが速かったら現在自分のターンとする
}
else {
turn = EnemyTurn ; //敵のほうが速かったら現在相手のターンとする
}
}
break ;
case MyTurn :
DrawString(260,450,"現在自分のターンの処理中",GetColor(0,255,0)) ;//ダメージ計算やエフェクトの描画
if(KeyCount[KEY_INPUT_T]==1) turn = MyTurnEnd ;
if(KeyCount[KEY_INPUT_D]==1) EnemyHP = 0 ;
break ;
case MyTurnEnd : //自分ターンの終了処理
MyTurnCount ++ ; //ターン終了時にMyturnCountに1を加える
if(MyTurnCount = EnemyTurnCount){ //MyTurnCountとEnemyTurnCountを比較して、=ならコマンドに移行
turn = Command ;
}
else{ //違ったら敵のターンにする
turn = EnemyTurn ;
}
break ;
case EnemyTurn :
DrawString(260,450,"現在相手のターンの処理中",GetColor(0,255,0)) ;//ダメージ計算やエフェクトの描画
if(KeyCount[KEY_INPUT_T]==1) turn = EnemyTurnEnd ;
break ;
case EnemyTurnEnd : //敵のターンの終了処理
EnemyTurnCount ++ ; //ターン終了時にEnemyturnCountに1を加える
if(EnemyTurnCount == MyTurnCount){ //MyTurnCountとEnemyTurnCountを比較して、=ならコマンドに移行
turn = Command ;
}
else{ //違ったら自分のターンに移行
turn = MyTurn ;
}
break ;
}
}
hero.gamen = 3 ; //マップ画面へ
}