TNP資料室 @ ウィキ

プレイヤーの初期位置をステージに合わせる

最終更新:

kokeiro

- view
だれでも歓迎! 編集

プレイヤーの初期位置をステージに合わせる

 青マスの上からゲームを始めようというものです。
 ここではfor文でBord構造体配列をしらべ、2(青マス)が見つかったらプレイヤーの初期位置をそこにするというものです。この処理はInitPlayerに書きます。この文章を書いてるときに私が実際に遭遇したバグも紹介します。

  • game.cppのInitPlayer関数にステージ情報を調べて初期位置を決める処理を追加

game.cpp

...
void InitPlayer(){
	for(int y=0 ; y<8 ; y++){
		for(int x=0 ; x<8 ; x++){
			if( Bord[y][x].Kind == 2 ){	// 開始位置が見つかったら
				Player.x = x;		// 座標を指定
				Player.y = y;
  printfDx("(%d,%d)からスタートします\n",x,y);
			}
		}
	}
}
...
さて、実行してみましょう。どうですか?初期位置が(0,0)のままだと思います。printfDx関数の文字も表示されません。原因はTitle関数にありました。

title.cpp

...
void Title(){
...
	if( Key[KEY_INPUT_Z] == 1 ){	// Zキーが押されたらゲームを始める
		GameState = 1;
		InitPlayer();				// プレイヤーの初期化をする
		LoadStage();				// ステージ情報を読み込む 
	}
}
...
 if文のブロックの関数の呼び出す順番が悪かったのです。先にInitPlayer関数を呼び出してもまだBord構造体配列にはステージ情報が入っていません。つまり、2(青マス)が見つからないのです。そこの順番を書き直してやりましょう。

title.cpp

...
void Title(){
...
	if( Key[KEY_INPUT_Z] == 1 ){	// Zキーが押されたらゲームを始める
		GameState = 1;
		LoadStage();				// ステージ情報を読み込む 
		InitPlayer();				// プレイヤーの初期化をする
	}
}
...

 これで解決しました。

タグ:

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