TNP資料室 @ ウィキ

一度通ったマスを通れないようにする

最終更新:

kokeiro

- view
だれでも歓迎! 編集

一度通ったマスを通れないようにする

 赤マスでやったときと同じような条件をつけ、黄マスには移動できないようにすれば良いです。今回は記述を書き足すだけでなく、if文をまとめています。

  • game.cppのMovePlayerに黄マスを通れないように記述を追加
void MovePlayer(){
	if( Key[KEY_INPUT_RIGHT] == 1 ){	// 右が押されたら
		Player.x++;			// x座標を増やす
		if( Player.x == 8 || Bord[Player.y][Player.x].Kind==1 || Bord[Player.y][Player.x].Kind==3 )
			Player.x--;		// 戻す
		Bord[Player.y][Player.x].Kind = 3;	// 識別番号を書き換え
	}
	if( Key[KEY_INPUT_LEFT] == 1 ){		// 左が押されたら
		Player.x--;			// x座標を減らす
		if( Player.x==-1 || Bord[Player.y][Player.x].Kind==1 || Bord[Player.y][Player.x].Kind==3 )
			Player.x++;		// 戻す
		Bord[Player.y][Player.x].Kind = 3;	// 識別番号を書き換え
	}
	if( Key[KEY_INPUT_DOWN] == 1 ){		// 下が押されたら
		Player.y++;			// y座標を減らす
		if( Player.y==8 || Bord[Player.y][Player.x].Kind==1 || Bord[Player.y][Player.x].Kind==3 )
			Player.y--;		// 戻す
		Bord[Player.y][Player.x].Kind = 3;	// 識別番号を書き換え
	}
	if( Key[KEY_INPUT_UP] == 1 ){		// 上が押されたら
		Player.y--;			// y座標を増やす
		if( Player.y==-1 || Bord[Player.y][Player.x].Kind==1 || Bord[Player.y][Player.x].Kind==3)
			Player.y++;		// 戻す
		Bord[Player.y][Player.x].Kind = 3;	// 識別番号を書き換え
	}
}
 で、問題に気づきました。最初に移動したとき、初期位置である青マスが黄マスに上書きされません。移動でそのマスに乗ることが黄マスになる条件であるためです。そこで、青マスは移動して乗ることが出来ないマスとして扱いことにしました。全ての薄緑のマスを黄色にすることをクリア条件とします。
 では、青マスに乗れないようにする処理を書き足したいと思います。ここで考えてみましょう。移動して乗ることが出来るマスは薄緑だけだということが分かります。つまり、移動しようとしたマスが薄緑以外なら戻すという処理にすればいいということが分かります。では書き換えてみましょう。

game.cpp

...
void MovePlayer(){
	if( Key[KEY_INPUT_RIGHT] == 1 ){	// 右が押されたら
		Player.x++;			// x座標を増やす
		if( Player.x == 8 || Bord[Player.y][Player.x].Kind!=0)
			Player.x--;		// 戻す
		Bord[Player.y][Player.x].Kind = 3;	// 識別番号を書き換え
	}
	if( Key[KEY_INPUT_LEFT] == 1 ){		// 左が押されたら
		Player.x--;			// x座標を減らす
		if( Player.x==-1 || Bord[Player.y][Player.x].Kind!=0)
			Player.x++;		// 戻す
		Bord[Player.y][Player.x].Kind = 3;	// 識別番号を書き換え
	}
	if( Key[KEY_INPUT_DOWN] == 1 ){		// 下が押されたら
		Player.y++;			// y座標を減らす
		if( Player.y==8 || Bord[Player.y][Player.x].Kind!=0)
			Player.y--;		// 戻す
		Bord[Player.y][Player.x].Kind = 3;	// 識別番号を書き換え
	}
	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;	// 識別番号を書き換え
	}
}
...
 バグを直すために書き換えたのに、すっきりしましたね。

タグ:

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