>> ブロック崩しプログラミング入門トップに戻る

ボールの移動制御

今回はボールの移動制御について説明します。

BALLクラスの変数dx,dyを使います。
これはXとY方向それぞれの移動量を表します。
まずコンストラクタで、dxは3、dyは-3を代入しています。
つまり、最初は右方向&上方向にボールが移動するということですね。

次にMove関数を見て下さい。

void BALL::Move(){

	//まず音はOFFにしとく
	soundflag=false;

	//移動量を加算
	x+=dx;
	y+=dy;


	//画面はみ出し処理
	if(x<width/2){
		x=width/2;
		dx*=-1;
		//当たったのでサウンドフラグを立てる
		soundflag=true;
	}
	if(x>WIDTH-width/2){
		x=WIDTH-width/2;
		dx*=-1;
		//当たったのでサウンドフラグを立てる
		soundflag=true;
	}

	if(y<height/2){
		y=height/2;
		dy*=-1;
		//当たったのでサウンドフラグを立てる
		soundflag=true;
	}

	//下にはみ出たらゲームオーバー
	if(y>HEIGHT){
		endflag=true;
	}

}


移動に関することだけ説明します。
サウンドフラグについては、別途説明します。

まず、x座標とy座標に移動量を足しています。
これだけでもボールは動きますが、ボールは壁に当たったら跳ね返す必要があります。
その制御をしているのが、下のif文です。
if文の条件式については、画面のはみ出し制御そのままなので説明不要ですね。
分からない人はゲームプログラミング入門の、キャラの移動制御を参照して下さい。

まず一つ目のif文は左側の壁に当たったときの処理です。
if文の中では移動量dxにー1をかけています。
左側の壁に当たるということは、ボールが左に移動してきてぶつかったということです。
そのときの移動量は当然マイナスになるわけです。
壁に当たったら逆に跳ね返ることになりますから、-1をかけてやります。
こうすることで、移動量がプラスになり、右に跳ね返ってくれるようになります。

他のif文も同じです。
上でも右でも、壁に当たれば逆に跳ね返ることになるので、-1をかけてあげて、
移動量の符号を逆転させているんですね。

下の壁の場合は当然ゲームオーバーになるので、跳ね返り処理は行わず、
endflagをtrueにしています。

これで壁の跳ね返り移動が出来るようになりました。

なお、講座の最初に説明したとおり、描画関数やこの移動関数は、
下記のAll関数というものでまとめられて実行しています。

bool BALL::All()
{

	Move();

	//描画処理
	Draw();

	return endflag;

}


BALLクラスもendflagの値を毎回返しています。
ゲームオーバーになったらtrueにするようにしているので、
この戻り値を受け取る親クラスのCONTROLクラスによって、プログラムが終了するようにしています。
CONTROLクラスの説明は後ほど行います。

今回の説明は以上です。
次回はブロックの表示について説明します。

>> 【ブロックの表示】に進む
>> ブロック崩しプログラミング入門トップに戻る