2022年面向对象程序设计c++课程设计报告 .pdf
《2022年面向对象程序设计c++课程设计报告 .pdf》由会员分享,可在线阅读,更多相关《2022年面向对象程序设计c++课程设计报告 .pdf(24页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、郑州轻工业学院本科面向对象程序设计c 课程设计总结报告设计题目 :模拟俄罗斯方块学生姓名 :系别:专业:班级:学号:指导教师 :2010 年 1 月 8 日名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 24 页 - - - - - - - - - 2 郑州轻工业学院课 程 设 计 任 务 书题目模拟俄罗斯方块专业、班级学号姓名程序在文本窗口下输出特定字符模拟游戏俄罗斯方块的运行。在游戏过程中, 每次能随机产生一种方块并自动下落,根据按键控制进行相应的平移、 变形和加速下
2、落。 消去满行后, 根据行数累计分数。分数达到一定值后,等级提升,下落速度加快。游戏区域积满后,游戏结束。同时能响应退出按键,提示是否退出游戏。完成期限:2010.1.4-2010.1.8 指 导教 师签 名:课程负责人签名:2010 年 1 月 8 日名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 24 页 - - - - - - - - - 3 俄罗斯方块的设计与实现第一章引言 . 4 1.1. 关于题目 . 4 1.1.1. 题目要求 . 4 1.1.2. 选题背景
3、 . 4 1.2. 关于编译软件 . 4 1.3. 关于稳定性 . 4 第二章程序设计 . 5 2. 主要功能设计 . 5 2.1. 程序流程 . 5 第三章程序实现 . 7 3. 类设计声明 . 7 3.1. view 类 . 7 3.2. squar 类 . 7 3.3. 主要功能的实现. 8 3.3.1. 游戏界面 . 8 3.3.2. 生成方块 . 9 3.3.3. 方块变形 . 9 3.3.4. 方块显示 . 10 3.3.5. 障碍判断 .11 3.3.6. 消行计分 . 12 3.3.7. 暂停退出 . 13 第四章程序测试 . 14 4. 游戏测试 . 14 总结与体会 . 1
4、5 附录: . 16 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 24 页 - - - - - - - - - 4 第一章引言1.1. 关于题目1.1.1. 题目要求利用 Microsoft V isual C+编写一个文本窗口下的俄罗斯方块游戏。要求:(1)利用类和多文件编写。(2)能够记录游戏得分和等级。(3)可暂停 /继续游戏,使玩家在不愿游戏时退出。(4)信息提示时显示颜色变化。1.1.2. 选题背景俄罗斯方块是家喻户晓的益智小游戏,选择这个题目一是为了将自己
5、的所学知识加以运用,二是俄罗斯方块是我第一个接触到的游戏,它的实现方法也吸引着我。我希望通过探索实践去实现它,在这次学习中从实践和实际的项目中提高自己的编程能力。因此我选定了这个题目。1.2. 关于编译软件本程序采用 Microsoft Visual C+6.0 的英文版本进行编译。 VisualC+6.0是 Microsoft公司推出的基于Windows 操作系统的可视化C+编程工具,尽管Microsoft公司推出了.NET 平台的集成开发环境,但由于其良好的界面和可操作性,加上支持标准C/C+规范,但仍有相当多的编程人员使用VisualC+6.0进行应用系统的开发。1.3. 关于稳定性经测
6、试,本程序可以在windows 操作系统中稳定运行,较为稳定。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 24 页 - - - - - - - - - 5 第二章程序设计2. 主要功能设计根据分析,俄罗斯方块这个程序一共要实现如下几个功能,开始游戏、游戏的暂停继续、游戏控制和退出游戏。其中游戏控制最为主要和重要,它控制着整个游戏的画面和有关数据的操作,是游戏的核心部分。暂停和退出功能做成一体,在退出的提示下不做任何操作即可实现暂停的功能。程序结构如图2-1 所示。图
7、2-1 程序结构图2.1. 程序流程根据分析后的程序结构图设计出相应的流程图。俄罗斯方块的内容主要包括游戏开始,画背景和边框, 显示分数等级和下一个方块的预览图;根据速度没隔一定时间方块自动下落,当有按键操作时,根据相应按键执行动作,每次动作前要判断是否动作可以执行。下落方块满一行时,消去该行,根据消去行数得到相应分数。分数达到一定程度,等级提升,速度加快。同时可以响应Esc 按键,提示是否退出程序。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 24 页 - - - -
8、 - - - - - 6 图 2-2 流程图名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 24 页 - - - - - - - - - 7 第三章程序实现3. 类设计声明根据程序的结构,将俄罗斯方块需要实现的功能细化为相应的类成员函数。程序有两个类,一个view 类,用于背景相关操作。一个squar 类,用于方块相关操作。3.1. view 类class view public: view(); /类的缺省构造函数int getbgdata(int,int); /取得数
9、组x,y 点的数据值void scoreadd(int); /得分增加,根据消去行数void scorereset(); /得分清零,用于升级后void levelup(); /等级提升,当分数达到规定值后执行int gameover(); /游戏结束void rowdelete(); /消除满行void previewset(int (*p)4); /设置预览方块的形状数据void previewreset(); /预览方块数据清零void setdata(int (*)2); /设置主游戏区数据值void datareset(); /主游戏区数据清零void drawpreview();
10、/显示预览方块private: int data2526; /主游戏区数组int preview44; /预览方块数组int rowsdelete; /每次消除行数变量int score; /得分变量int scorelevel; /升级规定值变量int level; /等级变量bool overflag; /结束标记变量void scorelevelup(); /升级规定值提升; 3.2. squar 类名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 24 页 - -
11、- - - - - - - 8 class view; /先向引用声明class squar public: squar(); /类的缺省构造函数squar(squar &); /拷贝构造函数friend void cursor(int,int); /友元函数控制光标位置void getcursor(int &,int &); /取得位置记录坐标void make(); /随机产生一个方块void getmake(int (*p)4); /取得方块数据值void draw(); /显示主方块void drop(view &); /方块下落void change(); /方块变形int meet
12、(int); /判断方块周围是否有障碍void torecord(int (*)2); /传送需要记录的数据void reset(); /方块数组清零int moveflag; /方块运动标记变量private: void move(); /方块运动int shape44; /方块形状数据int x,y; /坐标int shapeindex; /方块形状序号int changeindex; /变形序号变量int speed; /下落速度变量; 3.3. 主要功能的实现3.3.1. 游戏界面俄罗斯方块的游戏界面包括游戏区域边框、下落方块绘制、右部计分和预览图显示等。游戏区域边框的绘制比较简单,循
13、环中确定光标的位置输出特定字符,即可完成边框绘制。游戏区方块的绘制,循环从数据数组中依次读出数据,根据读到的数据显示“”,最后组成方块的形状, 完成方块的绘制。计分和预览图部分先画出一个矩形区域,然后控制光标在其中显示分数、等级、预览图和提示信息。具体界面如图3-1 所示。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 24 页 - - - - - - - - - 9 图 3-1 3.3.2. 生成方块本程序中生成的方块有六种形状,如图3-2 所示。每一种方块以shape
14、index标记,在程序运行生成方块时,调用shapeindex=rand()%5+1; 语句,确定当前要显示的是哪一个方块形状。而在实际运行中,第一次需要调用两次生成方块函数make(),将先产生的赋给游戏当前方块, 第二个赋给预览图方块。以后每次产生一个方块,把预览方块赋给当前方块,把新产生的赋给预览方块。图 3-2 3.3.3. 方块变形俄罗斯方块的特点就在于通过方块的变形拼满整行来消去该行方块从而使游戏可以继续下去, 很难想象不能变形的俄罗斯方块是什么样子。而变形的过程就是根据当前方块形状名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - -
15、 - - - 名师精心整理 - - - - - - - 第 9 页,共 24 页 - - - - - - - - - 10 改变方块的相对位置,这样就可以改变方块的形状了。在程序中每当按下Up 键,程序判断可以变形后,根据当前方块的形状序号shapeindex 和变化形状序号changeindex 调用相应的方块数值赋给draw() 函数,通过刷新重画就可以显示变化后的方块了。具体形状变化如图3-3 所示。图 3-3 3.3.4. 方块显示以上方块的操作都是数据层面的操作,而真正要在游戏窗口中看到数据的变化,还必须把方块不断的绘制出来。这就是 draw() 函数的作用。 把当前运动的方块对应节
16、点存储在一个4*4 数组里,变形和生成方块的过程就是更新该数组数据的过程。然后在draw() 函数里检测数组的各个值,并控制光标跳到一定位置,画出“”组成方块。具体方块对应数组数值关系如图 3-4 所示。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 24 页 - - - - - - - - - 11 图 3-4 3.3.5. 障碍判断障碍判断,就是在方块运动中或者变形中判断周围是否有障碍阻碍下落、移位、变形。当方块下落遇到下面有方块或者到达下边界则应停止下落并记录数据
17、,存入背景数据数组。变形时应判断这个变形是否可以进行,如果有障碍则不能变形。例如当方块达到右边界,而若变形则会越过边界,那么这个变形的命令是不应执行的。所有这些判断都由meet()函数进行,根据是否有障碍返回1 或 0,再由其他函数接收执行相应操作。具体一些障碍情况如图3-5 所示。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 24 页 - - - - - - - - - 12 图 3-5 3.3.6. 消行计分游戏玩家拼满一行后,程序消去满行,并计分。中当一个方块下
18、落停止后,程序检查方块是否充满了游戏区域,如果是结束游戏。不是, 则判断是否构成消行条件,从下落方块的最低点依次向上检查是否可以消行,根据消去行数分数增加。分数达到一定程度,等级提升,速度加快。如图3-6,图 3-7,图 3-8 所示。图 3-6 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 24 页 - - - - - - - - - 13 图 3-7 图 3-8 3.3.7. 暂停退出游戏的友好性在于能考虑用户的需要,随时可以暂停 /继续游戏, 在不愿继续游戏时退
19、出游戏。 本程序可以在用户需要的时候响应Esc 按键, 提示是否退出游戏,如果不做选择即名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 24 页 - - - - - - - - - 14 可暂停游戏,等待选择。界面如图3-9 所示。图 3-9 第四章程序测试4. 游戏测试经过调试和修改,程序完全实现设计要求,成功模拟了俄罗斯方块的运行过程和游戏效果,只是界面略微简陋,但已从程序层面上实现了游戏,达到了这次实训的要求和目的。程序正常生成方块,根据速度值每隔一定时间自动下落
20、,如有操作按键按下,根据按键实现位移和变形。当方块满一行后,可以消除该行,同时记录分数和等级。按下Esc键红色提示信息正常显示,可以响应F1,F2 键决定是否退出游戏。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 24 页 - - - - - - - - - 15 总结与体会通过这次课程设计,我收获了很多。首先把所学知识加以利用和巩固,其次在实践中遇到问题去探索和学习,更增加了新知识。在程序设计编写过程中两个类的数据交换是个比较麻烦的过程,这个类的定义过程中要用到另一
21、个类做参数类型,而在后一个类中亦需要第一个类做参数类型,出现了互相调用的情况。 编译提示未定义,只好在两个类外定义函数负责两个类函数的数据交换。实践证明达到了预期的目的,积累了经验。由于程序是用文本窗口模拟的图形,界面比较简陋,如果使用MFC 用 C+来实现,那么界面将会非常好,只是由于所学知识有限,只有下一步去探索了。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 24 页 - - - - - - - - - 16 附录:程序主要模块源代码squar:squar()
22、for(int i=0;i4;i+) for(int j=0;j4;j+) shapeij=0; x=22; y=0; shapeindex=1; changeindex=1; speed=1000; moveflag=1; downtoearth=0; void squar:make() srand(int)time(0); shapeindex=rand()%6+1; switch(shapeindex) case 1:reset(); shape10=1; shape11=1; shape12=1; shape13=1; break; case 2:reset(); shape01=1;
23、 shape11=1; shape21=1; shape22=1; break; case 3:reset(); shape02=1; shape12=1; shape21=1; shape22=1; break; case 4:reset(); shape01=1; shape11=1; shape12=1; shape22=1; break; case 5:reset(); shape02=1; shape11=1; shape12=1; shape21=1; break; case 6:reset(); shape11=1; shape12=1; shape21=1; shape22=1
24、; break; void squar:draw() for(int i=0;i4;i+) for(int j=0;j4;j+) if(shapeij) cursor(x+j*2,y+i); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 24 页 - - - - - - - - - 17 cout ; int squar:meet(int direction) /遇见返回1;int xx=x/2,yy=y; switch(direction) case 1:/dire
25、c left yy+=1; switch(shapeindex) case 1:/line switch(changeindex) case 1:if(getdata(yy+1,xx-1) return 1; else return 0; case 2:if(getdata(yy,xx)|getdata(yy+1,xx)|getdata(yy+2,xx)|getdata(yy+3,xx) return 1; else return 0; case 2:/curlr switch(changeindex) case 1:if(getdata(yy,xx)|getdata(yy+1,xx)|get
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年面向对象程序设计c+课程设计报告 2022 面向 对象 程序设计 c+ 课程设计 报告
限制150内