一、课程设计的目的与要求 (2)1.1、俄罗斯方块的要求 (2)1.2、俄罗斯方块设计的目的 (3)二、题目分析 (4)2.1、概要设计 (4)2.2、详细设计 (4)游戏区模块的设计 (5)控制区模块的设计 (5)三、设计思路 (6)3.1、系统流程的总设计 (6)3.2、游戏区模块的设计 (7)3.2.1、Bitblt函数参数的意义与用法 (7)3.2.2、俄罗斯方块的旋转 (8)3.2.3、如何实现方自动消除满行的方块 (9)3.2.4、随机从 7 个方块中选择一个 (10)3.2.5、设置每个模块的测试计 (11)3.3、整体游戏程序的结构设计 (11)3.4、程序设计 (13)四、调试过程 (14)4.1、设计游戏界面 (14)4.2、完善与改善游戏界面 (15)五、运行结果 (18)六、课程设计总结 (20)附录 (22)一、课程设计的目的与要求1.1、俄罗斯方块的要求俄罗斯方块的基本规则是移动、旋转和摆放游戏自动输出的各种方块,使之排列成完整的一行或多行并且消除得分,俄罗斯方块游戏是一款适合大众的游戏软件,它适合不同年龄的人玩。
本软件要实现的功能如下:(1)游戏区:玩家可以在游戏区中堆积方块,并能够在游戏过程中随时了解得分情况。
(2)游戏控制:玩家可以通过游戏控制功能来选择开始新的一局游戏,暂停或退出游戏。
(3)级别设置:玩家可以根据自己的需要自行设定游戏的开始级别,级别越高,游戏的速度越快,难度越大。
游戏规则如下:(1)电脑随机产生4个小方块组成的不同形状的游戏块,从上往下降落。
(2)游戏面板的宽度为12(以小方块的宽度为单位),高度为22,当一行被12个小方块填满时,此行便会被自动消除。
(3)利用键盘上的左右箭头键可以控制游戏块的左移与右移。
(4)利用键盘上的向上箭头键可以控制游戏块的旋转。
(5)利用键盘上的向下箭头键可以控制游戏块的快速下落。
(6)当游戏块无法下落时,游戏结束。
(7)在屏幕上可以显示将出现的下一个游戏块。
1.2、俄罗斯方块设计的目的无可争议,《俄罗斯方块》是有史以来最伟大的游戏之一。
它是永恒的娱乐经典,但它实际上又和那些传统的经典娱乐方式不同,因为它的本质是电子化的,所以它的确属于现代产物。
《俄罗斯方块》举世闻名的游戏性,在该游戏新鲜出炉时就显得非常直观。
某些与坠落的玩具碎片和它们的形状有关的东西,使得哪怕新手也会很自然地企图把它们排列起来,并加以适当组合,就好似《俄罗斯方块》触动了我们某些内在的感官,使得哪怕是我们当中最杂乱无章的人也要把事情整理妥当。
在曾经发布过的所有游戏中,《俄罗斯方块》还被认为是仅有的一个能够真正吸引广泛人群的作品。
某些批评家也许会声称,《俄罗斯方块》要比过去二十年间出现的任何东西都要浪费人们的时间。
至于我们,则要欣然提名它为GameSpot评选出的历史上最伟大游戏之一。
为了怀念经典,也为了能够给大多的计算机用户在工作之余找到一个休闲、娱乐的一个方式,我们小组开始着手用VB语言开发一个经典的俄罗斯方块游戏。
关键字:游戏,模块,多媒体。
二、题目分析2.1、概要设计设计一款游戏,必然少不了流程图,与整个开发的逻辑。
流程图如图1所示:图1 俄罗斯方块的设计流程图2.2、详细设计游戏区模块的设计游戏区的流程设计如图2所示:图2 游戏区模块的设计流程控制区模块的设计游戏区的流程设计如图3所示:图3游戏区模块的设计流程三、设计思路结合游戏区与控制去模板的设计流程,可以得出系统总流程,如图4所示:3.1、系统流程的总设计3.2、游戏区模块的设计游戏区模块总体上划分为三个模块,分别为游戏开始模块、游戏退出模块、帮助模块。
一个游戏必须是要有游戏规则的。
其中的帮助就是教会我的玩法,以及其中的规则3.2.1、Bitblt函数参数的意义与用法函数功能:该函数对指定的源设备环境区域中的像素进行位块(bit_block)转换,以传送到目标设备环境。
函数原型:BOOL BitBlt(HDC hdcDest,int nXDest,int nYDest,int nWidth,int nHeight,HDC hdcSrc,int nXSrc,int nYSrc,DWORD dwRop);参数:dcDest:指向目标设备环境的句柄。
nXDest:指定目标矩形区域左上角的X轴逻辑坐标。
nYDest:指定目标矩形区域左上角的Y轴逻辑坐标。
nWidth:指定源和目标矩形区域的逻辑宽度。
nHeight:指定源和目标矩形区域的逻辑高度。
hdcSrc:指向源设备环境的句柄。
nXSrc:指定源矩形区域左上角的X轴逻辑坐标。
nYSrc:指定源矩形区域左上角的Y轴逻辑坐标。
光栅操作代码:SrcCopy:将源矩形区域直接拷贝到目标矩形区域。
dwRop:指定光栅操作代码。
这些代码将定义源矩形区域的颜色数据,如何与目标矩形区域的颜色数据组合以完成最后的颜色。
3.2.2、俄罗斯方块的旋转俄罗斯方块的旋转主要将方块的位置加以变换得到的,例如上述范例,长条型有两中样式,根据小方块的编号变动来实现整个造型的旋转,比如:If Judge_Rotate ThenintRotate = intRotate + 1Select Case Type_NowCase 1 '长条If intRotate Mod 2 = 1 ThenpicPictureNow.Picture = LoadResPicture(12, 0)picPictureNow.Top = picPictureNow.Top + 3picPictureNow.Left = Adjust_LeftElsepicPictureNow.Picture = LoadResPicture(11, 0)picPictureNow.Top = Adjust_ToppicPictureNow.Left = picPictureNow.Left + 1End If3.2.3、如何实现方自动消除满行的方块我们的这个俄罗斯方块游戏主要是利用command控件的visible属性完成效果的,其实在游戏区图形框可以看成是由许多的command小方块组成,方块运动的过程就是造型里方块显示或者隐藏,就像现在的霓虹灯效果一样,由时钟控件控制visible 属性改变的速度,上一层的消失,下一层的显示,这样,从视觉效果可以看到方块的下落运动效果。
方块在下落的过程中会自动判断每一行方块的visible属性,如果全部为true时,就会将这一行小方块的visible属性全部变成false,在将上面的小方块向下移动,利用for语句进行循环判断,将所有这样情况的行改变小方块visible属性。
当有多行同时出现这样情况时使用递归调用,实现连续消行。
具体程序代码如下:R_Value = picPictureNow.Top + 1 'MinYrx_value = picPictureNow.Top + picPictureNow.Height 'MaxYFor i = rx_value To R_Value Step -1If 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'如果一行已经堆满,则将此行上面的图象全部向下移动一点k = BitBlt(picBackGround.hDC, 0, 20, 200, (i - 1) * 20, picBackGround.hDC, 0, 0, vbSrcCopy)For j = i To 1 Step -1For k = 1 To 10Total(k, j) = Total(k, j - 1)Next kNext ji = i + 1End IfNext i3.2.4、随机从 7 个方块中选择一个使用Randomize函数来进行选择。
用number将Rnd函数的随机数生成器初始化,该随机数生成器给number一个新的种子值。
例如:RandomizeType_Next = Int((7 * Rnd) + 1)Select Case Type_NextCase 1imgPictureNext.Picture = LoadResPicture(11, 0) Case 2imgPictureNext.Picture = LoadResPicture(13, 0) Case 3imgPictureNext.Picture = LoadResPicture(15, 0) Case 4imgPictureNext.Picture = LoadResPicture(19, 0) Case 5imgPictureNext.Picture = LoadResPicture(23, 0) Case 6imgPictureNext.Picture = LoadResPicture(27, 0) Case 7imgPictureNext.Picture = LoadResPicture(29, 0)End Select3.2.5、设置每个模块的测试计在每个模块中的某个控件功能代码编写完成后,需要将他们分别测试,以便及时发现问题,并及时调整问题,在该模块中的所有控件的功能代码都完成之后,需要对它的总体功能进行测试。
如果出现问题,可以在该功能所在的代码区中进行修改,多次测试,直到没有错误为止。
3.3、整体游戏程序的结构设计1.进入游戏窗体——一进入此窗体中,在菜单中有“新游戏”“退出”“键盘”“关于”。
开始游戏了之后用户可一按上下左右键来进行游戏。
在帮助中有“键盘”和“关于”,可以帮助人们了解此游戏的方法与规则。
2模块——主要对空件和要用到的函数进行了定义。
如,BitBlt 函数。
3.相关文件——主要在外部把方块模型进行了绘制,在这里我们使用LoadResPicture( ) 来调用。
1.要实现游戏中各种方块的图形,然后对其进行控制,如翻转、移动。
1)根据游戏规则,游戏块的运动有各种方式,如下降时左右移动和旋转,其中翻转又根据不同的方块有不同的翻转次数,因此必须在程序代码中很好地区分这些情况。
2)定义程序中常用的变量,包括目前方块的坐标,下一个方块的坐标。
Dim t As Integer 't表示c(2)小方块纵坐标Dim l As Integer 'l表示c(2)小方块横坐标Dim tt As Integer 'tt表示cc(2)小方块纵坐标Dim ll As Integer 'll表示cc(2)小方块横坐标,均以方块的左上角坐标来描述方块位置。