画面上でボールが動くようになったので、次はラケットを用意してボールを打ち返すようにしてみましょう。
まずはラケットをフォーム上に配置します。これもLabelで十分でしょう。
NameプロパティをRacketにします。
AutoSizeプロパティをFalseにすると、ラケットのラベルのサイズを自由に変更できます。
BackColorもお好みの色に設定します。

ラケットの準備ができたので、ラケットをマウスで動かせるようにします。
フォーム(Form1)のプロパティでイベントを選択してMouseMoveをダブルクリックします。
すると、MouseMoveイベントプロシージャが作られます。
マウスの位置に、ラケットの座標を合わせるようにします。
Private Sub Form1_MouseMove(sender As Object, e As MouseEventArgs) Handles MyBase.MouseMove
Racket.Left = e.X
End Sub
マウスカーソルの動きに、ラケットが追従するようになります。
次はラケットとボールの当たり判定を追加します。
タイマーイベント内に追加しましょう。
ラケットとボールの当たり判定は、二つのコントロール(Label)に重なり部分があるかどうかを調べます。RectangleクラスにIntersectsWithという便利な関数がありますので、それを利用します。
ラケットの範囲を表すRectangleとボールの範囲を表すRectangleを用意して、重なりがあるかどうかを調べます。
ボールの範囲を表すRectangleの変数を「br」、ラケットの範囲を表すRectangleの変数を「rr」としています。
あと、ラケットの当たり判定をするのは、dy > 0 の場合だけにします。ボールがラケットの下の方に当たって上向きに動いたときは、直後にも当たり判定されてしまう可能性があるのですが、これを避けるために、ボールが上方向に動くときは判定しないようにします。
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
If x + dx <= 0 Or x + Ball.Width + dx > ClientSize.Width Then
dx = -dx
End If
If y + dy <= 0 Or y + Ball.Height + dy > ClientSize.Height Then
dy = -dy
End If
x = x + dx
y = y + dy
Ball.Left = x
Ball.Top = y
Dim br, rr As Rectangle
br = New Rectangle(x, y, Ball.Width, Ball.Height)
rr = New Rectangle(Racket.Left, Racket.Top, Racket.Width, Racket.Height)
If rr.IntersectsWith(br) And dy > 0 Then
dy = -dy
End If
End Sub