十字消除游戏画面由很多小方块组成,首先进行宏定义:
#define BlockSize 19'小方块的边长
#define RowNum 13 '游戏画面一共RowNum行小方块
#define ColNum 21 '游戏画面一共ColNum列小方块
定义小方块结构体:
Type Block ' 小方块结构体
As Long x, y ' 小方块在画面中的x,y坐标
As Long i, j ' 小方块在二维数组中的i,j下标
End Type
利用Block结构体类型,定义二维数组blocks全局变量,存储游戏画面中所有小方块的信息:
Dim Shared blocks(RowNum -1, ColNum -1) As Block ' 构建二维数组,存储所有数据
在startup()中初始化blocks,将其设置为红色填充、白色线条;show()函数中绘制出所有的小方块,显示效果如图10-2所示。

#define BlockSize 19 '小方块的边长
#define RowNum 13 '游戏画面一共RowNum行小方块
#define ColNum 21 '游戏画面一共ColNum列小方块
Type Block ' 小方块结构体
As Long x, y ' 小方块在画面中的x,y坐标
As Long i, j ' 小方块在二维数组中的i,j下标
End Type
'全局变量定义
Dim Shared blocks(RowNum -1, ColNum -1) As Block ' 构建二维数组,存储所有数据
Sub startup() '初始化函数
Dim As Long i, j
'对blocks二维数组进行初始化
For i = 0 To RowNum -1
For j = 0 To ColNum -1
blocks(i, j).x = j * BlockSize '小方块左上角的坐标
blocks(i, j).y = i * BlockSize
blocks(i, j).i = i '存储当前小方块在二维数组中的下标
blocks(i, j).j = j
Next
Next
End Sub
Sub show(gg As yGDI) '绘制函数
gg.Cls BGR(220, 220, 220) '灰色背景。
gg.Pen 1, BGR(255, 255, 255) ' 白色线条
gg.Brush BGR(255, 0, 0) '设置填充颜色
Dim As Long i, j
' 以对应的颜色、坐标画出所有的小方块
For i = 0 To RowNum -1
For j = 0 To ColNum -1
gg.DrawFrame blocks(i, j).x,blocks(i, j).y, BlockSize,BlockSize
Next
Next
gg.Redraw
End Sub
Sub updateWithoutInput() '与输入无关的更新
Sleep 10 '暂停若干毫秒
End Sub
Sub updateWithInput(hWndForm As hWnd, gg As ygdi) ' 和输入有关的更新
End Sub
Sub 游戏执行过程(hWndForm As hWnd)
Dim gg As yGDI = hWndForm
startup() '初始化
Do '循环执行
show(gg) '绘制
updateWithInput(hWndForm, gg)
updateWithoutInput()
Loop
End Sub
评论一下?