vb.net下雪 vbnet doevent( 五 )


3.1.6游戏得分的计算和游戏菜单的编辑
游戏得分的计算主要是根据消除的行数来决定的,当然每一次同时消除的行数不一样,每一行的得分也不一样,如果你每次消除的行数为1 , 则最后得分是100分,如果同时消除2行,则最后得分是300分 , 同时消除3行,得分为700分,同时消除4行,得分为1500分,这由公式:得分 = 原来分数+ 100 * (2 ^ 同时消除的行数-1) 。
游戏的编辑,读者可以参照下面的功能介绍 。
3.2 游戏功能的介绍
文件-------开始:开始游戏 。
继续:继续游戏 。
暂停:暂时停止游戏,点击继续的时候可以继续游戏 。
退出:退出游戏 。
设置-------选择游戏级别 。
选择游戏速度 。
考验-------显示:显示欲览去方块 。
隐藏:隐藏欲览去方块 。
帮助-------操作提示以及版本信息和作者资料 。
用户界面具体如图:
图—登陆界面 图—游戏界面
图—菜单编辑界面 图—游戏帮助界面
有关说明
经过两个多星期的设计和开发,俄罗斯方块游戏已经成功 。其功能基本符合用户需求,能够完成游戏的控制,方块的变换以及消层等功能 。并提供游戏设置,对于一些技术性比较过硬的玩家,可以调游戏级别、以及游戏速度,使得玩家能够充分的发挥竞技游戏的特色,可以不断的挑战自我,挑战极限 。
4.1游戏设计中的不足之处
但是由于课程设计时间较短,所以该游戏还有许多不尽如人意的地方,比如方块类型太少 , 退出游戏不能存储进度等多方面问题 。这些都有待进一步改善,我们在游戏中还可以更换背景音乐,以适合不同的玩家,在每通过一关可以给玩家播放一段flash , 吸引玩家去挑战极限,不断提高玩家的兴趣,相信在以后的制作过程中我们将给大家带来一个更新功能更全面的游戏 。
4.2VB与C语言之间的不同之处
我们这个小游戏也可以用C语言来实现,在程序的编程上没有VB语言方便实用 , C语言和VB语言之间存在很多的共同点,虽然语法方面有点差异 , 但是在编程思路上完全一样 , VB能够实现很多C#不能做到的功能 , 如When语句、Optional参数、局部Static变量、对象实例访问静态方法、Handles绑定事件、On Error处理异常、Object直接后期绑定等等 。VB和C#语言,编译出来的是同样的CIL,但为什么VB支持很多有趣的特性呢 。我们一起来探究一下 。
4.21局部静态变量
VB支持用Static关键字声明局部变量,这样在过程结束的时候可以保持变量的数值:
Public Sub Test1()
Static i As Integer
i += 1 '实现一个过程调用计数器
End Sub
我们实现了一个简单的过程计数器 。每调用一次Test,计数器的数值就增加1 。其实还有很多情况我们希望保持变量的数值 。而C#的static是不能用在过程内部的 。因此要实现过程计数器,我们必须声明一个类级别的变量 。这样做明显不如VB好 。因为无法防止其他过程修改计数器变量 。这就和对象封装一个道理,本来应该是一个方法的局部变量,现在我要被迫把它独立出来,显然是不好的设计 。那么VB是怎么生成局部静态变量的呢?将上述代码返汇编,我们可以清楚地看到在VB生成的CIL中,i不是作为局部变量,而是作为类的Field出现的: .field private specialname int32 $STATIC$Test1$2001$i
也就是说,i被改名作为一个类的字段,但被冠以specialname 。在代码中试图访问$STATIC$Test1$2001$i是不可能的,因为它不是一个有效的标识符 。但是在IL中,将这个变量加一的代码却与一般的类字段完全一样,是通过ldfld加载的 。我觉得这个方法十分聪明 , 把静态变量变成生命周期一样的类字段,但是又由编译器来控制访问的权限,让它成为一个局部变量 。同时也解释了VB为什么要用两个不同的关键字来声明静态变量——Static和Shared 。由于局部静态变量的实质是类的字段,所以它和真正的局部变量还是有所不同的 。比如在多线程条件下,对局部静态变量的访问就和访问字段相同 。

推荐阅读