クリア画面に進めるようにする
全てのマスを通ったらGameClearフラグを立てることでクリアしたかどうかを調べます。もしGameClearフラグが立っていたらゲームクリア画面に進むようにします。GameClearフラグはゲームが始まる前に初期化します。もちろんGameClearはグローバル変数でとします。では実装してみましょう。
- main.hにGameClearの外部変数宣言を追加
- game.cppにGameClear変数の本体の宣言を追加、Game関数のゲームクリア画面に移動する条件を追加、CheckAllBord関数に全て通ったのならフラグを立てる処理を追加
- title.cppにClearFlag変数を初期化する処理を追加
main.h
... extern int BordGraphic[4]; // マス目のグラフィック extern int PlayerGraphic; extern int ClearFlag; ...
game.cpp
...
int BordGraphic[4];
int PlayerGraphic;
int ClearFlag;
...
void Game(){
...
MovePlayer(); // プレイヤーを移動する
if( Key[KEY_INPUT_Z] == 1 || ClearFlag == 1 ) // Zキーが押されたらゲームクリア
GameState = 2;
if( Key[KEY_INPUT_X] == 1 ) // Xキーが押されたらリタイア
GameState = 3;
}
...
void MovePlayer(){
...
if( Key[KEY_INPUT_UP] == 1 ){ // 上が押されたら
Player.y--; // y座標を増やす
if( Player.y==-1 || Bord[Player.y][Player.x].Kind!=0)
Player.y++; // 戻す
Bord[Player.y][Player.x].Kind = 3; // 識別番号を書き換え
MoveFlag = 1;
}
if( MoveFlag == 1 ){ // 移動フラグが立っていたら
CheckAllBord();
}
}
...
void CheckAllBord(){
for(int y=0 ; y<8 ; y++){
for(int x=0 ; x<8 ; x++){
if( Bord[y][x].Kind == 0 ){ // 1つでも薄緑マスがあるなら
return; // この関数を終了する
}
}
}
// ここまで関数の処理が続いてたらクリアしたということになる
ClearFlag = 1;
}
title.cpp
...
void Title(){
...
if( Key[KEY_INPUT_Z] == 1 ){ // Zキーが押されたらゲームを始める
GameState = 1;
ClearFlag = 0;
LoadStage(); // ステージ情報を読み込む
InitPlayer(); // プレイヤーの初期化をする
}
}
おー、これで一応ゲームが完成しました。機能を追加していきましょう・