📄 module.bas
字号:
End If
Next Y
For Y = 0 To 3 '2个for用来检测上面state处理后是否违法,既方块数组加上x,y坐标后在相应地图数组元素中是非NULL
For x = 0 To 3 '这里只对上面state处理后有效。left和right是不可能出现这种情况的
If fang.Are(Y, x) = 1 Then
If Map(fang.Y + Y, fang.x + x) <> "Null" Then
Judge = "error" '违法则函数返回error
End If
End If
Next x
Next Y
End Function
Function Move(char As String, fang As kuai) '
Main_F.Main_P.Cls
Dim state As Integer
Dim x_temp As Integer
Select Case char
Case "state"
Sound (".\sound\state.wav") '播放转“形态”的声音
state = fang.state '临时记录方块现在形态(为以后可能要恢复原状态临时保存)
x_temp = fang.x '临时记录方块的x坐标(因为在judge中可能会改变x值,为以后可能要恢复原状态临时保存)
If fang.state < 4 Then '变换形态,(1,2,3,4种状态可变)
fang.state = fang.state + 1
Else
fang.state = 1
End If
s = Clear_are(fang.Are) '清空现在的方块数组
s = Create_are(fang.mode, fang.state, fang.Are) '根据形态构件新方块(mode不变,x,y不变,只变换state和相应的数组)
If Judge(char, fang) = "error" Then '判断变换以后的方块是否违法
fang.x = x_temp '如果违法则恢复原数组x坐标
fang.state = state '恢复原state
s = Clear_are(fang.Are) '清空方块数组
s = Create_are(fang.mode, fang.state, fang.Are) '构件方块数组
End If
Case "down" '按↓时
Module.Sound (".\sound\down.wav")
s = Judge(char, fang) 'judge不会返回值,但是有可能在按下时被石化所以调用judge函数处理
fang.Y = fang.Y + 1 '方块y坐标向下移动一格
Case "right"
If Judge(char, fang) <> "error" Then '当judge返回不是error使表示可以右移
fang.x = fang.x + 1 '方块x坐标右移
End If
Case "left"
If Judge(char, fang) <> "error" Then '左移
fang.x = fang.x - 1
End If
End Select
s = Dis_are(fang) '显示方块
Load_map '显示地图
End Function
Function Dis_are(fang As kuai) '显示方块
For Y = 0 To 3 '显示方法为每个are数组元素为1的x,y坐标对应加上fang.x,fang.y坐标,就是实际方块位置坐标
For x = 0 To 3
If fang.Are(Y, x) = 1 Then
Main_F.Main_P.PaintPicture Main_F.Are(2).Picture, (fang.x + x) * 20, (fang.Y + Y) * 20, 20, 20, 0, 0, 20, 20
End If
Next x
Next Y
End Function
Function Clear_are(value() As Integer) '清空方块的数组
For Y = 0 To 3
For x = 0 To 3
value(x, Y) = 0
Next x
Next Y
End Function
Function Next_are(fang As kuai) '初始化方块数组
Dim f
Dim fangtemp As kuai '临时储存kuai类型的变量,用于交换2个方块类型(外部的fang1,和fangnext)
fang = fangnext '把事先随机生成的方块给到外部fang1(fang的实际参数)
Main_F.Next_P.Cls '为显示新的下一个方块,清理显示“下一个方块”的pic控件。
Randomize '随机生成下一个方块的mode,state
fangtemp.mode = Int(5 * Rnd + 1)
fangtemp.state = Int(4 * Rnd + 1)
s = Create_are(fangtemp.mode, fangtemp.state, fangtemp.Are) '构件方块数组
For Y = 0 To 3
For x = 0 To 3
If fangtemp.Are(Y, x) = 1 Then
Main_F.Next_P.PaintPicture Main_F.Are(2).Picture, x * 20, Y * 20, 20, 20, 0, 0, 20, 20 '在“下一个方块”pic控件里显示新的下一个方块
End If
Next x
Next Y
fangnext = fangtemp '把下一个方块给到全模块变量里,为下一次fang1赋值作准备
End Function
Function zuobiao(fang As kuai) '此函数调整方块初始位置
fang.x = MapX / 2 '用4*4数组表示方块会出现左右不对称,致使统一初始位置后显示位置却不一样所以写此函数调整
fang.Y = 0
Select Case fang.mode
Case 1, 2, 5
Select Case fang.state
Case 2, 4
fang.x = MapX / 2
fang.Y = -1
End Select
Case 4
Select Case fang.state
Case 2, 4
fang.x = MapX / 2
fang.Y = -3
End Select
End Select
End Function
Function Create_are(mode, state, value() As Integer) '建立各种方块类型和方块状态的模型(每次人为改变方块时也调用此函数来改变)
Select Case mode
Case 1
Select Case state
Case 1
value(0, 0) = 1
value(1, 0) = 1
value(2, 0) = 1
value(2, 1) = 1
Case 2
value(1, 0) = 1
value(1, 1) = 1
value(1, 2) = 1
value(2, 0) = 1
Case 3
value(0, 0) = 1
value(0, 1) = 1
value(1, 1) = 1
value(2, 1) = 1
Case 4
value(1, 2) = 1
value(2, 0) = 1
value(2, 1) = 1
value(2, 2) = 1
End Select
Case 2
Select Case state
Case 1
value(2, 0) = 1
value(0, 1) = 1
value(1, 1) = 1
value(2, 1) = 1
Case 2
value(1, 0) = 1
value(2, 0) = 1
value(2, 1) = 1
value(2, 2) = 1
Case 3
value(0, 0) = 1
value(0, 1) = 1
value(1, 0) = 1
value(2, 0) = 1
Case 4
value(1, 0) = 1
value(1, 1) = 1
value(1, 2) = 1
value(2, 2) = 1
End Select
Case 3
value(0, 0) = 1
value(0, 1) = 1
value(1, 0) = 1
value(1, 1) = 1
Case 4
Select Case state
Case 1, 3
value(0, 1) = 1
value(1, 1) = 1
value(2, 1) = 1
value(3, 1) = 1
Case 2, 4
value(3, 0) = 1
value(3, 1) = 1
value(3, 2) = 1
value(3, 3) = 1
End Select
Case 5
Select Case state
Case 1
value(0, 0) = 1
value(1, 0) = 1
value(1, 1) = 1
value(2, 0) = 1
Case 2
value(1, 0) = 1
value(1, 1) = 1
value(1, 2) = 1
value(2, 1) = 1
Case 3
value(0, 1) = 1
value(1, 0) = 1
value(1, 1) = 1
value(2, 1) = 1
Case 4
value(1, 1) = 1
value(2, 0) = 1
value(2, 1) = 1
value(2, 2) = 1
End Select
End Select
End Function
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -