C++の知識は以前はifforwhile ~ 配列まで,ゲームを作りながらクラスを覚えました。
ポインタはコンソールでは納得しながらも,実用するに至っていません。構造体も使いこなしていません。現状クラスだけです。
Q.ゲームの流れをコントロールするのはフラグ,という認識でいいのでしょうか?
たとえばゲームをオープニング→ゲーム→エンディング→スコア表示
としようとすると,
bool flag[10] = {0};
// ↑どこかで用意したグローバルなフラグを
while(flag[3] == 0){
if(flag[0] == 0)
intro(); // → これが終わるとflag[0] = 1;
if(flag[0] == 1 && flag[1] == 0)
game(); // → 終わるとflag[1] = 1;
if(flag[1] == 1 && flag[2] == 0)
ending(); // →終わるとflag[2] = 1
if(flag[2] == 1 && flag[3] == 0)
score(); // →終わるとflag[3] = 1; ループも抜ける
}
例えば条件を満たすフレームが何度もあるが,うち1回だけ処理を行いたい時 if(flag==)が余りにも多いのでごちゃごちゃしていて,書き方がまずいのではないかと疑った次第です。
これはこういうものだと思ってもいいのでしょうか?
フラグの管理方法はflagのiをテキストファイルに書いておき,どのフラグがどのような役割を与えられているか
簡単な説明をする方法でやっています。
別例(今作っているゲームから自機の操作関数の一部分を抜き出しました)
並列した3本の道路の上を敵が流れてくるので自機が避けるゲームだと思ってください。
// ↓ これは館にあるキーボード状態取得系処理のサンプルを利用しています
if(flag[3] == 0){
if(key[KEY_INPUT_LEFT] == 1 && flag[1] == 0){
// 自機が左レーンにいないなら左を移動するためのフラグを立てる
if(x != xinit - 54){
flag[0] = 1; // 左移動を有効化
flag[3] = 1; // 移動終了までキー入力を無効化。
flag[10] = 1; // 移動終了まであたり判定を無効化。移動中に敵と当たると座標が狂う
reset_count(); // count = 0; の処理 }
}
}
int t = count;
if(flag[0] == 1){
if(t <= 5){
// 6フレーム目(最終)のみに行われる処理
if(t == 5){
flag[0] = 0; // 6フレーム目で左移動フラグを倒す
flag[3] = 0; // キー入力を有効化
flag[10] = 0; // あたり判定を有効化
}
x+=5;
y-=5;
count++;
}
}