您好,欢迎访问三七文档
俄罗斯方块游戏设计文档姓名:祁竹欣班级:10381目录1.前言(游戏体验)....................................................................2.功能描述....................................................................................3.总体设计....................................................................................3.1功能模块设计.....................................................................3.1.1游戏执行主流程..........................................................3.1.2游戏方块预览...............................................................3.1.3游戏方块控制...............................................................3.1.4游戏显示更新...............................................................3.1.5游戏速度分数更新......................................................3.1.6游戏帮助.......................................................................3.2函数功能描述.......................................................................3.3游戏规则..............................................................................3.4操作方法..............................................................................4.程序实现..................................................................................4.1源码分析......................................................................4.1.1初始化界面......................................................4.2运行结果......................................................................4.2.1游戏初始状态.....................................................4.2.2游戏进行状态.....................................................5.开发环境.................................................................................5.1硬件环境...................................................................5.2软件环境....................................................................6.结论............................................................................................7.代码附录...................................................................................1.前言俄罗斯方块是一款风靡全球的掌上游戏机和PC机游戏,它造成的轰动与创造的经济价值可以说是游戏史上的一件大事。它由俄罗斯人阿列克谢~帕基特诺夫在1984年6月利用空闲时间所编写的游戏程序,故得此名。俄罗斯方块的基本规则是移动、旋转和摆放游戏自动输出的各种方块,使之排列成完整的一行或多行并且消除得分。它看似简单却变化无穷,俄罗斯方块上手极其简单,但是要熟练地掌握其中的操作与摆放技巧,难度却不低。作为家喻户晓老少皆宜的大众游戏,其普及程度可以说是史上任何一款游戏都无法相比的。相信大多数人都还记得为它痴迷得茶不思饭不想的那个俄罗斯方块的时代。由于俄罗斯方块具有的教学性、动态性与知名度,也经常拿来作为游戏程序设计的练习题材。用C语言来编写俄罗斯方块这个游戏有较大优势:C语言具有各种各样的数据类型,并引入了指针概念,使得程序效率更高;C语言还包含很广泛的运算符;另外C语言具有强大的图形功能,支持多种显示器和驱动器,而且计算功能、逻辑判断能力也比较强大。2.功能描述如图2.1所示,本游戏主要实现以下几种功能:俄罗斯方块游戏图2.1俄罗斯方块游戏功能描述图游戏方块控制功能游戏方块预览功能游戏显示更新功能游戏速度更新功能游戏帮助功能(1)游戏方块预览功能。在游戏过程中,当在游戏底板中出现一个游戏方块时,必须在游戏方块预览区域中出现下一个游戏方块,这样有利于游戏玩家控制游戏的策略。由于在此游戏中存在19种不同的游戏方块,所以在游戏方块预览区域中需要显示随即生成的游戏方块。(2)游戏方块控制功能。通过各种条件的判断,实现对游戏方块的左移、右移、快速下移、自由下落、旋转功能,以及行满消除行的功能。(3)游戏显示更新功能。当游戏方块左右移动、下落、旋转时,要清除先前的游戏方块,用新坐标重绘游戏方块。当消除满行时,要重绘游戏底板的当前状态。(4)游戏速度分数更新功能。在游戏玩家进行游戏过程中,需要按照一定的游戏规则给玩家计算游戏分数。(5)游戏帮助功能。玩家进入游戏后,将有对本游戏如何操作的友情提示。3.总体设计3.1功能模块设计3.1.1游戏执行主流程本俄罗斯方块游戏执行主流程图3.1所示。在判断键值时,有左移VK_LEFT、右移VK_RIGHT、下移VK_DOWN、变形转换VK_UP、退出VK_ESC键值的判断。3.1.2游戏方块预览新游戏方块将在如图3.2所示的4*4的正方形中预览。使用随机数rand()来产生1~19之间的游戏方块的编号,并作为预览的方块编号。其中的正方形小方块的大小为BSIZE*BSIZE。BSIZE为设定的像素大小。图3.2游戏方块预览图3.1.3游戏方块控制这是此游戏开发的重点和难点部分。下面分别较少左移、右移、下移、旋转及满行判断的实现。左移的实现过程如下:(1)判断在当前的游戏底板中能否左移。这一判断必须满足如下两个条件:游戏方块整体左移一位后,游戏方块不能超越游戏底板的左边线,否则越界;并且在游戏方块有值(值为1)的位置,游戏底板必须是没有被占用的(占用时,值为1)。若满足这两个条件,则执行下面的左移动作。否则不执行左移动作。(2)清除左移前的游戏方块。(3)在左移一位的位置,重新显示此游戏方块。右移的实现过程如下:(1)判断在当前游戏底板中能否右移。这一判断必须满足如下两个条件:游戏方块整体右移一位后,游戏方块不能超越底板的右边线,否则越界;并且在游戏方块有值(值为1)的位置,游戏底板必须是没有被占用的(占用时,值为1)。若满足这两个条件,则执行下面的右移动作。否则不只执行右移动作。(2)清除右移前的游戏方块。(3)在右移一位的位置,重新显示此游戏方块。下移的实现过程如下:(1)判断在当前游戏底板中能否下移。这一判断必须满足如下两个条件:游戏方块整体下移一位后,游戏方块不能超越游戏底板的底边线,否则越界;并且在游戏方块有值(值为1)的位置,游戏底板必须是没有被占用的(占用时,值为1)。若满足这两个条件,则执行下面的下移动作。否则,将flag_newbox标志置1,主循环中会判断此标志,若为1,则会生成下一个游戏方块,并更新预览游戏方块。(2)清除下移前的游戏方块。(3)在下移一位的位置,重新显示此游戏方块。旋转的实现过程如下:(1)判断在当前游戏底板中能否旋转。这一判断必须满足如下条件:游戏方块整体旋转后,游戏方块不能超越游戏底板的左边线、右边线和底边线,否则越界;并且在游戏方块有值(值为1)的位置,游戏底板必须是没有被占用的(占用时,值为1)。若满足这些条件,则执行下面的旋转动作。否则不只执行旋转动作。(2)清除旋转前的游戏方块。(3)在游戏方块显示区域(4*4)不变的位置,利用保存当前游戏方块的数据结构中的next值作为旋转后形成的新游戏方块的编号,并重新显示这个编号的游戏方块。当生成新的游戏方块前,执行行满的检查,判断行满的过程为:一次从下到上扫描游戏底板中的各行,若某行中1的个数等于游戏底板水平方向上的小方块的个数,则表示此行是满的。找到满行后,立即将游戏底板中的数据往下顺移一行,直到游戏底板逐行扫描完毕。3.1.4游戏显示更新当游戏方块左右移动、下落、旋转时,要清除先前的游戏方块用新坐标重新绘游戏方块。当消除满行时,要重绘游戏底板的当前状态。清除方块的过程为:用先画轮廓再填充的方式,使用背景色填充小方块,然后使用前景色画一个游戏底板中的小方块。循环此过程,变化当前坐标,填充及画出共16个这样的小方块。这样在游戏底板中,清除了此游戏方块。3.1.5游戏速度分数更新当判断出一行满时,score变量一固定值(如10),可以把等级level看做是速度speed,因为速度speed是根据计分score值不断上升的,所以我们定义level=speed==score/speed_step,其中speed_step是每升一级所需要的分数。方块下落速度加快,这是不断修改了定时计数器变量TimerCounter判断条件的结果。速度越快,时间中断的间隔就越短。3.1.6游戏帮助实现比较简单,使用outtextxy()函数实现。3.2函数功能描述(1)newtimer()函数原型:voidinterruptnewtimer(void)Newtimer()函数用于为新的时钟中断处理函数。(2)SetTimer()函数原型:voidSetTimer(voidinterrupt(*IntProc)(void))SetTimer()函数用于设置新的时钟中断处理过程。(3)KillTimer()函数原型:voidKillTimer()KillTimer()函数用于恢复原有的时钟中断处理过程。(4)Initialize()函数原型:voidinitialize(intx,inty,intm,intn)Initialize()函数用于初始化界面,具体为在传人参数x,y指明位置上面m行n列小方块,并显示积分、等级、帮助及预览游戏方块等。(5)DelFullRow()函数原型:intDelFullRow(inty)DelFullRow()函数用于处理删除一满行的情况。Y指明具体哪一行为满行。(6)setFullRow()函数原型:voidsetFullRow(intt_boardy)setFullRow()函数用于找到满行,并调用DelFullRow()函数来处理满行。t_boardy为在游戏底板中的垂直方向的坐标值。(7)MkNextBox()函数原型:intMkNextBox(in
本文标题:俄罗斯方块设计文档
链接地址:https://www.777doc.com/doc-2643686 .html