




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、塔里木大学信息工程学院课程设计 第 1 页 前前 言言 visual basic 继承了 basic 语言易学易用的特点,特别适合于初学者学习 windows 系 统编程。随着 21 世纪信息社会的到来,计算机在人们的工作和生活中的深入,要求我们越来 越多地与计算机打交道,为了使用户在繁忙的日程工作中得到放松,于是出现了各种各样的 休闲软件,如聊天工具,游戏等等。于是我们小组着手设计开始一个这样的游戏软件。通过 这学期来 Visual Basic 的学习,我初步掌握了 Visual Basic 语言的最基本的知识,于是在 化希耀张兵等老师的指导下动手用 Visual Basic 编写俄罗斯方块
2、游戏。 无可争议,俄罗斯方块是有史以来最伟大的游戏之一。它是永恒的娱乐经典,但它 实际上又和那些传统的经典娱乐方式不同,因为它的本质是电子化的,所以它的确属于现代 产物。 俄罗斯方块举世闻名的游戏性,在该游戏新鲜出炉时就显得非常直观。某些与坠 落的玩具碎片和它们的形状有关的东西,使得哪怕新手也会很自然地企图把它们排列起来, 并加以适当组合,就好似俄罗斯方块触动了我们某些内在的感官,使得哪怕是我们当中 最杂乱无章的人也要把事情整理妥当。 在曾经发布过的所有游戏中,俄罗斯方块还被认为是仅有的一个能够真正吸引广泛 人群的作品。某些批评家也许会声称,俄罗斯方块要比过去二十年间出现的任何东西都 要浪费人
3、们的时间。至于我们,则要欣然提名它为 GameSpot 评选出的历史上最伟大游戏之 一。 为了怀念经典,也为了能够给大多的计算机用户在工作之余找到一个休闲、娱乐的一个 方式,我们小组开始着手用 VB 语言开发一个经典的俄罗斯方块游戏。 工程概况工程概况 1.1 项目名称 俄罗斯方块游戏 1.2 设计平台 VB 全称 Visual Basic,它是以 Basic 语言作为其基本语言的一种可视化编程工具。 Vb 是 microsoft 公司于 1991 年退出的 windows 应用程序开发工具 visual 意思是“可 视化的” 。在它刚推出来时,自身还存在一些缺陷,功能也相对少一些。但是经过多
4、年的开发 研究。最近 microsoft 公司又推出了 VB6.0 版本 VB6.0 运行环境:硬件,要求 486 以上的处理器、16MB 以上内存,50MB 以上的硬盘,cd- rom 驱动器,鼠标。软件:要求 windows 95 以上版本。 1.3 程序设计思想 游戏是用来给大家娱乐的,所以要能在使用的过程中给大家带来快乐,消除大家的疲劳, 所以我们在游戏中添加了漂亮的场景和动听的音乐,设置了过关升级的功能,激发大家的娱 乐激情。 从游戏的基本玩法出发,主要就是俄罗斯方块的形状和旋转,我们在设计中在一个图片 框中构造了一个 4*4 的网状小块,由这些小块组合成新的形状,每四个小块连接在一
5、起就可 以构造出一种造型,因此我们总共设计了 7 中造型,每种造型又可以通过旋转而变化出 2 到 4 种形状,利用随机函数在一个预览窗体中提前展示形状供用户参考,然后将展示的形状复 塔里木大学信息工程学院课程设计 第 2 页 制到游戏窗体中进行摆放,在游戏窗体中用户就可以使用键盘的方向键来控制方块的运动, 然后利用递归语句对每一行进行判断,如果有某行的方块是满的,则消除这行的方块,并且使 上面的方块自由下落,其中,方块向下的速度是有时钟控件控制的,在游戏中,用户也可以使 用向下键加快下落速度,定义一个变量,对消除的函数进行记录,最后就可以得出用户的分数,用 if 语句对分数判断,达到一定的积分
6、就可以升级到下一个档次。 俄罗斯方块游戏设计的主要步骤为以下 10 个方面: (1)游戏界面的设计。 (2)俄罗斯方块的造型。 (3)俄罗斯方块的旋转。 (4)俄罗斯方块的运动情况(包括向左,向右和向下)。 (5)俄罗斯方块的自动消行功能。 (6)游戏级别的自由选择。 (7)游戏速度的自由选择。 (8)游戏得分的计算。 (9)游戏菜单选项的设计及功能实现。 (10)游戏的背景音乐。 1.4 运用的控件和主要对象 我们在设计过程中主要用到的控件有:command 控件,image 控件,picture 控件,label 控件,timer 控件,text 控件,windows media play
7、er 控件等等。 1.5 主要实现的功能 我们开发的俄罗斯方块游戏,主要实现了以下几种功能: 1.可以灵活控制方块在图形框中运动。 2.游戏过程中方块可以自由旋转。 3.当某一行的方块排列满时,将自动将这一行方块消除,然后将上面所有方块向下移动, 可以支持连续消行。 4.游戏前可以选择游戏的速度和游戏的等级,游戏速度既为方块下落速度,游戏等级为 初始游戏时在基层随机生成一定行数的无规律方块,生成的行数由你来选择,每行至少产生 5 个以上的无规律方块,这样增加了游戏难度,对于游戏高手来说,无疑不是一个新的挑战。 5.游戏的得分支持积分,并且按照公式: 得分 = 原来分数+ 100 * (2 同时
8、消除的行数-1) 这样,你同一时间消除的行数越多,你的得分也就越高,当游戏积分到了一定时 可以自动升级,这个升级指速度升级。 6.游戏中提供了一个漂亮的场景和动听的音乐,给你带来无限激情。 1.6 开发人员与分工 组长李虎同学所做工作如下: (1)俄罗斯方块的旋转。 (2)俄罗斯方块的运动情况。 (3)俄罗斯方块的自动消行功能。 (4)游戏得分的计算。 (5)游戏菜单选项的设计及功能实现。 副组长王志伟同学所做工作如下: 塔里木大学信息工程学院课程设计 第 3 页 (1)游戏界面的设计。 (2)俄罗斯方块的造型。 (3)游戏级别的自由选择。 (4)游戏速度的自由选择。 (5)游戏的背景音乐。
9、正文正文 2.1 游戏设计的具体实现 在我们两个人共同努力下,此次设计,终于能够圆满完成。由于时间的紧促,在设计中, 也许会有一些考虑不周之处,但其功能已经能够满足大多用户的需求,相信假以时日,一定能 做出一个更经典,更完美的俄罗斯方块游戏,下面我们将对每一步的具体如何实现展示给大 家。 2.1.1 游戏界面的设计和背景音乐及特效的实现 俄罗斯方块游戏主要由两个界面构成,登陆界面和开始游戏界面。 游戏的背景音乐是由一段代码调用系统播放器 Windows Player 播放背景音乐,由于本 次设计主要是针对游戏如何设计的,所以在这里就不对播放背景音乐的功能做介绍了。 2.1.2 俄罗斯方块的造型
10、 相信朋友们都玩过俄罗斯方块,对这个游戏的玩法和方块形状都比较熟悉。我们这个游 戏只选择了最基本的 7 中造型,包括长条型,正方型,正 S 型,反 S 型,正 7 型,反 7 型,T 型。 如果需要我们可以添加更多的造型。将游戏界面的游戏区图片框分割成 10*20XX 块,每个小 块放置一个 command 控件,预览区图片框按同样比例分割成 4*4 的小块,同样有 command 控 件构成,我们可以把预览区图片框看作是从游戏区图片框中选取的一个部分,游戏区的小方 块编号和预览区编号如下图: 0123456789 90919293949596979899 游戏区编号 预览区编号 利用 Sel
11、ect 将方块的 7 中造型列出,比如长条型的设计,在欲览区中分别有 和 5 四个方块构成两中形态,用数组为: m(0) = 3: m(1) = 4: m(2) = 5: m(3) = 6: situation2 = 0 m(0) = 5: m(1) = 15: m(2) = 25: m(3) = 35: situation2 = 1 将它的形状编号为 0 和 1,在后面方便调用,其他的方块造型同样的方法。 2.1.3 俄罗斯方块的旋转 俄罗斯方块的旋转主要将方块的位置加以变换得到的,例如上述范例,长条型有两中样 式,根据小方块的编号变动来实现整个造型的旋转,
12、比如: If n(0) - 18 = 2 And n(3) + 9 = 0.5 Then cmdfang(j).Visible = True Next Next 可以根据你选择的难度系数在底层的每一行随机产生超过半数(即 5 个以上)以上的小 方块,这样适合喜欢高难度的玩家。 2.1.6 游戏得分的计算和游戏菜单的编辑 游戏得分的计算主要是根据消除的行数来决定的,当然每一次同时消除的行数不一样, 每一行的得分也不一样,如果你每次消除的行数为 1,则最后得分是 100 分,如果同时消除 2 行,则最后得分是 300 分,同时消除 3 行,得分为 700 分,同时消除 4 行,得分为 1500 分
13、,这由 公式:得分 = 原来分数+ 100 * (2 同时消除的行数-1)。 游戏的编辑,读者可以参照下面的功能介绍。 2.2 游戏功能的介绍 文件 F-开始 F1:开始游戏。 继续 F2:继续游戏。 暂停 F3:暂时停止游戏,点击继续的时候可以继续游戏。 退出 Ctrl+Q:退出游戏。 设置-选择游戏级别。 选择游戏速度。 考验-显示 F5:显示欲览区方块。 隐藏 F6:隐藏欲览区方块。 帮助-操作提示以及版本信息和作者资料。 塔里木大学信息工程学院课程设计 第 6 页 用户界面具体如图: 图登陆界面 图游戏界面 图菜单编辑界面 图游戏帮助界面 有关说明有关说明 经过两个多星期的设计和开发,
14、俄罗斯方块游戏已经成功。其功能基本符合用户需求,能 够完成游戏的控制,方块的变换以及消层等功能。并提供游戏设置,对于一些技术性比较过硬 的玩家,可以调游戏级别、以及游戏速度,使得玩家能够充分的发挥竞技游戏的特色,可以不 断的挑战自我,挑战极限。 3.1 游戏设计中的不足之处 但是由于课程设计时间较短,所以该游戏还有许多不尽如人意的地方,比如方块类型太 少,退出游戏不能存储进度等多方面问题。这些都有待进一步改善,我们在游戏中还可以更 换背景音乐,以适合不同的玩家,在每通过一关可以给玩家播放一段 flash,吸引玩家去挑战 极限,不断提高玩家的兴趣,相信在以后的制作过程中我们将给大家带来一个更新功
15、能更全 塔里木大学信息工程学院课程设计 第 7 页 面的游戏。 3.2 VB 与 C 语言之间的不同之处 我们这个小游戏也可以用 C 语言来实现,在程序的编程上没有 VB 语言方便实用,C 语言 和 VB 语言之间存在很多的共同点,虽然语法方面有点差异,但是在编程思路上完全一样,VB 能够实现很多 C#不能做到的功能,如 When 语句、Optional 参数、局部 Static 变量、对象 实例访问静态方法、Handles 绑定事件、On Error 处理异常、Object 直接后期绑定等等。 VB 和 C#语言,编译出来的是同样的 CIL,但为什么 VB 支持很多有趣的特性呢。我们一起来
16、探究一下。 3.2.1 局部静态变量 VB 支持用 Static 关键字声明局部变量,这样在过程结束的时候可以保持变量的数值: Public Sub Test1() StaticStatic i i AsAs IntegerInteger i += 1 实现一个过程调用计数器 End Sub 我们实现了一个简单的过程计数器。每调用一次 Test,计数器的数值就增加 1。其实还 有很多情况我们希望保持变量的数值。而 C#的 static 是不能用在过程内部的。因此要实 现过程计数器,我们必须声明一个类级别的变量。这样做明显不如 VB 好。因为无法防止其 他过程修改计数器变量。这就和对象封装一个道
17、理,本来应该是一个方法的局部变量,现在 我要被迫把它独立出来,显然是不好的设计。那么 VB 是怎么生成局部静态变量的呢?将上 述代码返汇编,我们可以清楚地看到在 VB 生成的 CIL 中,i 不是作为局部变量,而是作为类 的 Field 出现的: .field private specialname int32 $STATIC$Test1$20XX$i 也就是说,i 被改名作为一个类的字段,但被冠以 specialname。在代码中试图访问 $STATIC$Test1$20XX$i 是不可能的,因为它不是一个有效的标识符。但是在 IL 中,将这个 变量加一的代码却与一般的类字段完全一样,是通过
18、 ldfld 加载的。我觉得这个方法十分聪 明,把静态变量变成生命周期一样的类字段,但是又由编译器来控制访问的权限,让它成为一 个局部变量。同时也解释了 VB 为什么要用两个不同的关键字来声明静态变量Static 和 Shared。由于局部静态变量的实质是类的字段,所以它和真正的局部变量还是有所不同 的。比如在多线程条件下,对局部静态变量的访问就和访问字段相同。 3.2.2 Handles 和 WithEvents VB 除了可以用 C#那样的方法来处理事件响应以外,还有从 VB5 继承下来的独特的事件 处理方式WithEvents。 我喜欢称这种事件处理方式为静态的事件处理,书写响应事件的方
19、法时就已经决定该方 法响应的是哪一个事件,而 C#则是在代码中绑定事件的。VB 中 WithEvents 静态方法是非常 有用的,它可以显著增强代码可读性,同时也让 VB.net 中的事件处理非常方便,不像 C#那样 离开了窗体设计器就必须手工绑定事件。 3.2.3 类型转换运算符 在 Visual Basic 20XX 中将加入一个新的运算符TryCast,相当于 C#的 as 运算符。 我一直希望 VB 有这样一个运算符。VB 目前的类型转换运算符主要有 CType 和 DirectCast。他们的用法几乎一样。我详细比较了一下这两个运算符,得出以下结论: 1.在转换成引用类型时,两者没有
20、什么区别,都是直接调用 castclass 指令,除非重载了 类型转换运算符 CType。DirectCast 运算符是不能重载的。 2.转换成值类型时,CType 会调用 VB 指定的类型转换函数(如果有的话),比如将 String 转换为 Int32 时,就会自动调用。 塔里木大学信息工程学院课程设计 第 8 页 3.2.4 默认属性和属性参数 在原先的 VB6 里,有一项奇特的功能默认属性。在 VB6 中,对象的名称可以直接表 示该对象的默认属性。 3.2.5 可选参数和按名传递 VB 从 4.0 开始支持“可选参数”这一特性。就是说,函数或子程序的参数有些是可选 的,调用的时候可以不输
21、入。其实 VB 从 1.0 开始就有一些函数带有可选参数,只不过到了 4.0 才让用户自己开发这样的过程。在 VB4 里,可选参数可以不带默认值,而在 VB 里,如果使用 可选参数,则必须带有默认值。在调用的时候,VB 若发现参数被省略,则自动读取.param 部 分的默认值,并显式传递给过程。这一部分完全由编译器处理,而且没有任何性能损失,和手 工传递所有参数是完全一样的。至于按名传递,VB 会自动调整参数的顺序,其结果与传统方 式的传递也没有任何的不同。这说明我们可以放心地使用这项便利。而且带有可选参数的 过程拿到 C#中,顶多变成不可选参数,也不会造成什么其他的麻烦。 PS.很多 COM
22、 组件都使用了默认参数,而且有些过程的参数列表非常长,在 VB 里可以轻 松地处理它们,而在 C#中经常让开发者传参数传到吐血。 致谢致谢 在本次课程设计中,我从指导老师化希耀和张兵身上学到了很多东西。老师认真负责的 工作态度,严谨的治学精神和深厚的理论水平都使我收益匪浅。他无论在理论上还是在实践 中,都给与我很大的帮助,使我得到不少的提高这对于我以后的工作和学习都有一种巨大的 帮助,感谢他耐心的辅导。 另外,在游戏开发过程中许多同学也给于我们很大的帮助,帮助解决了不少的难点,使得 游戏能及时开发完成,在此谢谢各位对此次设计的帮助。 参考文献参考文献: : 1龚沛曾,陆慰民,杨志强.Vsual
23、 Basic 程序设计教程.高等教育出版社出版。 2刘新民,蔡琼,白糠生.Vsual Basic 6.0 程序设计.清华大学出版社出版。 3唐凯军,汤惠莉.VB6 编程 80 例上手.山东电子音像出版社。 4卢毅.Vsual Basic 实例教程.科学出版社出版。 5赵欣胜,亢慧娟,刘晟宏.Vsual Basic 经典范例 50 讲.科学出版社出版。 塔里木大学信息工程学院课程设计 第 9 页 附件附件: : Private Sub hidefang(a As Integer) 定义使方块不可见的过程 Select Case a Case 0 a0 使游戏区方块不可见 cmdfang(n(0)
24、.Visible = False cmdfang(n(1).Visible = False cmdfang(n(2).Visible = False cmdfang(n(3).Visible = False Case 1 a1 使预览区方块不可见 cmdfangnext(m(0).Visible = False cmdfangnext(m(1).Visible = False cmdfangnext(m(2).Visible = False cmdfangnext(m(3).Visible = False End Select End Sub Private Sub showfang(a As
25、 Integer) 定义使方块可见的过程 Select Case a Case 0 a0 使游戏区方块可见 cmdfang(n(0).Visible = True cmdfang(n(1).Visible = True cmdfang(n(2).Visible = True cmdfang(n(3).Visible = True Case 1 a1 使预览区方块不可见 cmdfangnext(m(0).Visible = True cmdfangnext(m(1).Visible = True cmdfangnext(m(2).Visible = True cmdfangnext(m(3).V
26、isible = True End Select End Sub Private Sub clearline() 定义消除整行的过程 For i = 190 To 10 Step -10 If cmdfang(i).Visible = True And _ cmdfang(i + 1).Visible = True And _ cmdfang(i + 2).Visible = True And _ cmdfang(i + 3).Visible = True And _ cmdfang(i + 4).Visible = True And _ cmdfang(i + 5).Visible = Tr
27、ue And _ cmdfang(i + 6).Visible = True And _ cmdfang(i + 7).Visible = True And _ cmdfang(i + 8).Visible = True And _ cmdfang(i + 9).Visible = True Then For j = i + 4 To i Step -1 t = 1 cmdfang(j).Visible = False 塔里木大学信息工程学院课程设计 第 10 页 cmdfang(2 * i + 9 - j).Visible = False For k = 1 To 4000 DoEvents
28、 Next t = 0 Next linenum = linenum + 1 For j = i - 1 To 0 Step -1 If cmdfang(j).Visible = True Then cmdfang(j).Visible = False cmdfang(j + 10).Visible = True End If Next clearline 为了实现连消数行,这里使用递归调用 End If Next End Sub Private Function downable() As Boolean 自定义函数,确定方块是否能下降 If n(0) 190 And n(1) 190 An
29、d n(2) 190 And n(3) 190 Then If cmdfang(n(0) + 10).Visible = False And _ cmdfang(n(1) + 10).Visible = False And _ cmdfang(n(2) + 10).Visible = False And _ cmdfang(n(3) + 10).Visible = False Then downable = True Else: downable = False End If Else: downable = False End If End Function Private Function leftable() As Boolean 自定义函数,确定方块是否能左移 If n(0) Mod 10 0 And n(1) Mod 10 0 And n(2) Mod 10 0 And n(3) Mod 10 0Then If cmdfang(n(0) - 1).Visible = False And _ cmdfang(n(1) - 1).Visible = False And _ cmdfang(n(2) - 1).Visible = False And _ cmdfang(n(3) - 1).
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新疆师范大学《实验室安全与法规》2023-2024学年第二学期期末试卷
- 重庆市主城区七校联考2025年高三教学质量检测试题试卷(二)物理试题含解析
- 公共交通运营服务收费标准制度
- 第18课 清朝的边疆治理 教案2024-2025学年七年级历史下册新课标
- 内圆形吊顶施工方案
- 护坡植草施工方案
- 路基修复夜间施工方案
- 工程资料与施工方案
- 汽车隔音施工方案范本
- 2025年搞笑考试面试试题及答案
- 江苏省药品上市许可持有人药品生产质量安全主体责任正面清单、负面清单(2023年版)
- 2024年GINA哮喘防治指南修订解读课件
- 木地板合同范本
- 2024中交二航局分包合同范本
- 2024年社区工作者考试必背1000题题库必背(必刷)
- 教育改革与发展
- 《形体训练》课件-勾绷脚训练
- 医疗器械(耗材)项目投标服务实施投标方案(技术方案)
- 监控系统维护保养方案
- 2023年国家广播电视总局无线电台管理局考试真题及答案
- 房屋修缮工程技术规程 DG-TJ08-207-2008
评论
0/150
提交评论