|
|
很羡慕别人有自己作品的,才学习编程就想飞。
前段时间光在网上乱逛,找代码,下资源
结果代码看不懂,书也看不明白。
现在才知道基础才是最重要的。
想编个俄罗斯方块的游戏,今天下了个几个代码看了下。感觉有好有坏
第一个代码研究:
定义二维数组
Global Total(10, 20) As Boolean
'是个Boolean 记录着总体的坐标布局,如果某坐标被占是TURE,没有占是FALSE
注:此游戏的背景是用PICTUREBOX,正好是宽10个像素,高20个像素.这样很容易获得某点坐标是否占据,正好也是相同数值的Total数组的BOOLEAN值
方块是现有的图形,通过一个记录数据结构描述方块的坐标
Type cXs '一个小方块 4 个点的坐标
cX As Integer 'x 坐标
cY As Integer 'y 坐标
cZ As Boolean '判断一个点下面是否是空的
End Type
一个方块图形(如方块,长条,田字等)都是由四个小方块组成,一个方块图形的描述为:
Global Xs(4) As cXs
用Timer控件来控制方块图形的向下移动
picPictureNow.Top = picPictureNow.Top + 1
如果向下时 检查方块图形的四个小方块如果某个的坐标下个坐标所对应的Total(x,x)的为TRUE即Total(Xs(i).cX, Xs(i).cY + 1=true或者Xs(i).cY = 20证明到底 然后用BITBLT把图形固定
此时 如果满行则消行
判断满行If Total(1, i) And Total(2, i) And Total(3, i) And Total(4, i) And Total(5, i) And _
Total(6, i) And Total(7, i) And Total(8, i) And Total(9, i) And Total(10, i) Then
消行用的是BITBLT
k = BitBlt(picBackGround.hDC, 0, 20, 200, (i - 1) * 20, picBackGround.hDC, 0, 0, vbSrcCopy)
Total数组也相应变化
For j = i To 1 Step -1
For k = 1 To 10
Total(k, j) = Total(k, j - 1)
Next k
Next j
方块的左移,右移 旋转 都是坐标的变化 可以看一下代码 代码写的很明了
第二个代码
才下这个代码 第一感觉界面很好看
但看到代码后感动了 整个代码没有注解 而且变量名控件名更强 尽是此t a aa 这样的名字
谁让咱是初学者呢 我还是把代码看了
看后还是感动
本游戏的方块图形是通过四个Commandbutton来组成
更绝的是用了四百多个大小一样组合一起跟背景PICTUREBOX一样大小的shape
注:背景颜色为黑色 看不出来
shape跟Commandbutton一样大小
用Timer控制四个Commandbutton组成的图形向下移动
如果到底就相对应的shape backstyle=1
程序是通过backstyle来检查是否满行 如果一行每个shape都为backstyle=1则满行
消行只用上一行的shape的backstyle属性移到这行就OK了
思路很简单,什么GDI DX 都没有用 照样也达到目的了 想到这我想到了 有人看了韩国游戏的源码 说里面的代码垃圾死 但人家的游戏不是照样很火吗 看来只要达到目的 不管用什么方法都行 不过也感觉作者也是很强的 在我们没有学GDI DX的时候怎么用现有技术来编写这样的游戏 看来编游戏还是得有想像力的
代码三
用绘制网格的方法
定义一个10*20的网格
在定义方块时 只用在相应的坐标上用相应的颜色就能组成方块图形
'当前方块的信息
Private m_CurIndex As Long '方块类型
Private m_CurStatus As Long '方块旋转状态
Private m_CurColor As Long '颜色(QBColor索引)
Private m_CurX As Long, m_CurY As Long '当前位置。单位:图格
剩下的看代码吧
还有个代码 我只看了一下
它是定义了一个一维数组来定义方块图形
Dim mErsBar(0 To 8) As Long
' 俄罗斯方块形状定义,数组下标分配如下:
' +---+---+---+
' | 0 | 1 | 2 |
' +---+---+---+
' | 7 | 8 | 3 |
' +---+---+---+
' | 6 | 5 | 4 |
' +---+---+---+
' 之所以这样定义,是为了方便方块类型设置和旋转判断
' 数组元素取值为:是空白 = 0,是方块构件 = 1
这样的好处是在方块的旋转时 只用改用相应的数字就OK了
这个代码用了递归 看C语言时 递归都很迷模 尤其是那个汉诺塔问题 搞不明白呀
大家也可以看下
一个俄罗斯方块有这么多的编法 听说俄罗斯方块才出来的时候 风迷全球 不过那时肯定是用某某汇编编写的 现在用VB编写真方便
如果我DX学好了 也用DX编写个 但那也许是很遥远的事 什么才能编个自己的游戏 |
|