今回バーを動かしてボールを跳ね返すところまでをやります。

ボールをつくる

ブロック崩しではボールをつくり動かす必要があります。まずはボールを表示させましょう。ボールを表示させるためにはサイズと位置を決める必要があります。ボールの形状は円、直径は10ピクセルとします。また位置はフィールド変数で管理します。

ボールを動かすためのメソッドも必要です。タイマーをつかってTickイベントを発生させて、そのなかでボールを移動させます。

ボールはある方向に向かって移動しています。そこで移動方向を管理するフィールド変数を用意します。

壁に当たったボールがはねかえる

これでボールは斜め下方向に向かって移動します。しかしこれだけではボールは跳ね返ることなく、そのまま画面の下に消えてしまいます。跳ね返すメソッドが必要です。

ではボールが跳ね返るときとはどのような場合でしょうか。

壁に当たったとき
バーにあたったとき
ブロックに当たったとき

この3つが考えられます。

横の壁に当たったときはX方向の向きを変える
上の壁にあたったときはY方向の向きを変える

ただ符号を反転するだけでよいのでしょうか?

左の壁にあたったときは進行方向のX成分が負のときは正にする
右の壁にあたったときは進行方向のX成分が正のときは負にする

このようにしないと最初からフォールドの外にあった場合、フォールドの外だから向きを変える、移動、移動先もフォールドの外、だから向きを変えて・・・となるとフィールド内に復帰することができなくなってしまいます。

おそらくこれが正しいのではないかと思われます。

上記コード内で使用されているGetBallRectangleメソッドとGetFieldRectangleメソッドはボールとフィールドの矩形を返すメソッドです。

バーに当たったボールがはねかえる

つぎにバーに当たったときボールを跳ね返す動作を実装します。これもSetBallDirectメソッドに少し付け加えればよさそうです。

バーの矩形とボールの矩形を取得して、それぞれの位置関係から当たっているかどうかを判定しています。当たった場合よりも当たっていない場合を考えたほうが早いかもしれません。

バーを移動させる

それからバーを移動させる処理も必要です。

キーが押されたときにバーを移動させればよいのですが、それではキーが押されたときにちょっとだけ移動して、しばらく押し続けると連続して移動するという不自然な動きになります。

そこで右に移動するのか左に移動するのか動かないのかをフィールド変数に格納して、キーを押したら右または左に移動、キーから手を離したら動かなくなるという仕様にします。

そしてタイマーイベントを捕捉してbarDirectXが0でなければ移動させます。

これは実際に移動させるためのメソッドです。