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++的结构化思想以及数据结构的算法,那么在其他语言的运用中是比较困难的。在做大作业的过程中,俄罗斯方块基本的功能框架出现之后,我们做的便是为代码添加更复杂的一些控件。例如加速,左移,右移等。
ü
ü