none
VB2008打磚塊程式--消除磚塊 RRS feed

  • 問題

  • 我要做一個打磚塊的程式, 目前做到要消除磚塊, 但是我的球還沒打到磚塊, 只要我一執行, Button3就自動消失了@@ 不知道是哪裡有錯, 請大大們幫我找一下Bug, 謝謝!(鞠躬 PS:如果我作九個磚塊,也就是Button3~Button11,可以用迴圈寫嗎?   Public Class Form1
        Dim delta_x, delta_y As Integer
        Dim x, y As Integer
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

            delta_x = 5

            delta_y = 5

            Timer1.Enabled = True

            Me.KeyPreview = True

        End Sub

        Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick

            Button2.Location = New Point(Button2.Location.X + delta_x, Button2.Location.Y + delta_y)

            If (Button2.Location.Y < 0) Then

                My.Computer.Audio.PlaySystemSound(Media.SystemSounds.Beep)

                delta_y = -delta_y

            End If

            If (Button2.Location.X + 30 > Me.Size.Width) Or (Button2.Location.X < 0) Then

                My.Computer.Audio.PlaySystemSound(Media.SystemSounds.Beep)

                delta_x = -delta_x

            End If

            If (Button2.Location.Y + Button2.Size.Height >= Button1.Location.Y) And (Button2.Location.X >= Button1.Location.X) And (Button2.Location.X + Button2.Size.Width <= Button1.Location.X + Button1.Size.Width) Then

                My.Computer.Audio.PlaySystemSound(Media.SystemSounds.Beep)

                delta_y = -delta_y

            End If

            If Button2.Location.X + Button2.Size.Width > Button3.Location.X Then

                If Button3.Visible = True Then

                    If delta_y = -1 Then

                        delta_y = 1

                    Else

                        delta_y = -1

                    End If

                    Button3.Visible = False

                End If

            End If

        End Sub

        Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown

            If (e.KeyCode = Keys.L) Then

                Button1.Location = New Point(Button1.Location.X + 3, Button1.Location.Y)

            End If

            If (e.KeyCode = Keys.J) Then

                Button1.Location = New Point(Button1.Location.X - 3, Button1.Location.Y)

            End If

        End Sub

        Private Sub Button11_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button11.Click

        End Sub

    End Class

    2010年1月11日 上午 03:27

解答

  • If (Button2.Location.Y + Button2.Height > Button3.Location.Y) And (Button2.Location.Y < Button3.Location.Y+ Button3.Height) And (Button2.Location.X + Button2.Width > Button3.Location.X) And (Button2.Location.X < Button3.Location.X + Button3.Width) Then

    可以啊,小歐大提供的網址,就是用迴圈做的;Button1是板,Button2是球,Button3是磚?把Button3設為不可見的判斷式,改成以上試試...
    • 已標示為解答 年仔仔 2010年1月11日 上午 10:30
    2010年1月11日 上午 05:45

所有回覆

  • Hi!

    您可以解釋一下這段為什麼這樣寫嗎??

      If Button2.Location.X + Button2.Size.Width > Button3.Location.X Then

                If Button3.Visible = True Then

                    If delta_y = -1 Then

                        delta_y = 1

                    Else

                        delta_y = -1

                    End If

                    Button3.Visible = False

                End If

            End If


    我的Blog .NET菜鳥自救會
    2010年1月11日 上午 05:41
    版主
  • If (Button2.Location.Y + Button2.Height > Button3.Location.Y) And (Button2.Location.Y < Button3.Location.Y+ Button3.Height) And (Button2.Location.X + Button2.Width > Button3.Location.X) And (Button2.Location.X < Button3.Location.X + Button3.Width) Then

    可以啊,小歐大提供的網址,就是用迴圈做的;Button1是板,Button2是球,Button3是磚?把Button3設為不可見的判斷式,改成以上試試...
    • 已標示為解答 年仔仔 2010年1月11日 上午 10:30
    2010年1月11日 上午 05:45
  • 小歐ou大您好: 感謝您的回答! 我就是照VB LEARNING上的範例寫的, 我也不知道哪裡錯了@@
    2010年1月11日 上午 10:28
  • Joe Hung大您好: 感謝您的回答! 照您的方法真的OK了, 真是太感激您了!(鞠躬
    2010年1月11日 上午 10:30
  • 我要寫打磚塊的遊戲, 現在寫到可以消除磚塊了, 但是我一共要設九個磚塊, (Button3~Button11) 所以想請問迴圈該怎麼寫, 麻煩大大們了!(鞠躬 另外, 如果我希望Button1的移動範圍不能超過Form1該怎麼寫呢? 謝謝! If (Button2.Location.Y + Button2.Height > Button3.Location.Y) And (Button2.Location.Y < Button3.Location.Y + Button3.Height) And (Button2.Location.X + Button2.Width > Button3.Location.X) And (Button2.Location.X < Button3.Location.X + Button3.Width) Then If Button3.Visible = True Then If delta_y = -1 Then delta_y = 1 Else delta_y = -1 End If Button3.Visible = False End If End If
    2010年1月11日 下午 12:12
  •         For i As Integer = 3 To 11
                Dim button As Button = CType(Me.Controls("Button" & i), Button)
    
                If (Button2.Location.Y + Button2.Height > button.Location.Y) And _
                (Button2.Location.Y < button.Location.Y + button.Height) And _
                (Button2.Location.X + Button2.Width > button.Location.X) And _
                (Button2.Location.X < button.Location.X + button.Width) Then
    
                    If button.Visible = True Then
    
                        If delta_y = -1 Then
                            delta_y = 1
                        Else
                            delta_y = -1
                        End If
    
                        button.Visible = False
    
                    End If
    
                End If
    
            Next

            If e.KeyCode = Keys.Right Then
                Button1.Left = Button1.Left + 50
                If Button1.Left + Button1.Width > Me.Width Then Button1.Left = Me.Width - Button1.Width
            End If
    
            If e.KeyCode = Keys.Left Then
                Button1.Left = Button1.Left - 50
                If Button1.Left < 0 Then Button1.Left = 0
            End If

    Button1是板嗎?小歐大給的網址不都寫了嗎?您怎麼不去看懂它呢...
    2010年1月11日 下午 02:49
  • 請不要把同一討論開成多個討論緒。


    T.L. Cheng
    2010年1月12日 上午 02:30
    版主
  • Joe Hung大您好:

    感謝您的回答!

    那時候趕著想寫出來,

    加上它是用PictureBox我很陌生,

    所以才會發問,

    不過最後我自己寫出來了,

    以後我也會先思考久一點再提問,

    謝謝您的指教!(鞠躬
    2010年1月13日 上午 06:52
  • 璉璉大您好:

    很抱歉造成您的麻煩,

    以後我會注意的!

    辛苦您了!(鞠躬
    2010年1月13日 上午 06:55