版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、vc+程序设计主讲教师:贾澎涛主讲教师:贾澎涛1章节课件第八章 俄罗斯游戏开发综合前面所学的知识,熟悉面向对象程序设综合前面所学的知识,熟悉面向对象程序设计的全过程,即面向对象的分析、面向对象计的全过程,即面向对象的分析、面向对象的设计、面向对象的实现三个过程,创建一的设计、面向对象的实现三个过程,创建一个实用的游戏程序。个实用的游戏程序。 2章节课件游戏说明及规则游戏说明及规则n俄罗斯俄罗斯方块是由俄罗斯人阿列克谢方块是由俄罗斯人阿列克谢帕基帕基特诺夫发明的。俄罗斯方块原名是俄语特诺夫发明的。俄罗斯方块原名是俄语(英语是(英语是tetris),这个名字来),这个名字来源于源于希腊希腊语语te
2、tra,意思是,意思是“四四”,而游,而游戏的作者最喜欢网球(戏的作者最喜欢网球(tennis)。于是,)。于是,他把两个词他把两个词tetra和和tennis合而为一,命合而为一,命名为名为tetris,这也就是俄罗斯方块名字,这也就是俄罗斯方块名字的由来。的由来。3章节课件ntetris游戏在一个游戏在一个m*n的矩形框内进行。游戏开始时,的矩形框内进行。游戏开始时,矩形框的顶部会随机出现一个由四个小方块构成的砖矩形框的顶部会随机出现一个由四个小方块构成的砖块,每过一个很短的时间(我们称这个时间为一个块,每过一个很短的时间(我们称这个时间为一个tick),它就会下落一格,直到它碰到矩形框的
3、底部,),它就会下落一格,直到它碰到矩形框的底部,然后再过一个然后再过一个tick它就会固定在矩形框的底部,成为它就会固定在矩形框的底部,成为固定块。接着再过一个固定块。接着再过一个tick顶部又会出现下一个随机顶部又会出现下一个随机形状,同样每隔一个形状,同样每隔一个tick都会下落,直到接触到底部都会下落,直到接触到底部或者接触到下面的固定块时,再过一个或者接触到下面的固定块时,再过一个tick它也会成它也会成为固定块,再过一个为固定块,再过一个tick之后会进行检查,发现有充之后会进行检查,发现有充满方块的行则会消除它,同时顶部出现下一个随机形满方块的行则会消除它,同时顶部出现下一个随机
4、形状。直到顶部出现的随机形状在刚出现时就与固定块状。直到顶部出现的随机形状在刚出现时就与固定块重叠,表示游戏结束。重叠,表示游戏结束。4章节课件操作说明:n光标左键光标左键左移左移光标右键光标右键右移右移光标上键光标上键翻转翻转光标下键光标下键下移下移5章节课件tetris游戏的分析、设计与实现游戏的分析、设计与实现 n1. tetris游戏的矩形框类游戏的矩形框类cbinn首先我们应该描述首先我们应该描述tetris游戏的矩形框。这里游戏的矩形框。这里我们定义一个我们定义一个cbin类描述类描述tetris游戏的矩形框。游戏的矩形框。对矩形框进行分析,它应该有三个私有的数据对矩形框进行分析,
5、它应该有三个私有的数据成员为:成员为:image, width和和height。cbin类将类将tetris游戏的矩形框描述成为一个二维数组游戏的矩形框描述成为一个二维数组image, 变量变量width和和height存储了存储了image的的维数。如图维数。如图1所示。有砖块的地方的值为砖块所示。有砖块的地方的值为砖块的颜色值(例如的颜色值(例如1为红色,为红色,4为蓝色),没有砖为蓝色),没有砖块的地方应为块的地方应为0值。值。 6章节课件7章节课件函数名称函数名称函数说明函数说明cbin(unsigned int w, unsigned int h) 构造函数,用来初始化数据成员构造函
6、数,用来初始化数据成员width 和和 height,并为,并为image分配空分配空间并初始化。间并初始化。cbin()析构函数,删除在构造函数中为析构函数,删除在构造函数中为image分配的空间。分配的空间。void getimage(unsigned char* destimage)将将image的数据拷贝到的数据拷贝到 destimage. 你可以假设你可以假设destimage指向的空间足指向的空间足够容纳够容纳image的数据的数据.void setimage(unsigned char* srcimage)把把srcimage 中的数据拷贝到中的数据拷贝到image. 你可以假设
7、你可以假设srcimage是一个合法的是一个合法的指针指针.unsigned int removefulllines()检查检查image,如果任何一行完全填,如果任何一行完全填满,则删除这一行,并让上面行的满,则删除这一行,并让上面行的数据下移一行,返回删除的总行数。数据下移一行,返回删除的总行数。 8章节课件n现在来完成一些现在来完成一些tetris砖块类。砖块类。tetris的的常用砖块见下图。经分析所有的砖块都常用砖块见下图。经分析所有的砖块都有共同的特征,因此我们定义了一个基有共同的特征,因此我们定义了一个基类类cbrick,这是一个抽象类。,这是一个抽象类。 图图11.2 tetr
8、is的常用砖块的常用砖块 9章节课件ncibrick 类有四个数据成员类有四个数据成员: orientation, posx, posy, and colour。orientation 表示了表示了“i”砖块的四个状砖块的四个状态,可能的取值为态,可能的取值为 0, 1, 2, 3,砖块的砖块的状态如图状态如图11.4所示,由状态所示,由状态0到状态到状态1是是“i”砖块固定一个特定点顺时针旋转砖块固定一个特定点顺时针旋转90度。依此类推,状态度。依此类推,状态3的下一个状态是状的下一个状态是状态态0。posx, posy记录了特定点(图中记录了特定点(图中黑点)的坐标。黑点)的坐标。colo
9、ur为砖块的颜色值。为砖块的颜色值。 10章节课件11章节课件可视化设计n实验指导书实验指导书p10512章节课件双缓冲双缓冲n普通绘图方式与双缓冲绘图方式的区别普通绘图方式与双缓冲绘图方式的区别在于:普通绘图方式可以看做是在屏幕在于:普通绘图方式可以看做是在屏幕上直接绘制图形,双缓冲绘图方式是现上直接绘制图形,双缓冲绘图方式是现在内存中创建的在内存中创建的“虚拟屏幕虚拟屏幕”上绘制,上绘制,然后将绘制完成的图形一次性然后将绘制完成的图形一次性“拷贝拷贝”到屏幕上。到屏幕上。13章节课件n1. 在上述实验的基础上,实现其它类型在上述实验的基础上,实现其它类型的砖块。的砖块。n2. 进一步完善程
10、序,实现两个人能同时进一步完善程序,实现两个人能同时玩的游戏模式。玩的游戏模式。 14章节课件另一种另一种tetris实现思路实现思路n前面的实例为了让大家应用前面的实例为了让大家应用c+的封装的封装性、继承性和多态性,代码显得复杂。性、继承性和多态性,代码显得复杂。下面我们使用数学的方法简化代码下面我们使用数学的方法简化代码n重新设计重新设计cbrick类类15章节课件n观察方块,可以发现,所有的方块都有观察方块,可以发现,所有的方块都有4个小的正方形组成,那么可以使用个小的正方形组成,那么可以使用4个坐个坐标分别表示标分别表示4个小方块所处的位置,从而个小方块所处的位置,从而确定方块的类型
11、。确定方块的类型。n左上角的小方块坐标为(左上角的小方块坐标为(0,0),向右为),向右为x轴正方向,向下为轴正方向,向下为y轴正方向轴正方向16章节课件static int brickx74=0,1,2,3,0,1,1,2,2,1,1,0,1,1,2,2 ,0,0,1,2,2,2,1,0,0,1,1,2;static int bricky74=0,0,0,0,0,0,1,1,0,0,1,1,0,1,0,1 ,0,1,1,1,0,1,1,1,0,0,1,0;17章节课件#ifndef brick_h#define brick_h#include bin.hstatic int brickx74
12、=0,1,2,3,0,1,1,2,2,1,1,0,1,1,2,2,0,0,1,2,2,2,1,0,0,1,1,2;staticint bricky74=0,0,0,0,0,0,1,1,0,0,1,1,0,1,0,1,0,1,1,1,0,1,1,1,0,0,1,0;class cbrick protected: int colour; unsigned int x4; unsigned int y4; public: cbrick(); unsigned char getcolour() return colour; ; void setcolour(unsigned char newcolou
13、r) colour = newcolour; ; bool move(int offsetx,int offsety,unsigned char* binimage); /移动移动 bool rotate(unsigned char* binimage); /旋转旋转 void operator(unsigned char* binimage);/输出图像输出图像;#endif18章节课件构造函数构造函数cbrick:cbrick()colour = (rand() % 7)+1;for(int i=0;i4;i+)xi=brickxcolour-1i;yi=brickycolour-1i;1
14、9章节课件移动方块移动方块bool cbrick:move(int offsetx,int offsety,unsigned char* binimage)int i;int x4,y4;for(i=0;i4;i+)/针对每一个小方格的移动针对每一个小方格的移动xi=xi+offsetx;yi=yi+offsety;if(xi=10|yi=20) /判断是否能够移动成功判断是否能够移动成功return false;if(binimageyixi!=0)return false;for(i=0;i4;i+)xi=xi;yi=yi;return true;20章节课件旋转旋转n点点p(x,y)到原
15、点到原点o绕绕o点逆时针旋转角度点逆时针旋转角度后到点后到点p(x,y)。由三角函数的几何意由三角函数的几何意义,有义,有x = r*cos ,y = r*sin 和和x = r*cos( +) , y = r*sin( + ),推推出:出: x = x * cos y * sin y = y * cos + x * sin 21章节课件n当把旋转点一般化为当把旋转点一般化为q(x0,y0),得到:得到: x = x0 + (x - x0) cos - (y - y0) sin y = y0 + (y - y0) cos + (x - x0) sin 22章节课件旋转旋转n任意点(任意点(x,
16、 y)绕其中心绕其中心 (x0, y0)逆时针旋转逆时针旋转angle角度后,新的坐标位置(角度后,新的坐标位置(x1, y1)的计算公式为:的计算公式为: x1 = (x x0) cos (y y0) sin x0; y1= (x x0) sin (y y0) cos y0; n将坐标将坐标(x,y)绕绕(x0,y0)顺时针旋转顺时针旋转90度度(相当相当于逆时针于逆时针-90度度),得到的新坐标,得到的新坐标(x1,y1),则,则满足:满足:nx1=x0+y-y0ny1=y0+x0-x23章节课件旋转bool cbrick:rotate(unsigned char* binimage)in
17、t i;int xt4,yt4;for(i=0;i4;i+)/进行顺时针进行顺时针90度坐标变换度坐标变换xti=yi+x1-y1;yti=x1+y1-xi;if(xti=10|yti=20)return false;if(binimageytixti!=0)return false;for(i=0;i(unsigned char* binimage) for(int i=0;igetwidth();binheight=bin-getheight();/ start the game 26章节课件if (!brickinflight&!gameover) activebrick = n
18、ew cbrick; bin-getimage(outputimage); notcollide=activebrick-move(binwidth/2, 0,outputimage); if (notcollide) brickinflight = 1; activebrick-operator(outputimage); invalidate(false);27章节课件 else /程序结束程序结束 gameover = 1; delete activebrick; brickinflight = 0; 28章节课件 if (brickinflight&!gameover) bin
19、-getimage(outputimage); notcollide = activebrick-move(0,1,outputimage); /下落下落 if (notcollide) activebrick-operator(outputimage); 29章节课件 else brickinflight = 0; /bin-getimage(outputimage); activebrick-operator(outputimage); bin-setimage(outputimage);invalidate(false); numlines = numlines + bin-removefulllines(); bin-getimage(outputimage); invalidate(false); if (gameover) killtimer(0);if(messagebox(输了吧,还玩么输了吧,还玩么,提示提示,mb_yesno)=idyes)ongamestart();else /exit(0); postquitmessage(0);/这两种方法都可以退出程序这两种方法都可以退出程序 cview:o
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 建筑电气应急照明转换时间测试方法选择原则
- 水库管道泄洪方案范本
- 13.1 磁场 磁感线 学案-2022-2023学年高二物理上学期(人教版2019必修第三册)
- 不规则设计讲解
- 设计机器人介绍
- 精神病住院病人入院流程
- 预防医学科疾病预防控制措施指南
- 病理科组织病理学培训规范
- 耐碳青霉烯肺炎克雷伯杆菌
- 动物线描设计技法解析
- 2024年陕西省西安市灞桥区西安国际港务区铁一中陆港初级中学陆港分校小升初分班考数学试题
- GB/T 28294-2024钢铁渣复合料
- 2024年安徽省初中学业水平考试中考英语试卷(真题+答案)
- DB11T 489-2024 建筑基坑支护技术规程
- 《春夜喜雨》完美版课件
- 2021年山东省淄博市中考生物真题
- GB/T 38537-2020纤维增强树脂基复合材料超声检测方法C扫描法
- GB/T 28037-2011信息技术投影机通用规范
- GA/T 1400.2-2017公安视频图像信息应用系统第2部分:应用平台技术要求
- 多维阅读第4级Animal Fathers 动物爸爸 课件
- 颈动脉超声检查课件
评论
0/150
提交评论