俄罗斯方块VB实习报告

时间:2024.4.9

1.系统设计说明。

ü  “1:变色”俄罗斯方块其最大的特点是在游戏运行过程中能变换由20*20组合起来的方块组。每种形状对应的颜色各不相同。当方块组在界面中下落时,显示的是它本身的颜色,当落到底框下面时,则自动停止或消除同一行连续的方块,同时变化成粉色。

ü   

ü  2:游戏界面清新亮丽,整个游戏共设置了5+4个功能键,其中五个BUTTON所对应的分别是:开始,恢复,停止,退出以及当前时间。停止,开始,恢复都通过Me.Timer1来控制运行,当前时间可以查看游戏运行过程中的各个准确的时间点。由四个键盘控制的W A S D 中,通过键盘控制能很好的实现方块的移动,变换和加速下落等过程。

ü 

ü  3:利用show()等相关函数实现方块的实际运行功能。在编写代码的过程中,我参考了一些比较好的控件的使用方法。不断的添加进俄罗斯方块中。利用数组来实现小方块的排列组合等功能。

ü   

2. 游戏代码

Public Class Form1

    Dim t$

    Dim NowDate As Date

    Dim A As Integer = 20 '一个小方块的长和宽

    Dim f() As fangkuai  '表示小方块的个数

    Dim x, y As Integer  '方块对于面板的坐标

    Dim pan As Integer = 2 '从开始所转到的位置,比如说,正 7 为1 逆时针转一个则为2

    Dim biaozhi As Integer = 1  '方块上次的位置

    Dim nowlocation As Integer   '此时转到的位置

    Dim shuzu() As fangkuai  '四个小方块组合的一个大控件的数组

    Dim shumu As Integer = 0 ''四个小方块组合的一个大控件的数目

    Dim abc As Integer

    Dim ss(360) As Integer

    Dim geshu As Integer = 0

    Dim bbb As Integer = 0

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        ReDim shuzu(800)

        For abc = 0 To 800

            shuzu(abc) = New fangkuai

        Next

        Me.KeyPreview = True

        Me.Timer1.Enabled = True

        Me.Timer1.Interval = 20

        tiaoxuan()

        For abc = 0 To 3

            shuzu(shumu) = f(abc)

            shumu = shumu + 1

        Next

    End Sub

    '表示反7的控件

    Public Sub fanqi()

        ReDim f(3)

        Dim i As Integer

        For i = 0 To 3

            f(i) = New fangkuai

            f(i).BackColor = Color.Violet

            Me.Panel1.Controls.Add(f(i))

            f(i).Show()

        Next

        x = 120

        y = 0

        fanqixing1()

    End Sub

    Sub fanqisetxy(ByVal a As Integer, ByVal b As Integer)

        x = a

        y = b

    End Sub

    Sub fanqixing1()

        f(0).Location = New Point(x, y)

        f(1).Location = New Point(x + A, y)

        f(2).Location = New Point(x, y + A)

        f(3).Location = New Point(x, y + 2 * A)

    End Sub

    Sub fanqixing2()

        f(0).Location = New Point(x, y)

        f(1).Location = New Point(x, y + A)

        f(2).Location = New Point(x + A, y + A)

        f(3).Location = New Point(x + 2 * A, y + A)

    End Sub

    Sub fanqixing3()

        f(0).Location = New Point(x + A, y)

        f(1).Location = New Point(x + A, y + A)

        f(2).Location = New Point(x, y + 2 * A)

        f(3).Location = New Point(x + A, y + 2 * A)

    End Sub

    Sub fanqixing4()

        f(0).Location = New Point(x, y)

        f(1).Location = New Point(x + A, y)

        f(2).Location = New Point(x + 2 * A, y)

        f(3).Location = New Point(x + 2 * A, y + A)

    End Sub

    Sub fanqixuanzhuan()

        If pan = 1 Then

            fanqixing1()

            pan = 2

            biaozhi = 1

        ElseIf pan = 2 Then

            fanqixing2()

            pan = 3

            biaozhi = 2

        ElseIf pan = 3 Then

            fanqixing3()

            pan = 4

            biaozhi = 3

        ElseIf pan = 4 Then

            fanqixing4()

            pan = 1

            biaozhi = 4

        Else

            MsgBox("无效")

        End If

    End Sub

    Function fanqibiao() As Integer

        Return biaozhi

    End Function

    '表示正7的控件

    Public Sub zhenqi()

        ReDim f(3)

        Dim i As Integer

        For i = 0 To 3

            f(i) = New fangkuai

            f(i).BackColor = Color.DarkOrchid

            Me.Panel1.Controls.Add(f(i))

            f(i).Show()

        Next

        x = 120

        y = 0

        zhenqixing1()

    End Sub

    Sub zhenqisetxy(ByVal a As Integer, ByVal b As Integer)

        x = a

        y = b

    End Sub

    Sub zhenqixing1()

        f(0).Location = New Point(x, y)

        f(1).Location = New Point(x + A, y)

        f(2).Location = New Point(x + A, y + A)

        f(3).Location = New Point(x + A, y + 2 * A)

    End Sub

    Sub zhenqixing2()

        f(0).Location = New Point(x, y)

        f(1).Location = New Point(x + A, y)

        f(2).Location = New Point(x + 2 * A, y)

        f(3).Location = New Point(x, y + A)

    End Sub

    Sub zhenqixing3()

        f(0).Location = New Point(x, y)

        f(1).Location = New Point(x, y + A)

        f(2).Location = New Point(x, y + 2 * A)

        f(3).Location = New Point(x + A, y + 2 * A)

    End Sub

    Sub zhenqixing4()

        f(0).Location = New Point(x, y + A)

        f(1).Location = New Point(x + A, y + A)

        f(2).Location = New Point(x + 2 * A, y + A)

        f(3).Location = New Point(x + 2 * A, y)

    End Sub

    Sub zhenqixuanzhuan()

        If pan = 1 Then

            zhenqixing1()

            pan = 2

            biaozhi = 1

        ElseIf pan = 2 Then

            zhenqixing2()

            pan = 3

            biaozhi = 2

        ElseIf pan = 3 Then

            zhenqixing3()

            pan = 4

            biaozhi = 3

        ElseIf pan = 4 Then

            zhenqixing4()

            pan = 1

            biaozhi = 4

        Else

            MsgBox("无效")

        End If

    End Sub

    Function zhenqibiao() As Integer

        Return biaozhi

    End Function

    '表示像鸭子一样的控件

    Public Sub zhenqiang()

        ReDim f(3)

        Dim i As Integer

        For i = 0 To 3

            f(i) = New fangkuai

            f(i).BackColor = Color.Firebrick

            Me.Panel1.Controls.Add(f(i))

            f(i).Show()

        Next

        x = 120

        y = 0

        zhenqiangxing1()

    End Sub

    Sub zhenqiangsetxy(ByVal a As Integer, ByVal b As Integer)

        x = a

        y = b

    End Sub

    Sub zhenqiangxing1()

        f(0).Location = New Point(x + A, y)

        f(1).Location = New Point(x + 2 * A, y)

        f(2).Location = New Point(x, y + A)

        f(3).Location = New Point(x + A, y + A)

    End Sub

    Sub zhenqiangxing2()

        f(0).Location = New Point(x, y)

        f(1).Location = New Point(x, y + A)

        f(2).Location = New Point(x + A, y + A)

        f(3).Location = New Point(x + A, y + 2 * A)

    End Sub

    Sub zhenqiangxing3()

        f(0).Location = New Point(x + A, y)

        f(1).Location = New Point(x + 2 * A, y)

        f(2).Location = New Point(x, y + A)

        f(3).Location = New Point(x + A, y + A)

    End Sub

    Sub zhenqiangxing4()

        f(0).Location = New Point(x, y)

        f(1).Location = New Point(x, y + A)

        f(2).Location = New Point(x + A, y + A)

        f(3).Location = New Point(x + A, y + 2 * A)

    End Sub

    Sub zhenqiangxuanzhuan()

        If pan = 1 Then

            zhenqiangxing1()

            pan = 2

            biaozhi = 1

        ElseIf pan = 2 Then

            zhenqiangxing2()

            pan = 3

            biaozhi = 2

        ElseIf pan = 3 Then

            zhenqiangxing3()

            pan = 4

            biaozhi = 3

        ElseIf pan = 4 Then

            zhenqiangxing4()

            pan = 1

            biaozhi = 4

        Else

            MsgBox("无效")

        End If

    End Sub

    Function zhenqiangbiao() As Integer

        Return biaozhi

    End Function

    '表示如同鸭子形状的反过来的控件

    Public Sub fanqiang()

        ReDim f(3)

        Dim i As Integer

        For i = 0 To 3

            f(i) = New fangkuai

            f(i).BackColor = Color.HotPink

            Me.Panel1.Controls.Add(f(i))

            f(i).Show()

        Next

        x = 120

        y = 0

        fanqiangxing1()

    End Sub

    Sub fanqiangsetxy(ByVal a As Integer, ByVal b As Integer)

        x = a

        y = b

    End Sub

    Sub fanqiangxing1()

        f(0).Location = New Point(x, y)

        f(1).Location = New Point(x + A, y)

        f(2).Location = New Point(x + A, y + A)

        f(3).Location = New Point(x + 2 * A, y + A)

    End Sub

    Sub fanqiangxing2()

        f(0).Location = New Point(x + A, y)

        f(1).Location = New Point(x, y + A)

        f(2).Location = New Point(x + A, y + A)

        f(3).Location = New Point(x, y + 2 * A)

    End Sub

    Sub fanqiangxing3()

        f(0).Location = New Point(x, y)

        f(1).Location = New Point(x + A, y)

        f(2).Location = New Point(x + A, y + A)

        f(3).Location = New Point(x + 2 * A, y + A)

    End Sub

    Sub fanqiangxing4()

        f(0).Location = New Point(x + A, y)

        f(1).Location = New Point(x, y + A)

        f(2).Location = New Point(x + A, y + A)

        f(3).Location = New Point(x, y + 2 * A)

    End Sub

    Sub fanqiangxuanzhuan()

        If pan = 1 Then

            fanqiangxing1()

            pan = 2

            biaozhi = 1

        ElseIf pan = 2 Then

            fanqiangxing2()

            pan = 3

            biaozhi = 2

        ElseIf pan = 3 Then

            fanqiangxing3()

            pan = 4

            biaozhi = 3

        ElseIf pan = 4 Then

            fanqiangxing4()

            pan = 1

            biaozhi = 4

        Else

            MsgBox("无效")

        End If

    End Sub

    Function fanqiangbiao() As Integer

        Return biaozhi

    End Function

    '表示1字形的控件

    Public Sub changxing()

        ReDim f(3)

        Dim i As Integer

        For i = 0 To 3

            f(i) = New fangkuai

            f(i).BackColor = Color.Black

            Me.Panel1.Controls.Add(f(i))

            f(i).Show()

        Next

        x = 120

        y = 0

        changxingxing1()

    End Sub

    Sub changxingsetxy(ByVal a As Integer, ByVal b As Integer)

        x = a

        y = b

    End Sub

    Sub changxingxing1()

        f(0).Location = New Point(x, y)

        f(1).Location = New Point(x + A, y)

        f(2).Location = New Point(x + 2 * A, y)

        f(3).Location = New Point(x + 3 * A, y)

    End Sub

    Sub changxingxing2()

        f(0).Location = New Point(x + A, y)

        f(1).Location = New Point(x + A, y + A)

        f(2).Location = New Point(x + A, y + 2 * A)

        f(3).Location = New Point(x + A, y + 3 * A)

    End Sub

    Sub changxingxing3()

        f(0).Location = New Point(x, y)

        f(1).Location = New Point(x + A, y)

        f(2).Location = New Point(x + 2 * A, y)

        f(3).Location = New Point(x + 3 * A, y)

    End Sub

    Sub changxingxing4()

        f(0).Location = New Point(x + A, y)

        f(1).Location = New Point(x + A, y + A)

        f(2).Location = New Point(x + A, y + 2 * A)

        f(3).Location = New Point(x + A, y + 3 * A)

    End Sub

    Sub changxingxuanzhuan()

        If pan = 1 Then

            changxingxing1()

            pan = 2

            biaozhi = 1

        ElseIf pan = 2 Then

            changxingxing2()

            pan = 3

            biaozhi = 2

        ElseIf pan = 3 Then

            changxingxing3()

            pan = 4

            biaozhi = 3

        ElseIf pan = 4 Then

            changxingxing4()

            pan = 1

            biaozhi = 4

        Else

            MsgBox("无效")

        End If

    End Sub

    Function changxingbiao() As Integer

        Return biaozhi

    End Function

    '表示如同倒T的控件

    Public Sub daoti()

        ReDim f(3)

        Dim i As Integer

        For i = 0 To 3

            f(i) = New fangkuai

            f(i).BackColor = Color.Ivory

            Me.Panel1.Controls.Add(f(i))

            f(i).Show()

        Next

        x = 120

        y = 0

        daotixing1()

    End Sub

    Sub daotisetxy(ByVal a As Integer, ByVal b As Integer)

        x = a

        y = b

    End Sub

    Sub daotixing1()

        f(0).Location = New Point(x + A, y)

        f(1).Location = New Point(x, y + A)

        f(2).Location = New Point(x + A, y + A)

        f(3).Location = New Point(x + 2 * A, y + A)

    End Sub

    Sub daotixing2()

        f(0).Location = New Point(x + A, y)

        f(1).Location = New Point(x, y + A)

        f(2).Location = New Point(x + A, y + A)

        f(3).Location = New Point(x + A, y + 2 * A)

    End Sub

    Sub daotixing3()

        f(0).Location = New Point(x, y)

        f(1).Location = New Point(x + A, y)

        f(2).Location = New Point(x + 2 * A, y)

        f(3).Location = New Point(x + A, y + A)

    End Sub

    Sub daotixing4()

        f(0).Location = New Point(x + A, y)

        f(1).Location = New Point(x + A, y + A)

        f(2).Location = New Point(x + 2 * A, y + A)

        f(3).Location = New Point(x + A, y + 2 * A)

    End Sub

    Sub daotixuanzhuan()

        If pan = 1 Then

            daotixing1()

            pan = 2

            biaozhi = 1

        ElseIf pan = 2 Then

            daotixing2()

            pan = 3

            biaozhi = 2

        ElseIf pan = 3 Then

            daotixing3()

            pan = 4

            biaozhi = 3

        ElseIf pan = 4 Then

            daotixing4()

            pan = 1

            biaozhi = 4

        Else

            MsgBox("无效")

        End If

    End Sub

    Function daotibiao() As Integer

        Return biaozhi

    End Function

    '表示正方形的控件

    Public Sub zhengfang()

        ReDim f(3)

        Dim i As Integer

        For i = 0 To 3

            f(i) = New fangkuai

            f(i).BackColor = Color.Cyan

            Me.Panel1.Controls.Add(f(i))

            f(i).Show()

        Next

        x = 120

        y = 0

        zhengfangxing1()

    End Sub

    Sub zhengfangsetxy(ByVal a As Integer, ByVal b As Integer)

        x = a

        y = b

    End Sub

    Sub zhengfangxing1()

        f(0).Location = New Point(x, y)

        f(1).Location = New Point(x + A, y)

        f(2).Location = New Point(x, y + A)

        f(3).Location = New Point(x + A, y + A)

    End Sub

    Sub zhengfangxing2()

        f(0).Location = New Point(x, y)

        f(1).Location = New Point(x + A, y)

        f(2).Location = New Point(x, y + A)

        f(3).Location = New Point(x + A, y + A)

    End Sub

    Sub zhengfangxing3()

        f(0).Location = New Point(x, y)

        f(1).Location = New Point(x + A, y)

        f(2).Location = New Point(x, y + A)

        f(3).Location = New Point(x + A, y + A)

    End Sub

    Sub zhengfangxing4()

        f(0).Location = New Point(x, y)

        f(1).Location = New Point(x + A, y)

        f(2).Location = New Point(x, y + A)

        f(3).Location = New Point(x + A, y + A)

    End Sub

    Sub zhengfangxuanzhuan()

        If pan = 1 Then

            zhengfangxing1()

            pan = 2

            biaozhi = 1

        ElseIf pan = 2 Then

            zhengfangxing2()

            pan = 3

            biaozhi = 2

        ElseIf pan = 3 Then

            zhengfangxing3()

            pan = 4

            biaozhi = 3

        ElseIf pan = 4 Then

            zhengfangxing4()

            pan = 1

            biaozhi = 4

        Else

            MsgBox("无效")

        End If

    End Sub

    Function zhengfangbiao() As Integer

        Return biaozhi

    End Function

    '以下表示选择以上控件的代码,随机的

    Sub tiaoxuan()

        Dim n As Integer

        Dim r As Random

        r = New Random()

        n = r.Next Mod 7 + 1

        nowlocation = n

        Select Case n

            Case 1

                fanqi()

            Case 2

                zhenqi()

            Case 3

                daoti()

            Case 4

                zhenqiang()

            Case 5

                fanqiang()

            Case 6

                zhengfang()

            Case 7

                changxing()

        End Select

        Debug.WriteLine(n)

    End Sub

    Sub xuanzhuan()

        Select Case nowlocation

            Case 1

                fanqiangxuanzhuan()

            Case 2

                zhenqixuanzhuan()

            Case 3

                daotixuanzhuan()

            Case 4

                zhenqiangxuanzhuan()

            Case 5

                fanqiangxuanzhuan()

            Case 6

                zhengfangxuanzhuan()

            Case 7

                changxingxuanzhuan()

        End Select

    End Sub

    Sub getmax(ByRef xia As Integer, ByRef left As Integer, ByRef right As Integer)

        Select Case nowlocation

            Case 1

                Select Case fanqibiao()

                    Case 1

                        right = x + A

                        xia = y + 2 * A

                    Case 2

                        right = x + 2 * A

                        xia = y + A

                    Case 3

                        right = x + A

                        xia = y + 2 * A

                    Case 4

                        right = x + 2 * A

                        xia = y + A

                End Select

                left = x

            Case 2

                Select Case zhenqibiao()

                    Case 1

                        right = x + A

                        xia = y + 2 * A

                    Case 2

                        right = x + 2 * A

                        xia = y + A

                    Case 3

                        right = x + A

                        xia = y + 2 * A

                    Case 4

                        right = x + 2 * A

                        xia = y + A

                End Select

                left = x

            Case 3

                Select Case daotibiao()

                    Case 1

                        right = x + 2 * A

                        xia = y + A

                        left = x

                    Case 2

                        right = x + A

                        xia = y + 2 * A

                        left = x

                    Case 3

                        right = x + 2 * A

                        xia = y + A

                        left = x

                    Case 4

                        right = x + 2 * A

                        xia = y + 2 * A

                        left = x + A

                End Select

            Case 4

                Select Case zhenqiangbiao()

                    Case 1

                        right = x + 2 * A

                        xia = y + A

                    Case 2

                        right = x + A

                        xia = y + 2 * A

                    Case 3

                        right = x + 2 * A

                        xia = y + A

                    Case 4

                        right = x + A

                        xia = y + 2 * A

                End Select

                left = x

            Case 5

                Select Case fanqiangbiao()

                    Case 1

                        right = x + 2 * A

                        xia = y + A

                    Case 2

                        right = x + A

                        xia = y + 2 * A

                    Case 3

                        right = x + 2 * A

                        xia = y + A

                    Case 4

                        right = x + A

                        xia = y + 2 * A

                End Select

                left = x

            Case 6

                Select Case zhengfangbiao()

                    Case 1

                        right = x + A

                        xia = y + A

                    Case 2

                        right = x + A

                        xia = y + A

                    Case 3

                        right = x + A

                        xia = y + A

                    Case 4

                        right = x + A

                        xia = y + A

                End Select

                left = x

            Case 7

                Select Case changxingbiao()

                    Case 1

                        right = x + 3 * A

                        xia = y

                        left = x

                    Case 2

                        right = x + A

                        xia = y + 3 * A

                        left = x + A

                    Case 3

                        right = x + 3 * A

                        xia = y

                        left = x

                    Case 4

                        right = x + A

                        xia = y + 3 * A

                        left = x + A

                End Select

        End Select

    End Sub

    Sub setxy(ByVal a As Integer, ByVal b As Integer)

        Select Case nowlocation

            Case 1

                fanqisetxy(a, b)

            Case 2

                zhenqisetxy(a, b)

            Case 3

                daotisetxy(a, b)

            Case 4

                zhenqiangsetxy(a, b)

            Case 5

                fanqiangsetxy(a, b)

            Case 6

                zhengfangsetxy(a, b)

            Case 7

                changxingsetxy(a, b)

        End Select

    End Sub

    Sub getfuwei()

        Select Case nowlocation

            Case 1

                Select Case fanqibiao()

                    Case 1

                        fanqixing1()

                    Case 2

                        fanqixing2()

                    Case 3

                        fanqixing3()

                    Case 4

                        fanqixing4()

                End Select

            Case 2

                Select Case zhenqibiao()

                    Case 1

                        zhenqixing1()

                    Case 2

                        zhenqixing2()

                    Case 3

                        zhenqixing3()

                    Case 4

                        zhenqixing4()

                End Select

            Case 3

                Select Case daotibiao()

                    Case 1

                        daotixing1()

                    Case 2

                        daotixing2()

                    Case 3

                        daotixing3()

                    Case 4

                        daotixing4()

                End Select

            Case 4

                Select Case zhenqiangbiao()

                    Case 1

                        zhenqiangxing1()

                    Case 2

                        zhenqiangxing2()

                    Case 3

                        zhenqiangxing3()

                    Case 4

                        zhenqiangxing4()

                End Select

            Case 5

                Select Case fanqiangbiao()

                    Case 1

                        fanqiangxing1()

                    Case 2

                        fanqiangxing2()

                    Case 3

                        fanqiangxing3()

                    Case 4

                        fanqiangxing4()

                End Select

            Case 6

                Select Case zhengfangbiao()

                    Case 1

                        zhengfangxing1()

                    Case 2

                        zhengfangxing2()

                    Case 3

                        zhengfangxing3()

                    Case 4

                        zhengfangxing4()

                End Select

            Case 7

                Select Case changxingbiao()

                    Case 1

                        changxingxing1()

                    Case 2

                        changxingxing2()

                    Case 3

                        changxingxing3()

                    Case 4

                        changxingxing4()

                End Select

        End Select

    End Sub

    Sub getfangkuai()

    End Sub

    '移动时方块不要碰撞

    Public Function bupengzhuangleft(ByVal xing As fangkuai, ByVal qiang As fangkuai) As Boolean

        Dim x1, y1, x2, y2, x3, y3, m1, n1, m2, n2, m3, n3, m4, n4 As Integer

        x1 = xing.Location.X - 5

        y1 = xing.Location.Y + xing.Size.Height / 4

        x2 = xing.Location.X - 5

        y2 = xing.Location.Y + xing.Size.Height / 2

        x3 = xing.Location.X - 5

        y3 = xing.Location.Y + xing.Size.Height

        m1 = qiang.Location.X

        n1 = qiang.Location.Y

        m2 = m1 + qiang.Size.Width

        n2 = n1

        m3 = m1

        n3 = n1 + qiang.Size.Height

        m4 = m2

        n4 = n3

        If ((x1 > m1 And x1 < m2 And y1 > n1 And y1 < n3) Or (x2 > m1 And x2 < m2 And y2 > n1 And y2 < n3) Or (x3 > m1 And x3 < m2 And y3 > n1 And y3 < n3)) Then

            Return True

        End If

    End Function

    Public Function bupengzhuangright(ByVal xing As fangkuai, ByVal qiang As fangkuai) As Boolean

        Dim x1, y1, x2, y2, x3, y3, m1, n1, m2, n2, m3, n3, m4, n4 As Integer

        x1 = xing.Location.X + xing.Size.Width + 5

        y1 = xing.Location.Y + xing.Size.Height / 4

        x2 = xing.Location.X + xing.Size.Width + 5

        y2 = xing.Location.Y + xing.Size.Height / 2

        x3 = xing.Location.X + xing.Size.Width + 5

        y3 = xing.Location.Y + xing.Size.Height

        m1 = qiang.Location.X

        n1 = qiang.Location.Y

        m2 = m1 + qiang.Size.Width

        n2 = n1

        m3 = m1

        n3 = n1 + qiang.Size.Height

        m4 = m2

        n4 = n3

        If ((x1 > m1 And x1 < m2 And y1 > n1 And y1 < n3) Or (x2 > m1 And x2 < m2 And y2 > n1 And y2 < n3) Or (x3 > m1 And x3 < m2 And y3 > n1 And y3 < n3)) Then

            Return True

        End If

    End Function

    Public Function bupengzhuangxia(ByVal xing As fangkuai, ByVal qiang As fangkuai) As Boolean

        Dim x4, y4, m1, n1, m2, n2, m3, n3, m4, n4 As Integer

        x4 = xing.Location.X + xing.Size.Width / 2

        y4 = xing.Location.Y + xing.Size.Height + 11

        m1 = qiang.Location.X

        n1 = qiang.Location.Y

        m2 = m1 + qiang.Size.Width

        n2 = n1

        m3 = m1

        n3 = n1 + qiang.Size.Height

        m4 = m2

        n4 = n3

        If (x4 >= m1 And x4 <= m2 And y4 >= n1 And y4 <= n3) Then

            Return True

        End If

    End Function

    Public Function bupengzhuangxia1(ByVal xing As fangkuai, ByVal qiang As fangkuai) As Boolean

        Dim x4, y4, m1, n1, m2, n2, m3, n3, m4, n4 As Integer

        x4 = xing.Location.X + xing.Size.Width / 2

        y4 = xing.Location.Y + xing.Size.Height

        m1 = qiang.Location.X

        n1 = qiang.Location.Y

        m2 = m1 + qiang.Size.Width

        n2 = n1

        m3 = m1

        n3 = n1 + qiang.Size.Height

        m4 = m2

        n4 = n3

        If (x4 >= m1 And x4 <= m2 And y4 >= n1 And y4 <= n3) Then

            Return True

        End If

    End Function

    Function bupengleft() As Boolean

        Dim sa, sb As Integer

        For sa = 0 To shumu - 1 - 4

            For sb = 0 To 3

                If bupengzhuangleft(f(sb), shuzu(sa)) Then

                    Return True

                End If

            Next

        Next

    End Function

    Function bupengright() As Boolean

        Dim sa, sb As Integer

        For sa = 0 To shumu - 1 - 4

            For sb = 0 To 3

                If bupengzhuangright(f(sb), shuzu(sa)) Then

                    Return True

                End If

            Next

        Next

    End Function

    Function bupengxia() As Boolean

        Dim sa, sb As Integer

        For sa = 0 To shumu - 1 - 4

            For sb = 0 To 3

                If bupengzhuangxia(f(sb), shuzu(sa)) Then

                    Return True

                End If

            Next

        Next

    End Function

    Function bupengxia1() As Boolean

        Dim sa, sb As Integer

        For sa = 0 To shumu - 1 - 4

            For sb = 0 To 3

                If bupengzhuangxia1(f(sb), shuzu(sa)) Then

                    Return True

                End If

            Next

        Next

    End Function

    '使方块不出界

    Private Function buchujie(ByVal diannao As fangkuai) As Boolean

        Dim x1, y1, x2, y2 As Integer

        x1 = diannao.Location.X

        y1 = diannao.Location.Y

        x2 = x1 + diannao.Size.Width

        y2 = y1 + diannao.Height

        If (x1 < 0 Or x2 > Me.Panel1.Width) Then

        ElseIf y1 < 0 Then

        ElseIf y2 >= Me.Panel1.Height Then

            Return True

        End If

    End Function

    Function buchu() As Boolean

        Dim j As Integer

        For j = 0 To 3

            If buchujie(f(j)) Then

                Return True

            End If

        Next

        Return False

    End Function

    Private Function chujie(ByVal diannao As fangkuai) As Boolean

        Dim x1, y1, x2, y2 As Integer

        x1 = diannao.Location.X

        y1 = diannao.Location.Y

        x2 = x1 + diannao.Size.Width

        y2 = y1 + diannao.Height

        If (x1 < 0 Or x2 > Me.Panel1.Width Or y1 < 0 Or y2 > Me.Panel1.Height) Then

            Return True

        End If

    End Function

    '查找相同的一行

    Sub xiangtong()

        Dim xin(14), shu As Integer

        Dim sss As Integer = 0

        Dim jishu As Integer = 0

        For shu = 460 To 40 Step -20

            For sss = 0 To shumu - 1

                If Not chujie(shuzu(sss)) Then

                    If System.Math.Abs(shuzu(sss).Location.Y - shu) < 10 Then

                        xin(jishu) = sss

                        jishu = jishu + 1

                        If jishu = 15 Then

                            yichu(xin)

                            xiayi(shu)

                            sss = 0

                            shu = 460

                            jishu = 0

                        End If

                    End If

                End If

            Next

            jishu = 0

        Next

    End Sub

    '反控件移出的函数

    Sub yichu(ByVal a() As Integer)

        Dim i As Integer

        For i = 0 To 14

            shuzu(a(i)).Location = New Point(-60, -60)

        Next

    End Sub

    '控件下移

    Sub xiayi(ByVal s As Integer)

        Dim sss As Integer

        For sss = 0 To shumu - 1

            If Not chujie(shuzu(sss)) Then

                If shuzu(sss).Location.Y - s < -10 Then

                    shuzu(sss).Location = New Point(shuzu(sss).Location.X, shuzu(sss).Location.Y + 20)

                End If

            End If

        Next

    End Sub

    '用W,A,D,S 来控制

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

        Dim xia, left, right As Integer

        getmax(xia, left, right)

        Select Case e.KeyCode

            Case Keys.W

                xuanzhuan()

                getmax(xia, left, right)

                If x < 0 Then

                    setxy(0, y)

                    getfuwei()

                ElseIf right + A > Me.Panel1.Width Then

                    setxy(x - right - A + Me.Panel1.Width, y)

                    getfuwei()

                End If

            Case Keys.A

                If left - 20 >= 0 And Not bupengleft() Then

                    setxy(x - 20, y)

                    getfuwei()

                End If

            Case Keys.D

                If right + A + 20 <= Me.Panel1.Width And Not bupengright() Then

                    setxy(x + 20, y)

                    getfuwei()

                End If

            Case Keys.S

                If xia + A + 10 <= Me.Panel1.Height And Not bupengxia() Then

                    setxy(x, y + 10)

                    getfuwei()

                End If                                     '设置w a s d 键来控制方块速度和方向

        End Select

    End Sub

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

        Dim xia, left, right As Integer

        getmax(xia, left, right)

        If xia + A + 1 <= Me.Panel1.Height Then

            setxy(x, y + 1)

            getfuwei()

        End If

        If Me.buchu() Or bupengxia1() Then

            Dim aaaa As Integer = 0

            For aaaa = 0 To 1

                xiangtong()

            Next

            If xia - 30 < 0 Then

                Me.Timer1.Enabled = False

                MsgBox("很遗憾!再来一盘吧。")

            End If

            Dim asd As Integer

            For asd = 0 To 3

                f(asd).BackColor = Color.HotPink

            Next

            tiaoxuan()

            For abc = 0 To 3

                If shumu >= 800 Then

                    If bbb < geshu Then

                        shuzu(ss(bbb)) = f(abc)

                        bbb = bbb + 1

                    Else

                        zhao()

                        bbb = 0

                    End If

                Else

                    shuzu(shumu) = f(abc)

                    shumu = shumu + 1

                End If

            Next

        End If

    End Sub

    Sub zhao()

        Dim i As Integer

        Dim j As Integer = 0

        For i = 0 To shumu - 1

            If Not chujie(shuzu(i)) Then

                ss(j) = i

                j = j + 1

            End If

        Next

        geshu = j

    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Me.Timer1.Enabled = False          '停止按钮设置

        Debug.WriteLine(shumu)

    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

        Me.Timer1.Enabled = True         '恢复按钮设置

    End Sub

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

        End              '退出按钮设置

    End Sub

    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click

        Timer1.Enabled = True

    End Sub

    Private Sub Panel1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Panel1.Paint

    End Sub

    Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)

     

    End Sub

    Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click

        MsgBox("当前时间:" & Now, , "***")  '获取当前时间

    End Sub

    Private Sub GroupBox1_Enter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles GroupBox1.Enter

    End Sub

    Private Sub Label2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label2.Click

    End Sub

End Class

图示一

图示二

图示三

3. 心得体会

ü    1:编写游戏代码的过程其实就是一个不断熟悉知识点的过程,我们要经常的反复试验和应用。通过这个编写代码中出现的问题以及我们处理问题的解决过程,可以获取更多的学习和思考的体验。长此以往,我们会更加得心应手。同时在不断的应用中分析代码会发现比较模糊的知识点,能为VB的学习打下重要的的基础。。

ü    2:在编程过程中我们必须要掌握每个变量的联系和算法,通过各个控件的综合效果,达到游戏所要求的功能。

ü    3:与此同时编程的东西所谓的对象———代码其实是一种工具,经过大量时间的练习就可以掌握到属于这门课的要点部分。其中关键在于我们广大的同学如何用,需求是什么,所以思维去总结解决问题,总能获得更大的优势。在课外学习中,尽量多的了解高级语言,就可以建立一种编程思维。所以开拓想法,多做实验,项目之类的东西,语言用才能熟悉和发展。这样久而久之,就会越来越熟悉电脑语言的使用。

ü    4:在这个大作业的完成过程中,我也深刻的体会到如果没有在C或者C++的结构化思想以及数据结构的算法,那么在其他语言的运用中是比较困难的。在做大作业的过程中,俄罗斯方块基本的功能框架出现之后,我们做的便是为代码添加更复杂的一些控件。例如加速,左移,右移等。

ü   

ü   

更多相关推荐:
俄罗斯方块实验报告

软件工程与开发实践1软件设计报告题目俄罗斯方块学院计算机学院专业计算机科学与技术班级学号10109345学生姓名其他成员组长指导教师完成日期孙志海20xx年6月一软件设计概述目的任务开发环境参考资料俄罗斯方块游...

JAVA 俄罗斯方块实验报告

目录一需求分析错误未定义书签二系统运行环境2三系统功能需求描述2四总体设计2五系统结构图3六程序模块设计3七实验总结体会15一需求分析在个人电脑日益普及的今天一些有趣的桌面游戏已经成为人们在使用计算机进行工作或...

c语言俄罗斯方块实验报告

C语言之游戏俄罗斯方块课程设计报告专业学生姓名指导教师完成时间1目录一需求分析错误未定义书签二概要设计错误未定义书签三详细设计错误未定义书签四调试分析19五用户手册20六测试数据错误未定义书签七附录错误未定义书...

俄罗斯方块实验报告

程序设计实践报告20xx20xx学年第2学期题目专学生姓班级学指导教指导单日俄罗斯方块游戏设计业名号师位软件工程系期20xx0327俄罗斯方块游戏设计一课题内容和要求本程序的主要任务就是编写简单的俄罗斯方块游戏...

俄罗斯方块设计实验报告

数字电路与逻辑设计实验报告基于VHDL的简易俄罗斯方块实验名称姓名班级简易俄罗斯方块电信工程学院04107班辅导老师日期高英20xx年11月6日摘要俄罗斯方块游戏是我们熟知的经典小游戏之一本实验通过硬件编成实现...

C++俄罗斯方块实验报告(附实验体会)

程序设计综合实验设计文档惠州学院HUIZHOUUNIVERSITY课程名称程序设计综合实验姓名实验名称俄罗斯方块学号任课教师专业班级计算机科学与技术1班实验时间第一周至第十二周实验成绩批阅教师签字第1页共18页...

游戏设计俄罗斯方块实验报告

江苏省惠山中等专业学校实验报告课程名称C程序设计实验名称游戏设计俄罗斯方块班级G1241姓名鲍顺亮日期指导教师卫洛斌成绩

俄罗斯方块开题报告

蚌埠学院本科毕业设计论文开题报告计算机科学与技术系20xx届10级计算机科学与技术1班注开题报告由学生在毕业设计论文工作前期内完成外语专业的开题报告必须用相应的语种写作开题报告须经指导教师审阅并签字后才能生效本...

基于Qt的俄罗斯方块-开题报告

湖南工学院本科毕业设计论文开题报告20xx届20xx年3月1日说明开题报告作为毕业设计论文答辩委员会对学生答辩资格审查的依据材料之一此报告应在导师指导下由学生填写将作为毕业设计论文成绩考查的重要依据经导师审查后...

C语言编写俄罗斯方块实验报告

学院数计学院班级学号姓名1摘要关键字目录第一部分设计总概摘要一设计目的二设计要求三设计内容四系统分析与设计第二部分数据结构设计第三部分功能实现与程序调试第四部分完成设计一实习日记二实习总结三教师评语四程序使用说...

俄罗斯方块设计报告书

海南师范大学软件设计模式课程报告20xx20xx年度第一学期课程名称题目院系信息科学技术学院班级任课教师成员1成绩评定分数一任务分配二指导教师评语2目录目录3摘要4一绪论511俄罗斯方块游戏简介512俄罗斯方块...

俄罗斯方块游戏设计报告

实训报告设计题目俄罗斯方块游戏设计院系班级学号姓名指导教师设计地点开课时间学院制学生姓名成绩评语指导教师签名年月日4目录1设计目的和任务111目的112任务12开发环境121硬件环境122软件环境13设计题目2...

俄罗斯方块实验报告(44篇)