游戏开发论坛

 找回密码
 立即注册
搜索
查看: 5027|回复: 15

编写俄罗斯方块 几个代码研究

[复制链接]

14

主题

86

帖子

86

积分

注册会员

Rank: 2

积分
86
发表于 2006-9-3 21:37:00 | 显示全部楼层 |阅读模式
很羡慕别人有自己作品的,才学习编程就想飞。
前段时间光在网上乱逛,找代码,下资源
结果代码看不懂,书也看不明白。
现在才知道基础才是最重要的。
想编个俄罗斯方块的游戏,今天下了个几个代码看了下。感觉有好有坏
第一个代码研究:

定义二维数组
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编写个 但那也许是很遥远的事 什么才能编个自己的游戏

14

主题

86

帖子

86

积分

注册会员

Rank: 2

积分
86
发表于 2006-9-3 21:39:00 | 显示全部楼层

Re: 编写俄罗斯方块 几个代码研究

代码一

sf_200693213844.zip

7.76 KB, 下载次数:

14

主题

86

帖子

86

积分

注册会员

Rank: 2

积分
86
发表于 2006-9-3 22:00:00 | 显示全部楼层

Re: 编写俄罗斯方块 几个代码研究

代码二:

sf_200693215950.rar

202.08 KB, 下载次数:

14

主题

86

帖子

86

积分

注册会员

Rank: 2

积分
86
发表于 2006-9-3 22:05:00 | 显示全部楼层

Re: 编写俄罗斯方块 几个代码研究

代码三

sf_20069322516.rar

58.1 KB, 下载次数:

14

主题

86

帖子

86

积分

注册会员

Rank: 2

积分
86
发表于 2006-9-3 22:10:00 | 显示全部楼层

Re: 编写俄罗斯方块 几个代码研究

代码四:

sf_20069322108.zip

70.58 KB, 下载次数:

14

主题

86

帖子

86

积分

注册会员

Rank: 2

积分
86
发表于 2006-9-3 22:12:00 | 显示全部楼层

Re: 编写俄罗斯方块 几个代码研究

代码:

sf_200693221217.zip

16.09 KB, 下载次数:

14

主题

86

帖子

86

积分

注册会员

Rank: 2

积分
86
发表于 2006-9-3 22:32:00 | 显示全部楼层

Re: 编写俄罗斯方块 几个代码研究

VB.NET之父的个人主页
http://www.panopticoncentral.net/

30

主题

357

帖子

388

积分

中级会员

Rank: 3Rank: 3

积分
388
QQ
发表于 2006-9-3 23:24:00 | 显示全部楼层

Re:编写俄罗斯方块 几个代码研究

第一个代码感觉最好,第四个代码也很不错,其余两个尤其第三个,不知道说什么好。。。
另,D3D不难,设计才真的难趴下了!

89

主题

4036

帖子

4132

积分

论坛元老

Rank: 8Rank: 8

积分
4132
发表于 2006-9-4 00:19:00 | 显示全部楼层

Re:编写俄罗斯方块 几个代码研究

编程绝对是门艺术。
写出优雅的代码,绝对是门艺术。
任何语言都有它优雅的一面。 C的简约。Pascal的严谨。Basic的简单。

程序员应该养成良好的习惯。 尤其是初学者,更应该注重这方面修养。而不是着急的写出一堆令人发指的代码。

设计层面上面也一样。  要学会不停的BS自己的设计。

0

主题

25

帖子

25

积分

注册会员

Rank: 2

积分
25
QQ
发表于 2006-9-4 03:21:00 | 显示全部楼层

Re:编写俄罗斯方块 几个代码研究

楼主,我最近也准备从俄罗斯方块写起。。。呵呵

接触VC6年了,还没做出过什么东西呢,寒啊。。。

从头来,有空切磋切磋。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-25 07:26

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表