




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、计算机科学与技术学部面向对象课程设计题 目 俄 罗 斯 方 块 学 部 计算机科学与技术 班 级 计 科 1003班 指 导 教 师 姓 名 学 号 2011年6月摘 要俄罗斯方块上手极其简单,但是要熟练地掌握其中的操作与摆放技巧,难度却不低。作为家喻户晓老少皆宜的大众游戏,其普及程度可以说是史上任何一款游戏都无法相比的。该俄罗斯方块程序采用了面向对象编程语言,我们运用了很少有关计算机程序知识,完成游戏的需求来实了游戏的一些简单的功能,如不同样式的俄罗斯方块的随机产生、俄罗斯方块的键盘操作移动功能、方块满行消行功能、方块到顶游戏结束功能等。该课程设计中详细阐述了程序的设计目标、总体架构及程序的
2、详细设计。俄罗斯方块这款游戏,要通过设计者对界面的调色设置适当,方块下落也要设置合理,因些我们这款游戏置了良好的用户界面设计,实现方块下落时,可通过键盘方向键(上、下、左、右键)对该方块进行向上(变行),向下(加速)、向左、向右移动。随机给出不同的形状(长条形、z字形、田字形、7字形等)下落填充给定的区域,若填满一条便消掉,记分,当达到一定的分数时,过关,一共设置十关,每关方块下落的速度不同,游戏中先结束的一方为本局输家,十关过后,胜出局数多的为赢家,并且用户通过界面可以看到下一个下落的方块和下下一个下落的方块,这样给用户降低了难度。从而让广大朋友越来越喜爱这款游戏。用户启动游戏后,即进入游戏
3、主画面,用户按下start按钮后,就可以开始玩游戏了,当用户想暂停时,再次按一下stop按钮,游戏就暂停了,并给予提示,在暂停的情况下再按stop按钮,游戏继续运行。任何时候按end按钮,游戏就会结束,并且继续开始游戏。由于设计者水平有限,不当之处在所难免,如有好的建议恳请读者提出并加以指正。关键词:俄罗斯方块;交互动态更新;计时器;课程设计任务分配表表1姓名主要任务组 长唐 哲主要功能代码的实现组 员阳 明游戏菜单按扭与代码的连接及报告的书写表2点评评分批阅老师签名相关编程知识的课程设计关键变量定义及作用:int m_gameend=1;/游戏是否结束int level=1;/游戏过了几关了
4、int score=0;/玩游戏中你所得到的分数char m_game_pouse=true;/游戏是否暂停char m_xialuo=true;/初始下落变量int m_sudu=200;/初始计时器时间间隔实现程序相关知识的引用:cbrush brush(crseg);/画刷的应用settimer(1,m_sudu,null);/ 安装计时器backgroundset(pdc);/描绘游戏背景m_nextimage(pdc,m_oldnextpoint,m_nextshape);/画出下一个方块m_nextimage(pdc,m_nextpoint,m_next2shape);/画出下下一
5、个方块m_drawimage(pdc,m_pcurpos,m_curshape);/画出当前操作的方块pdc - textout(310, 120,lis);/画一条竖线pdc-moveto(300,0);/移到某一个点pdc-lineto(300,500);/画出刚才moveto函数指向的那一个点的直线colorref wins=rgb(0,0,0);/背景颜色的设置cpen pen(ps_insideframe,1,line);/画笔的操作cancelrangle(pdc);/判断是否可以消格,是否升级。目 录第1章 前 言11.1简介说明11.1.1 研究背景11.1.2 游戏适合对象及
6、注意事项11.2 设计的目的及工作原理11.2.1工作原理11.2.2设计的目的11.3 设计内容2第2章 游戏功能分析42.1 游戏总体功能分析42.1.1描绘俄罗斯方块功能和方块预览功能42.1.2方块自由下落及判断功能和描绘背景方块堆积状况的功能62.1.3按键操作响应功能和消行加分升级功能82.1.4背景设置和游戏控制功能9第3章 系统测试113.1 程序运行测试113.1.1程序主界面图113.1.2 游戏开始的界面113.1.3游戏暂停的界面123.1.4 游戏停止的界面123.1.5用户过了通关后运行的界面:133.1.6方块到顶不能运行造成游戏结束的界面133.1.7 方块进行
7、变形1432 程序流程图143.2.1游戏开始时流程图153.2.2消格加分升级模块运行流程图16第4章 总结17参考文献19第1章 前 言1.1简介说明1.1.1 研究背景随着社会的发展,人们智慧的需要,现在益智游戏也越来越多。为了满足广人们的需要,我们研发了一款新的俄罗斯方块。俄罗斯方块是最经典的益智休闲游戏之一,这个超级俄罗斯方块是一个演化版本,不同的地方就在于游戏中的方块不是慢慢落下来,而是可以在空间内任意摆放,虽然是小小的变化,在玩法技巧上确大有不同,而且难度也没有因此降低,玩起来别有另一番乐趣。1.1.2 游戏适合对象及注意事项适合于那些青少年、儿童及老人玩耍,对于那些成年人来说,
8、这个游戏太小儿科了,青少年和儿童玩耍可以增长他们的智力,老人玩耍可以使他们远离老人忧郁症及一些老人易得的病症。但值得注意的是,请选择本游戏的广大玩家,请不要对本游戏着迷,要适当的注意休息,对本游戏上瘾有害健康。 1.2 设计的目的及工作原理1.2.1工作原理点击“start”用户就可以看到随机而形成的方块会根据设计速度,用户可以通过对方块进行控制,同是可以按“end”按钮停止,按“stop”按钮,可以进行暂停或开始,并且同时当分值达到设置的分数就可以进入到下一关,如果方块铺满整个界面,游戏结束。1.2.2设计的目的为了人们休闲娱乐的需要,并且人们更加注重那些游戏是否可以益智,并且在人烦恼的时候
9、可以帮助人解除疲劳,这样给了人们一个比较好的放松环境。从而我们从这次课程设计使得课堂教学与实验实践之间关系更为密切,让我们认识到必须重视实践环节,多读程序,多编写程序,多上机实践.进一步培养结构化程序设计的思想,加深对高级语言要素和控制结构的理解,针对面向对象程序设计中的重点和难点内容进行训练,独立完成有一定的工作量的程序设计任务,同时强调好的程序风格。1.3 设计内容俄罗斯方块中具体实现的功能包括:显示当前方块模块、方块预览模块、游戏背景设置模块、消格计分升级模块、计时器模块、按键模块和工具及菜单模块,其中所有功能集成十个主要的函数。显示当前方块模块的主要函数:m_drawimage,方块预
10、览模块的主要函数: m_nextimage,游戏背景设置模块的主要函数:backgroundset,消格计分升级模块的主要函数:ontimer、oninitialupdate,按键模块的主要函数: onkeydown、onkeyup,工具及菜单模块的主要函数: ongameend、ongamepouse、ongamestart及onappabout。当用户启动该程序则会通过使用vc+文件操作函数调用就立即生成一个重绘线程,该线程每隔1s绘制一次屏幕。当然,重绘时有一些优化措施,并不是屏幕上所有的像素都需要重绘,而是有所选择,比如游戏画布上那些已经固定下来的下坠物(下坠物一共有7种,由4个小砖块
11、组成,每种下坠物颜色固定,可以上下左右旋转)就不需重绘。游戏画布是一个commandlistene可以接受用户键盘命令,控制下坠物的左移,右移,下移,旋转动作。整个游戏的流程控制体现在游戏画布函数的backgroundset方法里。backgroundset根据当前的游戏状态,绘制出当时的游戏画面。绘制出游戏背景,单击开始按钮通过调用ongamestart后通过m_drawimage并且绘制出一个方块往下掉,如果到底后,即满足条件就会结束往下掉式,则把下坠物固定下来,同时检查游戏画布上下坠物当前行下面的所有行,看是否需要进行行删除动作,如果需要行删除,则清除游戏地图上被删行的数据,再把被删行绘
12、制成背景色。然后初始化一个新的下坠物,绘制这个新的下坠物。就这样慢慢的累计通过m_nextimage函数来显示下一个掉下来什么方块,如果全部填满则通过这两个ontimer、oninitialupdate函数来消格如果达到一定的分数就可以升级,最多可以升到10级,每升1级方块坠落的速度加快,每1000分可升1级,每消除一行方块可获得100分当你要进行方块向左、向右、向下及变形时通过调用onkeydown、onkeyup这两个函数来达到所要的效果。onkeydown函数采用的是switch语句来判断从键盘上按下的是上、下、左、右键,如果按下的是“上”键表示对该方块进行变形,并且在变形的过程中,当靠
13、近边界地区时,要进行判断,如果是长条时,则要在离边界处的第三个地方才可以进行变形,其他的方块,可以在离边界处的第二个处进行变行;按下的是“下”键表示对该方块加速往下掉;按下的是“左”键表示对该方块是往左边移;但不能移不游戏界面,按下的是“右”键表示是对该方块进行右移,达到你想要的效果。然而onkeyup函数是与onkeydown函数相反,对键盘所输入的数进行释放。在中途要暂停可通ongamepouse来实现,首先判断该游已经开始没,如果开始了,就对暂停有效,否则不运行,暂停是backgroundset执行的时候无需真正执行重绘动作,并对当前方块不再下落悬挂起来,并且给出提示对话框,提醒该游戏已
14、暂停,使整个画面处于不运行状态,直到再按一下“stop”键时,整个游戏界面又开始重新运行。要结束游戏通过调用ongameend来完成,欢迎画面和ongameend画面的绘制相当简单。可分两种情况:一种是全部方块全部堆满时,让backgroundset执行的时候无需真正执行重绘动作。对于游戏处于运行状态的画面的绘制,则需要在下坠物的当前位置,绘制下坠物。在绘制下坠物之前,判断下坠物是否还能下坠,如果能下坠的话,就让它下落一格,再进行绘制,如果下坠物已无法下坠,则判断游戏是否处于“结束”状态,如果是处于“结束”状态的话,则设置游戏状态为“结束”状态,这样画布在下一次重绘时就绘出“结束”的画面.如果
15、游戏不是处于“结束”状态;另外一种是用户自已不想玩游戏,通过“end”按钮来完成,当你下此按扭时,系统的backgroundset函数直接为你初始化背景,回到刚开始启运游戏的状态,当你按下“start”按钮时,游戏进入玩耍状态。如果有一些对游戏不懂的问题可通过帮助来解除你的疑惑该按扭通过调用onappabout函数,解决你要解决的问题,就这样就完成了你对游戏的操作。第2章 游戏功能分析2.1 游戏总体功能分析功能需求:描绘俄罗斯方块功能、描绘背景方块堆积状况的功能、方块预览功能、消行加分升级功能、按键操作响应功能、游戏控制功能,方块自由下落及判断功能;游戏代码模版设计:该游戏主要是通过十个主要
16、的函数来实现系统的所有功能,这十个函数的功能包括显示当前方块模块、方块预览模块、游戏背景设置模块、消格计分升级模块、计时器模块、按键模块和工具及菜单模块。该程序所有的函数都是用面向对象语言实现的2.1.1描绘俄罗斯方块功能和方块预览功能描绘俄罗斯方块功能对应的是显示当前方块模块每一个俄罗斯方块由四个小正方形组成的而每一个小正方形是用画刷画出来的,以下代码就是定义画刷的功能:getclientrect(fc);colorref crseg=rgb(0,250,0);/定义画刷的颜色是嫩绿色cbrush brush(crseg);cbrush *oldbrush=pdc-selectobject(
17、&brush);只要知道小方块的一个坐标点和他的边长(本程序中用size表示,以增强代码可读性),就能将小方块通过画刷把它画出来。要画出俄罗斯方块,就要确定每个小正方形的一个坐标,那么每个方块就要确定4个坐标,一共8个数据,在此程序中,用了一个数据类型为cpoint的一位数组pointarray4来保存这4个坐标,方块类型一共有7中,一共19种不同的形状如下图:为了便于实现方块类型的变换,在此程序中用到如下图的计算每种方块的4个坐标的公式:pointarray0.x=point.x+shapeshape0*size;pointarray0.y=point.y+shapeshape1*size;
18、 pointarray1.x=point.x+shapeshape2*size;pointarray1.y=point.y+shapeshape3*size+size;pointarray2.x=point.x+shapeshape4*size+size;pointarray2.y=point.y+shapeshape5*size; pointarray3.x=point.x+shapeshape6*size+size;pointarray3.y=point.y+shapeshape7*size+size;注:这段代码是void ctextview:m_drawimage(cdc *pdc ,
19、cpoint point, int shape)中的以上代码中的shape二维数组,它的数据类型为int ,大小为shape198;通过改变shape数组的一维下标,实现方块形状的改变。point的数据类型是cpoint,用来确定方块显示在背景的位置,在调用函数时,通过改变实参,可在游戏区右边实现方块预览功能。通过逆推,计算将shape198在视图类的构造函数中初始化如下:shape1198=0,0,0,0,0,0,0,0,0,0,0,0,-1,2,-1,2,0,0,-1,-1,0,0,1,-1,0,0,0,0,0,2,0,0,2,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0
20、,0,2,0,0,0,0,0,0,0,0,0,-1,2,0,1,0,0,0,0,0,0,1,-1,0,0,1,1,0,0,0,0,-1,1,0,0,0,0,0,0,2,0,1,1,0,0,0,0,0,0,2,-1,0,0,1,0,0,0,0,0,-1,-1,0,0,0,0,2,-1,0,0,-1,-2,0,0,0,0,-1,2,0,0,0,0,0,0,0,0,-2,-1,0,0,1,-2,0,0,0,0,0,0,0,0,-2,1,0,0 ;/初始化方块形状数组预览区如何显示下一块及下下一块方快呢?,此程序就是用通过多次赋值,是数据后移:_oldnextshape=m_nextshape;m_c
21、urshape=m_nextshape;m_nextshape=m_next2shape; m_next2shape=rand()%19;再通过2次调用m_nextimage(cdc *pdc, cpoint point, int shape)来实现预览功能:ondraw(cdc* pdc)_nextimage(pdc,m_oldnextpoint,m_nextshape);/画出下一个方块m_nextimage(pdc,m_nextpoint,m_next2shape);/画出下下一个方块2.1.2方块自由下落及判断功能和描绘背景方块堆积状况的功能方块自由下落及判断功能对应的是计时器模块(o
22、ntimer(uint nidevent)函数)其核心代码如下:for(i=0;i4;i+)/判断是否触底,及当前方块下是否已经有方块 if(pointarrayi.y=24*size | mappointarrayi.x/sizepointarrayi.y/size+1=1)for( j=0;j=4&m_game_pouse)m_pcurpos.y+=size; /通过对当前方块的纵坐标做累加操作实现方块下落invalidate(false);更新数据需要说明的是:游戏区域是25行15列;(怎么在游戏区描绘已下降的俄罗斯方块呢?)在程序定义了一个数组int map1525用来记录游戏区方块分
23、布的状况初始值都为0。通过循环,判断,描绘背景方块堆积状况,代码如下:for(i=0;i15;i+)/画方格图map2741for( j=0;jrectangle(i*size,j*size,(i+1)*size,(j+1)*size); 注:代码在m_drawimage函数中2.1.3按键操作响应功能和消行加分升级功能按键响应功能包括:方块的左移、右移、变形、下降加快。它对应的是按键模块。移动也就是使方块每个坐标按需求一致变动,但要判读是否出界,被已有方块阻挡,举向左移的代码如下:for( i=0;i4;i+)if(pointarrayi.x=1&m_curshape=2)for(i=0;i
24、240)j=1;if(!j)if(m_curshape=2)m_curshape=1;/形状变为横elsem_curshape+=1;至于消行加分升级功能,他对应与消格计分升级模块消行的核心代码如下:cpen pen(ps_insideframe,2,rgb(0,0,0);cbrush brush1(rgb(0,0,0);/创建背景色笔刷cbrush *oldbrush1=pdc-selectobject(&brush1); pdc-selectobject(&pen);int k;for(k=i;k=1;k-)for(int m=0;mrectangle(m*size,k*size,m*si
25、ze+size,k*size+size); 2.1.4背景设置和游戏控制功能此游戏背景很简单,在此就不多说了游戏背景设置模块首先获得当前窗口大小,然后绘制区域大小,线、画刷和笔,通过pdc指针来指向绘制区域大小、输出文本、颜色背景、绘制竖线得到当前的背景界面。游戏控制功能对应于工具及菜单模块工具及菜单模块主要通过四个函数来实现的:ongameend 函数首先进行该游戏是否暂停,如果没有,则直接结束该游戏,如果暂停,则会出现一个对话框,进行提示,关闭该对话框就可以结束游戏了。ongamepouse 函数是对该游戏暂停,当你按下stop按扭时,该游戏进行暂停,如果已经暂停了,再按一次就可以开始游戏
26、了。ongamestart 函数是对该游戏进行开始,首先进行判断是否暂停,如果没有暂停,游戏又进行判断是否结束,如果是表示已结束,又进行赋值,对游戏进行初始状态;如果暂停,进行恢复开始,并继续执行游戏。onappabout 函数是由于读者刚开始对游戏的不了解,该函数主要是帮助读者解决疑难问题的。第3章 系统测试3.1 程序运行测试3.1.1程序主界面图当用户运行程序运行时将会运行如下界面:图3.1 游戏运行的主界面3.1.2 游戏开始的界面当单击“开始”按扭,显示如下界面:图3.2 游戏开始3.1.3游戏暂停的界面当单击“暂停”按扭,显示如下界面: 图3.3按下“暂停”3.1.4 游戏停止的界
27、面当单击“停止”按扭,显示如下界面: 图3.4 在运行中 图3.5 按下“停止”按钮3.1.5用户过了通关后运行的界面:当比较聪明的用户通过自已各个方面的能力玩过通关的界面:图3.6过通关3.1.6方块到顶不能运行造成游戏结束的界面因用户操作失误造成方块到顶造成游戏结束的界面: 图3.7 到顶结束游戏 图3.8 重新开始游戏3.1.7 方块进行变形拼凑的需要用户需将方块任意变形的界面: 图3.9变形之前 图3.10变形之后32 程序流程图背景设置模块描绘背景划分区域文字提示游戏运行游戏开始m_gameend=0游戏界面m_gameend=1调用ondraw()方块预览模块在预览区描绘随机方块显
28、示方块模块显示当前下降方块,显示触底方块判断是否消行加分升级消行升级加分模块按键模块onkeydown()消息函数onkeyup()消息函数判断移动方向变形与按键有关变量归零计时器模块判断是否触底触顶下移方块工具和菜单模块ongamestart()游戏开始调用4个comand函数ongamepous()游戏暂停ongameend()结束游戏onappabout()游戏帮助3.2.1游戏开始时流程图m_gameend=1程序运行: 图3.11整个程序的运行过程结束i+开始i=0;j=0;i25?yj15?ymapji=0?yj+nj=15?消行score+=100yy m_gameend=1; messagebox(恭喜你,通关!,0);level=1;score=0;m_sudu=200;score=1000的倍数level=score/1000+1level=10?m_gameend=1;messagebox(恭喜你,通关!,0);level=1;score=0;m_sudu=200;y m_gameend=1; messagebox(恭喜你,通关!,0);level=1;score=0;m_sudu=200;nnnnn3.2.2消格加分升级模块运行流程图 图3.12 消格加分升级流程图第4章 总结这本次课程设计刚开始时,遇到的问题一大堆,开始我还想自己凭空开发
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医疗器械招商销售合同范例
- 关于钨砂合同范例
- 借款动产质押合同范例
- 加盟养殖合同范例
- 借名贷款合同范例
- 口腔医生就业合同范例
- 医院职务聘用合同范例
- 住建部采购合同范例
- 买卖合同保证合同范例
- 卖牦牛合同范本
- 魏晋南北朝时期园林-课件
- 输煤系统配煤优化qc成果报告运行四值
- GB∕T 38058-2019 民用多旋翼无人机系统试验方法
- 增演易筋洗髓内功图说(校对勘误版)
- 中国铁路总公司《铁路技术管理规程》(高速铁路部分)2014年7月
- 清明节主题班会PPT模板
- ART-850A系列数字式厂用变保护测控装置技术说明书
- 红色大气中考百日誓师大会PPT模板
- 2022年全国计算机一级EXCEL操作题
- 上海美创力喷码机简易操作及维护
- 维语宗教事务条例(2015)
评论
0/150
提交评论