Vc++俄罗斯方块课程设计报告_第1页
Vc++俄罗斯方块课程设计报告_第2页
Vc++俄罗斯方块课程设计报告_第3页
Vc++俄罗斯方块课程设计报告_第4页
Vc++俄罗斯方块课程设计报告_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

设计主题:模拟俄罗斯方块学生姓名:性别:专家:类别:学位:指导教师:课程设计任务书主题模拟俄罗斯方块程序在文本窗口下输出特定的文字模拟游戏的俄罗斯块的执行。在游戏过程中,每次随机生成一个块,可以自动下落,基于关键控制进行适当的平移、变形、加速下落。 清除完整行后,根据行数累计得分。 分数达到一定值时,等级上升,下落速度加快。 游戏区域满了,游戏就结束了。 您可以同时回应结束按钮,提示您是否要结束游戏。完成日期:指导教师签字:课程负责人签字:俄罗斯方块的设计与实现第一章引言41.1 .关于主题41.1.1 .主题要求41.1.2 .选题背景41.2 .关于编译软件41.3 .关于稳定性4第二章编程52 .主要功能设计52.1 .程序流程5第三章程序实现7三.类别设计宣言73.1.view第7类3.2.squar类73.3 .实现主要功能83.3.1 .游戏界面83.3.2 .生成块93.3.3 .块变形93.3.4 .模块显示103.3.5 .故障判断113.3.6 .取消评级123.3.7 .暂停中止13第四章程序测试144 .游戏测试14总结和体会15附录: 16第一章引言1.1 .关于主题1.1.1 .主题要求使用Microsoft Visual C在文本窗口下创建俄罗斯块游戏。要求:(一)利用类和多个文件编制;(2)能够记录游戏的得分和等级。(3)可以暂停/重新开始游戏,在不想玩游戏时结束玩家。(4)在提示信息时显示颜色的变化。1.1.2 .选题背景俄罗斯方块是众所周知的智育小游戏,选择这个主题是为了运用自己学到的知识,第二个是俄罗斯方块是我第一次接触的游戏,其实现方法也吸引了我。 希望通过探索实践来实现,通过本次学习从实践和实际项目中提高自己的编程能力。 因此我选定了这个题目。1.2 .关于编译软件此程序由Microsoft Visual C 6.0英文版编译。 VisualC 6.0是Microsoft推出的基于Windows操作系统的可视c编程工具,Microsoft推出了. NET平台集成开发环境使用VisualC 6.0开发应用系统的程序员相当多。1.3 .关于稳定性测试结果表明,该程序在windows操作系统中运行稳定。第二章程序设计2 .主要功能设计分析表明,俄罗斯方块的过程全部实现了以下功能,开始游戏、暂停游戏、控制游戏和终止游戏。 其中游戏控制最为重要,控制游戏整体画面和相关数据的操作,是游戏的核心部分。 暂停和结束的功能是一体的,在结束的指示下什么也不做就能实现暂停的功能。 程序结构如图2-1所示。图2-1程序结构图2.1 .程序流程根据分析后的程序结构图,设计合适的流程图。 俄罗斯块的内容主要是根据游戏的开始、背景和框的描绘、得分等级和包含下一块的预览图的显示在内的速度,一定时间块自动掉落,在有按键操作的情况下,根据相应的按键执行动作,在每次动作时判断是否可以执行动作。 如果下拉框小于一行,则清除该行并根据清除的行数得到相应的分数。 分数达到一定程度,等级上升,速度加快。 您还可以响应Esc键来确定是否退出程序。图2-2流程图第三章程序的实现3 .类别设计宣言根据过程的构造,将俄罗斯方块应该实现的功能细分为适当的类成员函数。 程序有两个类: view类,用于执行背景相关操作。 squar类,用于与框相关的操作。3.1. view类别类别视图装模作样公共:view () /类的默认构造函数int getbgdata(int,int) /取得排列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 () /显示预览框私人:int data2526; /主游戏区域排列int preview44; /预览框排列int rowsdelete; /每次删除行数变量时int score; /分数变量int scorelevel; /升级规定值变量int level; /类变量bool overflag; /结束标记变量void scorelevelup () : /升级规定值升级3.2. squar类类别视图; /首先在引用中发表声明类squar装模作样公共:squar (); /类的默认构造函数squar(squar) /复制构造函数voidfriendcursor(int,int) /友元函数控制光标位置void getcursor(int,int) /取得位置记录坐标void make (); /随机生成框void getmake(int (*p)4 ) /获取块数据值void draw (); /显示主框void drop(view) /四边形掉落void change (); /盒变形int meet(int) /判断区块周围是否有故障void到记录(int (* ) 2 ) /转送需要记录的数据void reset (); /盒子排列零int moveflag; /方块运动旗标变数私人:void move (); /块状运动int shape44; /块形状数据int x,y; /坐标int shapeindex; /块形状编号int changeindex; /变形编号变量int speed; /落下速度变量3.3 .实现主要功能3.3.1 .游戏界面俄罗斯方块的游戏画面包括游戏区域框、放落块描绘、右得分、预览显示等。游戏区域边界的绘制比较简单,在循环中定位光标并输出特定的文字即可完成边界的绘制。 游戏块的描绘从数据排列中依次反复读出数据,基于读取的数据显示“”,最后构成块的形状,完成块的描绘。 在分数和预览图表区段中,您可以先绘制矩形区域,然后控制游标以显示分数、等级、预览图表和提示资讯。 具体的接口如图3-1所示。图3-13.3.2 .生成块本步骤生成的块如图3-2所示有6种形状。 每个框都用shapeindex标记,生成框在进程运行时用shapeindex=rand()%5 1; 语句确定当前显示的矩形。 在实际运行中,最初需要调用生成框函数make ()两次,最初生成的被分配给游戏的当前框,第二个被分配给预览框。 然后,每次生成框时,都会将预览框指定给当前框,并将新生成的框指定给预览框。图3-23.3.3 .块变形俄罗斯方块的特征是可以用方块的变形填满行地继续游戏,无法想象无法变形的俄罗斯方块是怎样的。 根据当前正方形的形状,变形可以通过改变正方形的相对位置来改变正方形的形状。 如果在进程中每次按Up键时确定进程是可变形的,则当前框的形状编号shapeindex和变形编号changeindex将相应框的数值传递给draw ()函数,然后重新绘制以显示变化的框。 具体的形状变化如图3-3所示。图3-33.3.4 .模块显示以上区块的操作都是数据级的操作,为了真正在游戏窗口看到数据的变化,必须一个接一个地描绘区块。 这就是draw ()函数的作用。 将当前运动的块对应节点存储在一个4*4阵列中,通过对块进行变形来生成块的过程是用于更新阵列数据的过程。 然后用draw ()函数检测数组的各个值,将光标移动到一定位置,绘制“”块。 具体的块对应排列的数值关系如图3-4所示。图3-43.3.5 .故障判断故障判断是块运动或变形中周围是否有故障的判断。 块的下落在下方有块时,或者到达下方边界时,停止下落,记录数据,保存在背景数据数组中。 变形时判断这个变形是否可能,有故障的话就不能变形。 例如,如果框到达右边距,变形超出边界,则不要执行此变形命令。 所有这些判决都由meet ()函数完成,返回1或0取决于是否有故障,并且其他函数接收并执行它们。 具体故障情况见图3-5。图3-53.3.6 .取消评级游戏玩家满一行后,程序就会取消满行,得分。 其中一块掉落停止后,程序检查块是否充满游戏区域,结束游戏时。 否则,判断是否构成擦除条件,从下拉框的最下点开始按顺序向上检查是否能够擦除,对应于擦除线数增加点数。 分数达到一定程度,等级上升,速度加快。 如图3-6、图3-7、图3-8所示。图3图6图3-7图3图83.3.7 .暂停终止游戏的友好性是考虑到用户的需要,可以随时暂停/恢复游戏,在不想恢复游戏时结束游戏。 该程序可以在用户需要时响应Esc键来指示游戏是否结束,如果未选择,则可以暂停游戏并等待选择。 接口如图3-9所示。图3图9第四章程序测试4 .游戏测试经过调整和修改,程序完全实现了设计要求,成功模拟了俄罗斯方块的运行过程和游戏效果,但接口虽然粗糙,但在程序层面实现了游戏,达到了此次训练的要求和目的。程序正常生成块,根据速度值每隔一定时间自动掉落,按下操作按钮时,根据按钮实现位移和变形。 框满一行后,可以删除该行并记录得分和等级。 按Esc键可以正常显示红色信息,您可以响应F1,F2键来确定游戏是否结束。总结和体会通过这个课程的设计,我取得了很多成果。 首先利用学到的知识加强,然后在实践中碰到问题进行探索、学习,进而增加新知识。在编程过程中,两个类之间的数据交换是一个麻烦的过程,在定义此类时,必须使用另一个类作为参数类型,而后一个类也必须使用第一个类作为参数类型,并且可以相互调用。 由于未定义编译提示,因此必须在两个类之外定义函数,以便负责两个类函数的数据交换。 实践达到了预期的目的,证明积累了经验。由于程序是在文本窗口中模拟的图形,因此接口粗糙,如果使用MFC在c中实现,则接口变得非常好,但是因为学到的知识有限,所以只能在下一步中进行探索。附录:程序主要模块的源代码24squar:6030squar ()装模作样for(int i=0; i4; I )装模作样for(int j=0; j4; j )装模作样shapeij=0;以下称为以下称为x=22;y=0;形状索引=1;changeindex=1;speed=1000;moveflag=1;downtoearth=0;以下称为voidasquar:5360make ()装模作样srand(int)time(0) )shapeindex=rand()%6 1;switch (形状索引)装模作样case 1:reset ();shape10=1;shape11=1;s

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论