クリア画面に進めるようにする
全てのマスを通ったら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(); // プレイヤーの初期化をする } }
おー、これで一応ゲームが完成しました。機能を追加していきましょう・