1、“俄罗斯方块“设计报告 我所选择做的题目是俄罗斯方块。 俄罗斯方块是一种很受欢 迎的电子游戏,在手机,游戏机,电子辞典等中都常见到。自己 从小到大也玩了不少,游戏很经典,但是自己从未想过这个游戏 到底是怎样生成的呢?到底是怎样的程序过程让这个游戏顺利 进行的?出于好奇,我就选择了此题,让自己亲自来解答这个疑 问。 这次在课程设计时选择它是因为这个游戏覆盖了较多 vb 知 识点,如:绘图,键盘事件处理,定时器控件,多模块程序设计, 文本文件的读写等等。当然在设计过程中我遇到了很多困难,即 使如此,我还是在慢慢的摸索着,和同学讨论,问老师让我逐步 解决了一些困难。 在游戏的设计上,我感触颇深。收获
2、也很多。 首先来说说相对较简单的 frmOption 窗体吧。为了增加游戏 模式的多方式使用性, 我增加了诸如所使用按键组合、 旋转方向、 是否提示下一个图像以及快速下滑的距离等功能, 将这四组选项 都放于另一个窗体 frmOption 中并用不同的控件来对应游戏者的 选项,比如将按键组合方式放于框架中并用单选框来切换。当然 这些选项还是需要在主游戏窗体中得以反映, 所以这里需要定义 四个全局变量,整数型变量 qucDownDis 用于表达一次加速下滑 的距离,而逻辑变量 blnrotDir、blnNextShow、blnKey 分别表示 的是旋转方向、是否显示下一个图像、按键组合方式,并在点
3、击 “确定”事件后修改并使用游戏者的选择,如下 Private Sub OKButton_Click() frmMain.blnrotDir = optClockWise.V alue frmMain.blnKey = option3.V alue frmMain.blnNextShow = chkShowNext.V alue frmMain.qucDownDis = V al(Text1) Unload Me End Sub 因为游戏时候显示的界面应为窗体 frmMain,因而使用了菜单编 辑器,增加了“游戏设置”按键用来调出 frmOption 窗体, Private Sub setti
4、ngs_Click() Timer1.Enabled = False Start.Caption = “继 续“ frmOption.Show 1, Me End Sub 这里需要注意的是选项窗体显示时游戏理应进入暂停, 计时器的 Enabled 属性来实现游戏的暂停与进行。 下面说一说主窗体以及主窗体所对应的事件。 俄罗斯方块游戏最主要的灵魂在于绘图事件的正确使用, 以 及对图片框的应用,简单的说,俄罗斯方块游戏的进行就是在图 片框中不停地绘制新图形与去除旧图形。我将游戏的图片框分 20*10 的形式,并用逻辑数组 blnGrid(0 To 19, 0 To 9)来表示 各个方格,当为 Tr
5、ue 时表示这个方格处有图像,反之没有。同 理 blnDir 来表示 4*4 的图片框中的各个方格, 而方块的形状、 颜 色、 方位都有对应的变量如 “intTypeCur、 lngColorCur、 intDirCur、 intDirNext”和“intTypeNew、lngColorNew、intDirNew” ,未来 表示方块移动,这里以大小图片框的左上角的方格均为原点(0, 0) , 依次坐标来表示各个方格位置, 这里使用了intXCur、 intYCur、 intXNext、intYNext 变量来表示变化过程(其中 Next 均对应 Cur 变量的下一个值,也即一起表示了方块下一个
6、状态) 。除了这些 反映绘图情况的变量,我增加了 Got、HighGot 长整型变量用于 记录游戏的积分与最高分, 并用于游戏结束后的记录与游戏开始 时的加载。 在窗体的 Load 过程里,先编写了加载数据的事件,判断 “block.dat”文件的存在与否来显示在新游戏的界面,主要是指 最高分数据,如果没有则使用默认值 If Dir(App.Path & “block.dat“) “ Then Open App.Path & “block.dat“ For Input As 1 Input #1, qucDownDis, blnrotDir, blnNextShow, blnKey, HighGot Close 1 Else qucDownDis = 20 blnrotDir = True blnNextShow = True blnKey = True HighGot = 0 End If txtHigh.Text = HighGot 当然还要在 Load 中提前准备好各个模块数据,来用于随机产生 新模块时候的使用,即我所编写的程序最后部分那些 blnDir 值。 与 Lo