俄罗斯方块的设计报告.doc
《俄罗斯方块的设计报告.doc》由会员分享,可在线阅读,更多相关《俄罗斯方块的设计报告.doc(24页珍藏版)》请在沃文网上搜索。
1、 课程设计俄罗斯方块VC+课程设计报告 设计题目: 俄罗斯方块 学 院:太原工业学业 专业班级:1020562学生姓名:王鲁恒学生学号:28指导教师:韩燕丽 目录一、课程设计的目的与要求31.1课程设计的目的31.2课程设计的要求31.3选题背景3二、游戏的分析与设计42.1需求分析42.1.1 游戏需求42.2.2游戏界面需求:42.2.3游戏形状(方块)需求:42.2算法分析42.2.2概要流程图52.2.2定义方块的数据结构62.2.3 游戏设计分析7三、程序主要功能的实现73.3游戏功能的实现7.3.3.1游戏界面73.3.2生成方块83.3.3方块变形83.3.4方块显示93.3.5
2、消行93.3.6暂停退出10四程序测试10五.总结与体会12六附录一(参考书)12七附录二(程序源代码)12用VC+实现俄罗斯方块的程序设计一、 课程设计的目的与要求 1.1课程设计的目的本课程设计是一个综合性的实践教学环节,其目的在于促进学生复习和巩固计算机软件设计知识,加深对软件设计方法、 软件设计技术和设计思想的理解,并能运用所学知识进行开发。希望通过本课程设计中简单系统的开发,使学生掌握软件设计的基本方法和基本流程,提高学生的综合应用能力。1.2课程设计的要求利用Microsoft Visual C+编写一个文本窗口下的俄罗斯方块游戏。要求:要求用设计与实现俄罗斯方块游戏。要求包括系统
3、的需求分析;系统总框图及每个模块的设计分析;算法的设计与实现;游戏的内部实现;游戏区域绘图的实现;系统存在的问题及错误处理;列出所有定义的函数及说明;附上程序源代码。1.3选题背景俄罗斯方块是家喻户晓的益智小游戏,选择这个题目一是为了将自己的所学知识加以运用,二是俄罗斯方块是我第一个接触到的游戏,它的实现方法也吸引着我。我希望通过探索实践去实现它,在这次学习中从实践和实际的项目中提高自己的编程能力。因此我选定了这个题目。二、 游戏的分析与设计2.1需求分析2.1.1 游戏需求 随机给出不同的形状(长条形、Z字形、反Z形、田字形、7字形、反7形、T字型)下落填充给定的区域,若填满一条便消掉,若在
4、游戏中各形状填满了给定区域,为输者。2.2.2游戏界面需求:良好的用户界面,有关游戏的使用说明。让方块在一定的区域内运动和变形,该区域用一种颜色表明,既用一种颜色作为背景,最好设为黑色。还需用另一种颜色把黑色围起来,宽度适中,要实现美感。2.2.3游戏形状(方块)需求:良好的方块形状设计,绘制七种常见的基本图形(长条形、Z字形、反Z形、田字形、7字形、反7形、T字型),各个方块要能实现它的变形,可设为顺时针或逆 时针变形,一般为逆时针。2.2算法分析根据分析,俄罗斯方块这个程序一共要实现如下几个功能,开始游戏、游戏的暂停继续、游戏控制和退出游戏。其中游戏控制最为主要和重要,它控制着整个游戏的画
5、面和有关数据的操作,是游戏的核心部分。暂停和退出功能做成一体,在退出的提示下不做任何操作即可实现暂停的功能。程序结构如图2-2-1所示。 图2-2-1程序结构图2.2.2概要流程图根据分析后的程序结构图设计出相应的流程图。俄罗斯方块的内容主要包括游戏开始,画背景和边框,显示分数等级和下一个方块的预览图;根据速度没隔一定时间方块自动下落,当有按键操作时,根据相应按键执行动作,每次动作前要判断是否动作可以执行。下落方块满一行时,消去该行,根据消去行数得到相应分数。分数达到一定程度,等级提升,速度加快。同时可以响应Esc按键,提示是否退出程序。 图2-2-2 流程图 2.2.2定义方块的数据结构对于
6、方块在某一瞬间的位置标识,我们采用一个44的小数组标识出来,即用4个存储单位空间存储当前下坠物的每一子块的位置,也就是说,用4个存储单位空间存储当前下坠物的每一子块的位置来对整个下坠物件的位置进行标识,而每个存储空间的大小就是一个典的坐标值(x,y),而每个方块按照从左到右的方式进行编号,并且在编号过程中对于同一列的方块实行从上到下进行编号 2 。0123(x0,y0)(x1,y1)(x2,y2)(x3,y3)2303(x0,y0)(x1,y1)(x2,y2)(x3,y3) 图2-2-3方块编号+Diamond 00和Diamond 01则是第0号方块的横坐标x和纵坐标y ;Diamond 2
7、0和Diamond 21则是第2号方块的横坐标x和纵坐标y。2.2.3 游戏设计分析根据程序的结构,将俄罗斯方块需要实现的功能细化为相应的成员函数,每个成员函数实现一个功能,进而实现程序的运行。void HomePage(HANDLE handle);/首页void Initialize();/初始化界面void PlayMusic();/播放背景音乐WORD CreateColors(WORD newColor1);/产生随机方块颜色int* Setup();/创建void Draw(int Dia,int w,int h,int x,int y,WORD Colors,int cColor
8、s);/画方块void TurnOver(int Dia4,int w,int h,int *x,int y);/翻转方块*BOOL PutDown(int Dia,int x,int y,int w,int h);/判断能否放下和移动*void ClearIn(int *a,int w,int h,int x,int y);/清除游戏区域内的方块void ClearOut(int *b,int w,int h,int x,int y);/清除游戏外围的方块void DeleteRow(int mwidth,int row,int w,int h);/消除一行*void GAMEOVER();
9、/行数超过界限游戏结束void FlashScreen();/刷屏效果三、程序主要功能的实现3.3游戏功能的实现.3.3.1游戏界面俄罗斯方块的游戏界面包括游戏区域边框、下落方块绘制、右部计分和预览图显示等。游戏区域边框的绘制比较简单,循环中确定光标的位置输出特定字符,即可完成边框绘制。游戏区方块的绘制,循环从数据数组中依次读出数据,根据读到的数据显示“”,最后组成方块的形状,完成方块的绘制。计分和预览图部分先画出一个矩形区域,然后控制按键来控制方块的移动如图3-3-1所示(游戏的区域)。 图3-3-1游戏的区域3.3.2生成方块本程序中生成的方块有六种形状,如图3-3-2所示。每一种方块以D
10、iamond标记,在程序运行生成方块时,调用Diamond44语句,确定当前要显示的是哪一个方块形状。而在实际运行中,第一次需要调用两次生成方块函数Draw (),将先产生的赋给游戏当前方块,第二个赋给预览图方块。以后每次产生一个方块,把预览方块赋给当前方块,把新产生的赋给预览方块 图3-3-23.3.3方块变形俄罗斯方块的特点就在于通过方块的变形拼满整行来消去该行方块从而使游戏可以继续下去,很难想象不能变形的俄罗斯方块是什么样子。而变形的过程就是根据当前方块形状改变方块的相对位置,这样就可以改变方块的形状了。在程序中每当按下C键,程序判断可以变形后,根据当前方块的形状序号Diamond44和
11、变化形状序号TurnOver()调用相应的方块数值赋给draw()函数,通过刷新重画就可以显示变化后的方块了。3.3.4方块显示以上方块的操作都是数据层面的操作,而真正要在游戏窗口中看到数据的变化,还必须把方块不断的绘制出来。这就是Draw()函数的作用。把当前运动的方块对应节点存储在一个4*4数组里,变形和生成方块的过程就是更新该数组数据的过程。然后在draw()函数里检测数组的各个值,并控制光标跳到一定位置,画出“”组成方块。具体方块对应数组数值关系如图3-3-4所示。 图3-3-43.3.5消行游戏玩家拼满一行后,程序消去满行,。中当一个方块下落停止后,程序检查方块是否充满了游戏区域,如
12、果是结束游戏。不是,则判断是否构成消行条件,从下落方块的最低点依次向上检查是否可以消行。如图3-3-5所示 图3-3-53.3.6暂停退出游戏的友好性在于能考虑用户的需要,随时可以暂停/继续游戏,在不愿继续游戏时退出游戏。本程序可以在用户需要的时候响应Esc按键,提示是否退出游戏,如果不做选择即可暂停游戏,等待选择四 程序测试经过调试和修改,程序完全实现设计要求,成功模拟了俄罗斯方块的运行过程和游戏效果,只是界面略微简陋,但已从程序层面上实现了游戏,达到了这次实训的要求和目的。程序正常生成方块,根据速度值每隔一定时间自动下落,如有操作按键按下,根据按键实现位移和变形。当方块满一行后,可以消除该
13、行。游戏运行界面如图4-4-1,图4-4-2. 图4-4-3图4-4-1(初始界面) 图4-4-2.(游戏界面) 图4-4-3(游戏结束界面)五.总结与体会通过这次课程设计,我收获了很多。首先把所学知识加以利用和巩固,其次在实践中遇到问题去探索和学习,更增加了新知识。由于程序是用文本窗口模拟的图形,界面比较简陋,如果使用MFC用C+来实现,那么界面将会非常好,只是由于所学知识有限,只有下一步去探索了。六附录一(参考书) 1.C+程序设计谭浩强 北京:清华大学出版社 2. 数据结构严蔚敏 北京: 清华大学出版社 3. Visual C+游戏设计钦科技. 北京:科海电子出版社七附录二(程序源代码)
14、 共23页 第24页#include #include #include #include #include colorConsole.h#define left75#define right77#define down80/游戏区域大小#define width 12#define height 20int Lleft44 = 1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0;/左型Lint Lright44 = 0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0;/右型Lint Zleft44 = 1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0;/
15、左型Zigzagint Zright44 = 0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0;/右型Zigzagint T44 = 0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0;/T型int Stick44 = 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0;/棒型int Cube44 = 1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0;/正方形int Diamond44;/用于表示不同方块的数组int offset_x = 20;/打印偏移量int offset_y = 5;/打印偏移量int areaheightwidth;
16、/游戏区域的数组void HomePage(HANDLE handle);/首页void Initialize();/初始化界面void PlayMusic();/播放背景音乐WORD CreateColors(WORD newColor1);/产生随机方块颜色int* Setup();/创建void Draw(int Dia,int w,int h,int x,int y,WORD Colors,int cColors);/画方块void TurnOver(int Dia4,int w,int h,int *x,int y);/翻转方块*BOOL PutDown(int Dia,int x,
17、int y,int w,int h);/判断能否放下和移动*void ClearIn(int *a,int w,int h,int x,int y);/清除游戏区域内的方块void ClearOut(int *b,int w,int h,int x,int y);/清除游戏外围的方块void DeleteRow(int mwidth,int row,int w,int h);/消除一行*void GAMEOVER();/行数超过界限游戏结束void FlashScreen();/刷屏效果void main()HANDLE handle;handle = initiate();HomePage(
18、handle);/游戏首页Initialize();/进行初始化/创建新的方块int *advance = NULL;advance = Setup();int blank,x,y;bool flag;while(1)/复制已创建的方块for(int i=0;i4;i+) for(int j=0;j4;j+)if(Diamondij=*(advance+i*4+j) blank = i;y=1-blank;x=4;ClearOut(&Diamond00,4,4,13,13);/清除上一个方块advance=Setup();WORD Colors1;Colors0 = FOREGROUND_RE
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
10 积分
下载 | 加入VIP,下载更划算! |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 俄罗斯方块 设计 报告