TNP資料室 @ ウィキ

クリア画面に進めるようにする

最終更新:

kokeiro

- view
だれでも歓迎! 編集

クリア画面に進めるようにする

 全てのマスを通ったら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();				// プレイヤーの初期化をする
	}
}

 おー、これで一応ゲームが完成しました。機能を追加していきましょう・

タグ:

+ タグ編集
  • タグ:
ウィキ募集バナー