カテゴリー
Visual Basic

消えにくいブロックを作る

現在はボールがブロックに一度だけ当たればブロックは消えますが、複数回当たらないと消えないブロックを作ってみましょう。

ブロックの上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