現在はボールがブロックに一度だけ当たればブロックは消えますが、複数回当たらないと消えないブロックを作ってみましょう。
ブロックの上2段を赤、中2段を黄色、下の2段を緑にします。
Public Sub MakeBricks()
Dim i, j As Integer
Dim bw, bh As Integer
bw = 40
bh = 10
brick = New Label(9, 5) {}
For i = 0 To 9
For j = 0 To 5
Dim c As Color
Select Case j
Case 0, 1
c = Color.Red
Case 2, 3
c = Color.Yellow
Case 4, 5
c = Color.Green
End Select
brick(i, j) = New Label()
brick(i, j).BackColor = c
brick(i, j).Left = i * bw
brick(i, j).Top = j * bh + 50
brick(i, j).Width = bw
brick(i, j).Height = bh
brick(i, j).BorderStyle = BorderStyle.Fixed3D
Me.Controls.Add(brick(i, j))
Next
Next
End Sub
赤いブロックに当たるとブロックが黄色に変化し、黄色いブロックに当たるとブロックが緑に変化し、緑のブロックにあたるとブロックが消えるようにします。
これにより、赤いブロックは3回、黄色いブロックは2回ボールを当てないと消えないということになります。
いまは無条件にブロックを消していますが、この部分を修正します。
Public Sub HitBricks()
Dim i, j As Integer
Dim r, br As Rectangle
Dim b As Label
br = New Rectangle(x, y, Ball.Width, Ball.Height)
For i = 0 To 9
For j = 0 To 5
b = brick(i, j)
r = New Rectangle(b.Left, b.Top, b.Width, b.Height)
If b.Visible = True And r.IntersectsWith(br) Then
Dim overlap As Rectangle
overlap = Rectangle.Intersect(r, br)
If overlap.Width > overlap.Height Then
dy = -dy
Else
dx = -dx
End If
b.Visible = False
score += 1
Exit Sub
End If
Next
Next
End Sub
ブロックの色が緑ならブロックを消し、黄色なら緑に色を変え、赤なら黄色に色を変えます。
If b.BackColor = Color.Green Then
b.Visible = False
ElseIf b.BackColor = Color.Yellow Then
b.BackColor = Color.Green
ElseIf b.BackColor = Color.Red Then
b.BackColor = Color.Yellow
End If