如何用vb制作俄罗斯方块游戏?很简单。
我们选择开发俄罗斯方块的原因是无可争议的。俄罗斯方块是史上最伟大的游戏之一。在所有已经发售的游戏中,俄罗斯方块被认为是唯一一款真正能吸引广泛人群的游戏。谁能说得清,到目前为止,人们在这个游戏上花了多少数万小时?也许这段时间本可以花在更有成效的活动上。一些评论家可能会声称俄罗斯方块比过去二十年里出现的任何东西都更浪费人们的时间。至于我们,我们会很高兴地提名它为GameSpot评选的历史上最伟大的游戏之一。
为了怀念经典,为大多数电脑用户找到一种工作之余放松娱乐的方式,我们小组开始用VB语言开发一款经典的俄罗斯方块游戏。
项目概述
2.1项目名称
俄罗斯方块游戏
2.2设计平台
VB的全称是Visual Basic,是以Basic为基本语言的可视化编程工具。
Vb是微软公司在1991退出的windows应用开发工具。视觉的意思是“可视化”。刚推出的时候还是有一些缺陷,功能相对较少。但是经过多年的开发和研究。最近微软发布了VB6.0。
VB6.0的运行环境:硬件,要求486以上处理器,16MB以上内存,50MB以上硬盘,光驱,鼠标。软件:需要windows 95或以上版本。
2.3编程思路
游戏是用来娱乐大家的,所以要能在使用的过程中给大家带来快乐,消除大家的疲劳。所以我们在游戏中加入了精美的场景和优美的音乐,并设置了通关升级的功能,激发大家的娱乐激情。
从游戏的基本玩法出发,主要是俄罗斯方块的形状和旋转,我们在设计中在一个画框中构造了一个4*4的网格块,组合成一个新的形状,每四个块可以连接在一起构造一个形状,所以我们一直设计了7个形状,每个形状可以通过旋转变成2到4个形状。random函数用于将形状以表格的形式显示出来,以供用户提前查看参考,然后将显示的形状复制到游戏表格中进行放置。在游戏形式中,用户可以使用键盘的方向键来控制方块的移动,然后使用递归语句来判断每一行。如果一行中的方块已满,则该行中的方块被消除,并且其上的方块自由下落,其中方块的向下速度由时钟控制来控制。在游戏中,用户还可以使用down键加快下落速度,定义一个变量,记录消除的函数,最后得到用户的分数,用if语句判断分数,当分数达到一定程度时升级到下一级。
俄罗斯方块游戏设计的主要步骤有以下10个方面:
(1)游戏界面的设计。
(2)俄罗斯方块的建模。
(3)俄罗斯方块的旋转。
(4)俄罗斯方块的移动(包括左、右、下)。
(5)俄罗斯方块的自动消除功能。
(6)自由选择游戏关卡。
(7)自由选择游戏速度。
(8)游戏分数的计算。
(9)游戏菜单选项的设计和功能实现。
(10)游戏的背景音乐和特效。
2.4控件和主要对象的使用
我们在设计过程中主要用到的控件有:命令控件、图像控件、图片控件、标签控件、定时器控件、文本控件、windows media player控件等等。
2.5实现的主要功能
我们开发的俄罗斯方块游戏主要实现了以下功能:
1.您可以在图形框中灵活控制框的移动。
2.盒子在游戏过程中可以自由旋转。
3.当一行的方块满了之后,这一行的方块会自动消去,然后上面的方块全部下移,可以支持连续的行消去。
4.游戏前可以选择游戏的速度和游戏的等级。游戏的速度是方块的下落速度,游戏的等级是初始游戏时在基层随机产生一定数量的不规则方块。生成的行数由你自己选择,每一行至少生成五个以上的不规则方块,增加了游戏的难度,对游戏高手来说无疑不是新的挑战。
5.游戏的分数支持积分,根据公式:
分数=原始分数+100 *(同时淘汰2行-1)
这样你同时消灭的线越多,你的分数就越高,游戏分数达到一定级别就可以自动升级。这个升级是指速度升级。
6.游戏提供了优美的场景和优美的音乐,带给你无限的激情。
2.6开发者
由于本次课程设计选题过于复杂,时间紧迫,导师建议与学生分工完成。我们的组员包括组长孙雷洲和副组长邹海兴。这个游戏是我们两个人开发的。
主体
3.1游戏设计的具体实现
在我们两个人的共同努力下,这个设计终于圆满完成了。由于时间比较紧,可能在设计上有些考虑不周,但其功能已经能够满足大部分用户的需求。相信假以时日,一定会做出更经典、更完美的俄罗斯方块游戏。下面我们将向您展示如何实现每一步。
3.1.1游戏界面设计及背景音乐和特效实现
俄罗斯方块游戏主要由两个界面组成,登录界面和开始游戏界面。在登录界面中,我们首先可以看到圣诞夜梅花飘动的场景,梅花从窗体顶部做出函数曲线的下落动作。表单中定义了一个图像控件组,一般定义梅花x坐标变量,y坐标变量,步长x变量,步长y变量,幅度变量的动态数组。然后可以在form_load中定义球杆数,利用随机函数生成球杆的随机坐标、步数和振幅。图像控件在运行的时候会调用球杆的画面,图像控件的下降速度可以通过时钟控件来控制,可以自由调节。梅花在根据雪(I)做垂直向前向后的函数轨迹。Left = XP (I)+am(i) * SIN (DX (I))函数。因此,我们可以看到一幅梅花在空中自由飞舞的画面。
背景图片是photoshop软件处理过的漂亮图案。原图中的动画效果都是图像控件做的,点击进入游戏的按钮是标签控件实现的。因为图像控件没有前置和后置的功能,不能体现雪景的完整性,所以这些图案都放在背景上,不影响雪花飘落的效果,点击图片就可以进入游戏界面。
游戏的背景音乐由代码调用系统播放器Windows Player播放。由于这个设计主要是针对如何设计游戏,所以这里不介绍播放背景音乐的功能。
3.1.2俄罗斯方块建模
我相信我所有的朋友都玩过俄罗斯方块,对游戏和俄罗斯方块的形状都很熟悉。在这个游戏中,我们只选择最基本的7个形状,包括长条形、方形、正S形、反S形、正7形、反7形和T形。如果有必要,我们可以添加更多的形状。将游戏界面的游戏区的画面划分为10*20个小块,每个小块放置一个命令控件,预览区的画面按照相同的比例划分为4*4个小块,同样由命令控件组成。我们可以把预览区域的图框看作是从游戏区域的图框中选取的一部分,游戏区域的小块数和待观看区域数如下:
0 1 2 3 4 5 6 7 8 9
… … … … … … … … … …
… … … … … … … … … …
90 91 92 93 94 95 96 97 98 99
3 4 5 6
13 14 15 16
23 24 25 26
33 34 35 36
游戏区域编号:要查看的区域编号。
使用选择列出正方形的七种形状,例如长形状的设计。在浏览区,有四个正方形,3.4.5.6和5.15.25.35,形成两个形状,数组为:
m(0)= 3:m(1)= 4:m(2)= 5:m(3)= 6:情境2 = 0
m(0)= 5:m(1)= 15:m(2)= 25:m(3)= 35:情境2 = 1
将其形状编号为0和1,方便以后调用。其他正方形也以同样的方式建模。
3.1.3俄罗斯方块的旋转
俄罗斯方块的旋转主要是通过变换方块的位置来获得的。比如上面的例子,长的形状有两种样式,整个形状的旋转是根据小方块的数量变化来实现的,比如:
如果n(0)-18 & gt;= 2和n(3)+9 & lt;= 198然后
如果cmdfang(n(0) - 18)。Visible = False和_
cmdfang(n(1) - 9)。Visible = False和_
cmdfang(n(3) + 9)。可见=假
隐藏方0
n(0) = n(0) - 18
n(1) = n(1) - 9
n(3) = n(3) + 9
秀芳0
情况= 1
如果…就会结束
如果…就会结束
正方形旋转时的形状有一个公式。当然首先要判断是否符合轮换的要求。上面是一根长杆从水平到垂直的旋转。我们围绕其形状的第三个小正方形n(3)旋转。这样,在移动开始时,长杆至少必须移动到第三行,才能从水平变为垂直。游戏区域图形框中第三行的第一个方块的数量是20。同样,矩形框掉到底部也有限制。如果条带落到最后一行,它将不能从水平变为垂直。
3.1.4如何实现方块的移动,自动消除满排方块?
我们的俄罗斯方块游戏主要是利用命令控件的visible属性来完成效果。实际上,游戏区的图形框可以看作是由许多小命令框组成的。盒子移动的过程就是在建模中显示或隐藏盒子。就像现在的霓虹效果一样,时钟控件控制着可视属性的变化速度,上一层的消失和下一层的显示。这样就可以从视觉效果上看出箱子的下落运动效果。
在下落的过程中,箱子会自动判断每排箱子的可视属性。如果都为真,这一排小方框的所有可见属性都会改为false。然后将上面的小方框下移,用for语句进行循环判断,这样这种情况下的所有行都改成小方框的可见属性。当同时有多行时,采用递归调用实现连续消行。具体程序代码如下:
对于i = 190到10的步长-10
如果cmdfang(i)。Visible = True和_
cmdfang(i + 1)。Visible = True和_
cmdfang(i + 2)。Visible = True和_
cmdfang(i + 3)。Visible = True和_
cmdfang(i + 4)。Visible = True和_
cmdfang(i + 5)。Visible = True和_
cmdfang(i + 6)。Visible = True和_
cmdfang(i + 7)。Visible = True和_
cmdfang(i + 8)。Visible = True和_
cmdfang(i + 9)。可见=真
对于j = i + 4至I步-1
t = 1
cmdfang(j)。可见=假
cmdfang(2 * i + 9 - j)。可见=假
对于k = 1到4000
多项活动
然后
t = 0
然后
linenum = linenum + 1
对于j = i - 1到0步- 1
如果cmdfang(j)。可见=真
cmdfang(j)。可见=假
cmdfang(j + 10)。可见=真
如果…就会结束
然后
为了消除几行代码,这里使用了递归调用。
如果…就会结束
然后
3.1.5自由选择游戏速度和游戏等级。
游戏速度的自由选择无非是改变时钟控制的频率。我们在菜单中增加了选择速度的功能,并增加了测试功能,隐藏了要查看的窗口中的正方形形状,增加了玩家的难度。如果不想接受测试,可以点击显示恢复到原来的状态。
游戏关卡的自由选择是让用户选择游戏的开始,游戏区域底部出现一定数量的随机方块,这也给玩家增加了难度。功能代码如下:
对于i = 19至20 - Val(txthard。文本)步骤-1
对于j = i * 10至i * 10 + 9
如果Rnd & gt= 0.5则cmdfang(j)。可见=真
然后
然后
可以根据自己选择的难度系数在底部每条线上随机生成一半以上(即五个以上)的小方块,适合喜欢高难度的玩家。
3.1.6游戏分数计算和游戏菜单编辑
游戏分数的计算主要是根据淘汰的线数。当然,同时淘汰的线数不一样,各线得分也不一样。如果每次消除的行数为1,则最终得分为100。如果同时淘汰两条线,最后得分300。如果同时消灭三条线,得分是700,同时消灭四条线,得分是65430。
游戏的编辑器,读者可以参考下面的功能介绍。
3.2游戏功能介绍
文件-开始:开始游戏。
继续:继续游戏。
暂停:暂时停止游戏,点击继续可以继续游戏。
退出:退出游戏。
设置-选择游戏级别。
选择游戏速度。
测试显示:显示要查看的框。
隐藏:隐藏要查看的框。
帮助-操作提示、版本信息和作者信息。
用户界面如下所示:
图-登陆界面图-游戏界面
图-菜单编辑界面图-游戏帮助界面
相关说明
经过两周多的设计和开发,俄罗斯方块游戏获得了成功。其功能基本满足用户需求,可以完成游戏控制、方块变换、图层消除等功能。并提供游戏设定,对于一些技术优秀的玩家,可以调整游戏等级和速度,让玩家充分发挥竞技游戏的特点,不断挑战自我和极限。
4.1游戏设计缺陷
但由于课程设计时间较短,游戏仍有很多不尽如人意的地方,比如方格种类太少,退出游戏、进度不存储等问题较多。这些东西都需要进一步完善。我们还可以改变游戏中的背景音乐,以适应不同的玩家。我们可以在每个关卡为玩家播放一段flash,吸引玩家挑战极限,不断提高兴趣。相信在未来的制作过程中,我们会给大家带来更多更新功能的游戏。
4.2VB和C语言的区别
我们的小游戏也可以用C语言实现,编程上不如VB语言方便实用。C语言和VB语言有很多相似之处。虽然语法上有些区别,但是编程思路是完全一样的。VB可以实现很多C#做不到的功能,比如When语句、可选参数、局部静态变量、访问对象实例的静态方法、处理绑定事件、On错误处理异常、对象直接后处理等。VB和C#语言编译同样的CIL,但是为什么VB支持很多有趣的特性呢?让我们一起探索。
4.21局部静态变量
VB支持用Static关键字声明局部变量,这样变量的值可以在过程结束时保持不变:
公共子测试1()
整数形式的静态I
I += 1 '实现了一个过程调用计数器。
末端接头
我们实现了一个简单的进程计数器。每次调用Test时,计数器的值都会增加1。事实上,有很多情况下,我们希望保留变量的值。C#的静态不能在进程内部使用。因此,要实现进程计数器,我们必须声明一个类级别的变量。这个明显不如VB。因为没有办法阻止其他进程修改计数器变量。这与对象封装是一样的。应该是一个方法的局部变量,现在却被我强行分离出来,这显然是一个糟糕的设计。那么VB如何生成局部静态变量呢?反汇编上面的代码,我们可以清楚的看到,在VB生成的CIL中,I并不是以局部变量的形式出现,而是以类字段的形式出现:。字段私有特殊名称int 32 $ static $ test 1 $ 2001 $ I。
换句话说,我被重命名为一个类的字段,但它被标记为specialname。无法在代码中访问$ static $ test 1 $ 2001 $ I,因为它不是有效的标识符。但在IL中,这个变量加1的代码和一般的class字段完全一样,都是通过ldfld加载的。我觉得这个方法很巧妙,把一个静态变量变成了一个生命周期相同的类字段,但是编译器控制了访问权限,把它变成了局部变量。同时也解释了为什么VB使用两个不同的关键字来声明静态变量——static和Shared。因为局部静态变量的本质是一个类的字段,所以它和真正的局部变量还是有区别的。例如,在多线程条件下,访问局部静态变量与访问字段是一样的。
把手和开口
除了用C#的方式处理事件响应,VB还有一个继承自VB5的独特的事件处理方法——WithEvents。
我喜欢称这种事件处理方法为静态事件处理。写方法响应事件时,已经决定了方法响应哪个事件,而C#在代码中绑定事件。VB中的WithEvents静态方法非常有用,可以显著增强代码的可读性,同时使VB.net中的事件处理非常方便,不像C#那样要在不离开窗体设计器的情况下手动绑定事件。
类型转换运算符
在Visual Basic 2005中会增加一个新的运算符——try cast,相当于C#的as运算符。我一直希望VB能有这样一个运算符。目前VB的类型转换运算符主要有CType和DirectCast。它们的用法几乎一样。我详细比较了这两个运营商,得出了以下结论:
1.当转换为引用类型时,它们之间没有区别。它们都直接调用castclass指令,除非类型转换运算符CType重载。DirectCast运算符不能重载。
2.转换为值类型时,CType会调用VB指定的类型转换函数(如果有的话),比如将String转换为Int32时,会自动调用。
4.2.4默认属性和属性参数
在最初的VB6中,有一个奇特的函数——默认属性。在VB6中,对象的名称可以直接表示对象的默认属性。
4.2.5可选参数和按名称传递
VB从4.0开始支持“可选参数”功能。也就是说,函数或子程序的一些参数是可选的,不需要输入就可以调用。事实上,从1.0开始,VB就有了一些带可选参数的函数,但直到4.0才允许用户自己开发这样的进程。在VB4中,可选参数可以没有默认值,而在VB中,如果使用可选参数,则必须有默认值。调用时,VB自动读取。param部分,如果发现省略了该参数,则显式地将它传递给过程。这部分完全由编译器处理,没有性能损失,和手动传递所有参数完全一样。至于按名字传递,VB会自动调整参数的顺序,结果和传统的传递方式没有区别。这说明我们可以放心使用这种便利。而且如果把一个有可选参数的进程带进C#里,最多也就变成一个可选参数,不会引起其他任何麻烦。
PS。很多COM组件使用默认参数,有些进程的参数表很长,在VB中可以轻松处理,而在C#中,经常让开发者传参数吐血。
4.2.6经过比较,可以得出以下结论:
1.现在的主流编程语言都不简单,如果你想学习掌握。
2.2的门槛。VB比较低级,编程思路容易接受。
3.学C不是短时间就能有成果的。
根据用户调查,69%的候选人认为VB更容易被接受。
表示感谢/感激
在这次课程设计中,我从导师牛荣和李鹏那里学到了很多东西。老师认真负责的工作态度,严谨的学术精神,深厚的理论水平,让我受益匪浅。他在理论和实践上都给了我很大的帮助,让我提高了很多。这对我以后的工作和学习有很大的帮助。感谢他耐心的指导。
此外,在游戏开发过程中,花先生和杜奕君先生也给予了我们很大的帮助,帮助解决了很多困难,使游戏得以及时开发。所有的学生也给了我很多帮助。在这里,我一起表达我的感受。
参考资料:
[1] Vual基础程序设计教程作者:龚培增,,杨志强高等教育出版社。
[2] Visual Basic 6.0程序设计作者:,,白清华大学出版社。
[3]VB6编程80例作者:唐开军,唐慧丽山东电子音像出版社
[4]Vsual基础示例教程作者:艺鹭科学出版社
[5] 50个经典虚拟现实基础范例作者:赵新生,康慧娟,刘科学出版社。