在Excel中用VBA制作俄罗斯方块游戏
前几天用VBA写了一个俄罗斯方块游戏。
先工作表设置
工作表该填写参数的位置须要填写参数。
效果是这样的:
这里没有把列序数和行序数截取过来,就补标几个项:
游戏区域E1:N20涂黑就行。“y-1 exists”在T8单元格,"type"在Y8单元格,"ColorIndex"在AA1单元格,"knext"在AG6单元格,最后一行最后一列的"74010208"在AG36单元格
Z1:Z7为方块的颜色代码。写在单元格或者赋值到字典都行,为了方便写在了单元格。
AC1:AC5为消除的层数。AD1:AD5为消除层数对应的代码。
type对应的Y列:1,2,3,4,5,6,7代表方块的种类参数,就是俄罗斯方块这7种:
每一种方块又有四个旋转向,所以Z列对应的值1,2,3,4代表旋转参数。
因为每一种俄罗斯方块由四个小方块组成(即四个单元格),那么确定方块的位置的参数,除了原点坐标的两个参数之外,还需要其他三个单元格的坐标,3个坐标就是6个参数,故这里设置AA列到AF列6个坐标参数。
AG列是集方块的1.类型/2.旋转/3.位置 为一体的长参数。集为一体也是方便代码的书写简化判断操作。
T列的y-1 exists 和U列的 y+1 exists 分别为判断用户按键左移和右移的极限值的参数,极限意思就是到了边缘,或者撞到了其他方块,无法再移动而不执行移动。
游戏开始按钮:
我们把Name设为:Start_Button1
Caption设为:StartGame
代码分为三块内容:
【第大一块】
全局声明:
Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
Private Declare Function GetKeyboardState Lib "user32" (pbKeyState As Byte) As Long
Private Declare Function SetKeyboardState Lib "user32" (lppbKeyState As Byte) As Long
Dim p
Dim rw
Dim aBuffer(0 To 255) As Byte
【第二大块】
Function函数过程:
Function shape(s, x, y)
'当新出现的方块时
Set uni = Union(Cells(x, y), Cells(x, y).Offset(WorksheetFunction.Substitute(Mid(s, 3, 1), 8, -1), WorksheetFunction.Substitute(Mid(s, 4, 1), 8, -1)), Cells(x, y).Offset(WorksheetFunction.Substitute(Mid(s, 5, 1), 8, -1), WorksheetFunction.Substitute(Mid(s, 6, 1), 8, -1)), Cells(x, y).Offset(WorksheetFunction.Substitute(Mid(s, 7, 1), 8, -1), WorksheetFunction.Substitute(Mid(s, 8, 1), 8, -1)))
uni.Int