VC++程序设计实验报告俄罗斯方块游戏

上传人:仙*** 文档编号:33895120 上传时间:2021-10-19 格式:DOC 页数:24 大小:706KB
收藏 版权申诉 举报 下载
VC++程序设计实验报告俄罗斯方块游戏_第1页
第1页 / 共24页
VC++程序设计实验报告俄罗斯方块游戏_第2页
第2页 / 共24页
VC++程序设计实验报告俄罗斯方块游戏_第3页
第3页 / 共24页
资源描述:

《VC++程序设计实验报告俄罗斯方块游戏》由会员分享,可在线阅读,更多相关《VC++程序设计实验报告俄罗斯方块游戏(24页珍藏版)》请在装配图网上搜索。

1、西安科技大学计算机学院VC+程序设计实验报告题 目 俄罗斯方块游戏 学 号 0808030405 专业及班级 计算机科学与技术专业0804班姓 名 日 期 2010/11/25 一、 实验目的本实验的目的是综合前面所学的知识,参考实验指导书的知识,开发一个俄罗斯游戏。二、 设计思路1 游戏说明及规则Tetris游戏在一个m*n的矩形框内进行。游戏开始时,矩形框的顶部会随机出现一个由四个小方块构成的砖块,每过一个很短时间(我们称这个时间为一个tick),它就会下落一格,直到它碰到矩形框的低部,然后再过一个tick它就会固定在矩形框的底部,成为固定块。接着再过一个tick顶部又会现一个随机形状,同

2、样每隔一个 tick都会下落,直到接触到底部或者接触到下面的固定块时,再过一个tick它也会成为固定块,再过一个tick之后会进行检查,发现有充满方块的行则会消除它,同时顶部出现下一个随机形状。直到顶部出现的随机形状在刚出现时就与固定块重叠,表示游戏结束。操作说明:光标左键左移 光标右键右移 光标上键翻转 光标下键下移2 Tetris的游戏分析,设计与实现(1)Tetris游戏的矩形框类CBin 首先我们应该描述 Tetris游戏的矩形框。这里我们定义一个CBin类描述Tetris游戏的矩形框。对矩形框进行分析,它应该有三个私有的数据成员为:image,width和height.Cbin类将T

3、etris游戏的矩形框描述成为一个二维数组image,变量width和height存储了image的维数。接下来为CBin类添加五个成员函数:构造函数:CBin(unsigned int w,unsigned int h),析构函数:Cbin(), void getImage(unsigned char*destImage), void setImage(unsigned char*srcImage),unsigned int removeFullIines(). 然后分别在bin.h和bin.cpp中完成Cbin类的定义和函数实现。 (2)Tetris游戏的砖块类:第一步:建立类:CIBri

4、ck, CLBrick, CSBrick,CTBrick, CFSBrick,CFLBrick, COBrick,它们的基类都是CBrick类。它们都有有四个数据成员:orientation,posX,posy,colour. Orientation表示”1”砖块的四个状态,可能取值为0,1,2,3,由状态0到状态1是”1”砖块固定一个特定点顺时针旋转90度.依次类推,状态3的下一个状态是状态0. posX,posy记录了特定点的坐标, colour为砖块的颜色值. 为CIBrick重载7个虚构函数:int shifLeft(CBin*bin), int shifRight(CBin*bin)

5、,int shifDown(CBin*bin), int rotateClockwise(CBin*bin), int checkCollision (CBin*bin),void operator(unsigned char*binImage),void putAtTop(unsigned int newOrient,unsigned int new PosX).第二步:仿照CIBrick,完成CLBrick, CSBrick,CTBrick, CFSBrick,CFLBrick, COBrick类的实现,同样将类定义代码写在brick.h文件中,类实现代码写在brick.h文件中.3. 进

6、一步完善(1)实现砖块的三维化在试图类定义(NewTetrisView .h)中添加两个公有的成员函数声明。在视图类的实现文件(NewTetrisView .cpp)中,添加这两个函数的实现代码。修改试图类的DrawImage函数,添加代码。(2) 使用双缓冲技术解决屏幕闪烁 修改视图类的OnDraw函数。修改视图类的DrawImage函数。4背景音乐的实现。三、 代码实现(代码省略部分参照实验指导书)1. 然后分别在bin.h和bin.cpp中完成Cbin类的定义和函数实现:在文件bin.h中添加三个成员变量和六个成员函数并初始化(代码省略) unsigned char*imgage; un

7、signed int width; unsigned int height; CBin(unsigned int w,unsigned int h); CBin(); unsigned int getWidth()return width;; unsigned int getHeight()return height;; void getImage(unsigned char*destImage); void setImage(unsigned char*srcImage); unsigned int removeFullLines(); ; (2)Tetris游戏的砖块类: CBrick 类

8、的说明如下(文件brick.h):class CBrickprotected:unsigned int orientation;/表示砖块的状态unsigned int posX; /砖块特定点的x坐标unsigned int posY; /砖块特定点的y坐标unsigned chai colour; /砖块的颜色public: unsigned int getOrientation()return Orientation; unsigned int getPosX()return posX; unsigned int getPosY()return posY; unsigned char g

9、etColour()return colour;void setOrientation(unsigned int newOrient)orientation=newOrient;void setPosX(unsigned int newPosX)posX=newPosX; void setPosY(unsigned int newPosY)posY=newPosY;void setColour(unsigned char newColour)colour=newColour;virtual int shiftLeft(CBin* bin)=0; virtual int shiftRight(C

10、Bin* bin)=0; virtual int shiftDown(CBin* bin)=0; virtual int rotateClockwise(CBin* bin)=0;virtual int checkCollision(CBin* bin)=0;virtual void operator(unsigned char* binImage)=0;virtual void putAtTop(unsigned int newOrient,unsigned int newPosX)=0; CIBrick需要重载7个虚函数,CIBrick类的定义如下(文件brick .h):class CI

11、Brick:public CBrickpublic:int shiftLeft(CBin*bin);int shiftRight(CBin*bin);int shiftDown(CBin*bin);int rotateClockwise(CBin*bin);int checkCollision(CBin*bin);void operator(unsigned char*binImage);void putAtTop(unsigned int newOrient,unsigned int newPosX);在后面实现CLBrick, CSBrick,CTBrick, CFSBrick,CFLBr

12、ick, COBrick的6种方块实现中按照上面的步骤重载7个上述虚函数。后面只将各个类型方块实现的代码列出来。/I型砖块代码的实现部分:CIBrick类型砖块:(黑色方块为程序中所选的坐标点)CIBrick类的实现代码(代码省略)/L型砖块代码的实现部分:CLBrick类型砖块:(黑色方块为程序中所选的坐标点) (左移、右移、上键、下键即以下4个消息响应函数与I型砖块代码的实现部分相同,这里就不列出来了)shiftLeft(CBin*bin)shiftDown(CBin*bin)shiftRight(CBin*bin)rotateClockwise(CBin*bin)int CLBrick:

13、checkCollision(CBin *bin)unsigned int width;unsigned int height;unsigned char*image;unsigned int orientation;unsigned int posX;unsigned int posY;width=bin-getWidth();height=bin-getHeight();image=new unsigned char*height;for(unsigned int i=0;igetImage(image);orientation=getOrientation();posX=getPosX(

14、);posY=getPosY();if(orientation=0)if(posX+1width-1)|(posYheight-1)return 0;if(imageposY-2posX!=0)|(imageposY-1posX!=0)|(imageposYposX!=0)|(imageposYposX+1!=0)return 0;if(orientation=1)if(posX+1width-1)|(posY+1height-1)return 0;if(imageposYposX!=0)|(imageposYposX+1!=0)|(imageposYposX+2!=0)|(imageposY

15、+1posX!=0)return 0;if(orientation=2)if(posXwidth-1)|(posY+1height-1)return 0;if(imageposYposX-1!=0)|(imageposYposX!=0)|(imageposY+1posX!=0)|(imageposY+2posX!=0)return 0;if(orientation=3)if(posXwidth-1)|(posYheight-1)return 0;if(imageposYposX-2!=0)|(imageposYposX-1!=0)|(imageposYposX!=0)|(imageposY-1

16、posX!=0)return 0;return 1;void CLBrick:operator(unsigned char* binImage)unsigned int orientation;unsigned int posX;unsigned int posY;unsigned char colour;posX=getPosX();posY=getPosY();orientation=getOrientation();colour=getColour();if(orientation=0)binImageposY-2posX=colour;binImageposY-1posX=colour

17、;binImageposYposX=colour;binImageposYposX+1=colour;if(orientation=1)binImageposYposX=colour;binImageposYposX+1=colour;binImageposYposX+2=colour;binImageposY+1posX=colour;if(orientation=2)binImageposYposX-1=colour;binImageposYposX=colour;binImageposY+1posX=colour;binImageposY+2posX=colour;if(orientat

18、ion=3)binImageposYposX-1=colour;binImageposYposX-2=colour;binImageposYposX=colour;binImageposY-1posX=colour;void CLBrick:putAtTop(unsigned int newOrient, unsigned int newPosX)setPosX(newPosX);setOrientation(newOrient);switch(newOrient)case 0: setPosY(2);break;case 1: setPosY(0);break;case 2: setPosY

19、(0);break;case 3: setPosY(1);break; CSBrick类型砖块:(黑色方块为程序中所选的坐标点)/S型砖块代码的实现部分:(左移、右移、上键、下键消息响应函数与I型砖块代码的实现部分相同,这里就不列出来了)shiftLeft(CBin*bin)shiftDown(CBin*bin)shiftRight(CBin*bin)rotateClockwise(CBin*bin)int CSBrick:checkCollision(CBin *bin)unsigned int width;unsigned int height;unsigned char*image;un

20、signed int orientation;unsigned int posX;unsigned int posY;width=bin-getWidth();height=bin-getHeight();image=new unsigned char*height;for(unsigned int i=0;igetImage(image);orientation=getOrientation();posX=getPosX();posY=getPosY();if(orientation=0)if(posXwidth-1)|(posY+1height-1)return 0;if(imagepos

21、YposX!=0)|(imageposYposX+1!=0)|(imageposY+1posX!=0)|(imageposY+1posX-1!=0)return 0;if(orientation=1)if(posXwidth-1)|(posYheight-1)return 0;if(imageposY-1posX-1!=0)|(imageposYposX-1!=0)|(imageposYposX!=0)|(imageposY+1posX!=0)return 0;if(orientation=2)if(posXwidth-1)|(posYheight-1)return 0;if(imagepos

22、YposX-1!=0)|(imageposYposX!=0)|(imageposY-1posX!=0)|(imageposY-1posX+1!=0)return 0;if(orientation=3)if(posX+1width-1)|(posYheight-1)return 0;if(imageposY-1posX!=0)|(imageposYposX!=0)|(imageposYposX+1!=0)|(imageposY+1posX+1!=0)return 0;return 1;void CSBrick:putAtTop(unsigned int newOrient, unsigned i

23、nt newPosX)setPosX(newPosX);setOrientation(newOrient);switch(newOrient)case 0: setPosY(0);break;case 1: setPosY(1);break;case 2: setPosY(1);break;case 3: setPosY(1);break;void CSBrick:operator (unsigned char *binImage)unsigned int orientation;unsigned int posX;unsigned int posY;unsigned char colour;

24、posX=getPosX();posY=getPosY();orientation=getOrientation();colour=getColour();if(orientation=0)binImageposYposX=colour;binImageposYposX+1=colour;binImageposY+1posX=colour;binImageposY+1posX-1=colour;if(orientation=1)binImageposY-1posX-1=colour;binImageposYposX-1=colour;binImageposYposX=colour;binIma

25、geposY+1posX=colour;if(orientation=2)binImageposY-1posX+1=colour;binImageposY-1posX=colour;binImageposYposX=colour;binImageposYposX-1=colour;if(orientation=3)binImageposY-1posX=colour;binImageposYposX=colour;binImageposYposX+1=colour;binImageposY+1posX+1=colour;/T型砖块代码的实现部分:(黑色方块为程序中所选的坐标点)CTBrick类型

26、砖块:(左移、右移、上键、下键消息响应函数与I型砖块代码的实现部分相同,这里就不列出来了)shiftLeft(CBin*bin)shiftDown(CBin*bin)shiftRight(CBin*bin)rotateClockwise(CBin*bin)int CTBrick:checkCollision(CBin *bin)unsigned int width;unsigned int height;unsigned char*image;unsigned int orientation;unsigned int posX;unsigned int posY;width=bin-getWi

27、dth();height=bin-getHeight();image=new unsigned char*height;for(unsigned int i=0;igetImage(image);orientation=getOrientation();posX=getPosX();posY=getPosY();if(orientation=0)if(posXwidth-1)|(posYheight-1)return 0;if(imageposY-1posX!=0)|(imageposYposX!=0)|(imageposYposX-1!=0)|(imageposYposX+1!=0)retu

28、rn 0;if(orientation=1)if(posX+1width-1)|(posYheight-1)return 0;if(imageposYposX!=0)|(imageposYposX+1!=0)|(imageposY-1posX!=0)|(imageposY+1posX!=0)return 0;if(orientation=2)if(posXwidth-1)|(posY+1height-1)return 0;if(imageposYposX-1!=0)|(imageposYposX!=0)|(imageposYposX+1!=0)|(imageposY+1posX!=0)retu

29、rn 0;if(orientation=3)if(posXwidth-1)|(posYheight-1)return 0;if(imageposYposX-1!=0)|(imageposYposX!=0)|(imageposYposX+1!=0)|(imageposY+1posX!=0)return 0;return 1;void CTBrick:operator (unsigned char *binImage)unsigned int orientation;unsigned int posX;unsigned int posY;unsigned char colour;posX=getP

30、osX();posY=getPosY();orientation=getOrientation();colour=getColour();if(orientation=0)binImageposY-1posX=colour;binImageposYposX=colour;binImageposYposX-1=colour;binImageposYposX+1=colour;if(orientation=1)binImageposY-1posX=colour;binImageposYposX=colour;binImageposY+1posX=colour;binImageposYposX+1=

31、colour;if(orientation=2)binImageposYposX-1=colour;binImageposYposX=colour;binImageposYposX+1=colour;binImageposY+1posX=colour;if(orientation=3)binImageposYposX-1=colour;binImageposYposX=colour;binImageposY-1posX=colour;binImageposY+1posX=colour;void CTBrick:putAtTop(unsigned int newOrient, unsigned

32、int newPosX)setPosX(newPosX);setOrientation(newOrient);switch(newOrient)case 0: setPosY(1);break;case 1: setPosY(1);break;case 2: setPosY(0);break;case 3: setPosY(1);break;/反L型砖块代码的实现部分:(黑色方块为程序中所选的坐标点) CFLBrick类型砖块:(左移、右移、上键、下键消息响应函数与I型砖块代码的实现部分相同,这里就不列出来了)shiftLeft(CBin*bin)shiftDown(CBin*bin)shif

33、tRight(CBin*bin)rotateClockwise(CBin*bin)int CFLBrick:checkCollision(CBin *bin)unsigned int width;unsigned int height;unsigned char*image;unsigned int orientation;unsigned int posX;unsigned int posY;width=bin-getWidth();height=bin-getHeight();image=new unsigned char*height;for(unsigned int i=0;igetI

34、mage(image);orientation=getOrientation();posX=getPosX();posY=getPosY();if(orientation=0)if(posXwidth-1)|(posYheight-1)return 0;if(imageposY-2posX!=0)|(imageposY-1posX!=0)|(imageposYposX!=0)|(imageposYposX-1!=0)return 0;if(orientation=1)if(posX+1width-1)|(posYheight-1)return 0;if(imageposY-1posX!=0)|

35、(imageposYposX!=0)|(imageposYposX+1!=0)|(imageposYposX+2!=0)return 0;if(orientation=2)if(posX+1width-1)|(posY+1height-1)return 0;if(imageposYposX!=0)|(imageposYposX+1!=0)|(imageposY+1posX!=0)|(imageposY+2posX!=0)return 0;if(orientation=3)if(posXwidth-1)|(posY+1height-1)return 0;if(imageposYposX-2!=0

36、)|(imageposYposX-1!=0)|(imageposYposX!=0)|(imageposY+1posX!=0)return 0;return 1;void CFLBrick:operator (unsigned char *binImage)unsigned int orientation;unsigned int posX;unsigned int posY;unsigned char colour;posX=getPosX();posY=getPosY();orientation=getOrientation();colour=getColour();if(orientati

37、on=0)binImageposY-2posX=colour;binImageposY-1posX=colour;binImageposYposX=colour;binImageposYposX-1=colour;if(orientation=1)binImageposY-1posX=colour;binImageposYposX=colour;binImageposYposX+1=colour;binImageposYposX+2=colour;if(orientation=2)binImageposYposX=colour;binImageposYposX+1=colour;binImag

38、eposY+1posX=colour;binImageposY+2posX=colour;if(orientation=3)binImageposYposX-2=colour;binImageposYposX-1=colour;binImageposYposX=colour;binImageposY+1posX=colour;void CFLBrick:putAtTop(unsigned int newOrient, unsigned int newPosX) setPosX(newPosX);setOrientation(newOrient);switch(newOrient)case 0:

39、 setPosY(2);break;case 1: setPosY(1);break;case 2: setPosY(0);break;case 3: setPosY(0);break;/反S型砖块代码的实现部分:(黑色方块为程序中所选的坐标点)CFSBrick类型砖块:(左移、右移、上键、下键消息响应函数与I型砖块代码的实现部分相同,这里就不列出来了)shiftLeft(CBin*bin)shiftDown(CBin*bin)shiftRight(CBin*bin)rotateClockwise(CBin*bin)int CFSBrick:checkCollision(CBin *bin)u

40、nsigned int width;unsigned int height;unsigned char*image;unsigned int orientation;unsigned int posX;unsigned int posY;width=bin-getWidth();height=bin-getHeight();image=new unsigned char*height;for(unsigned int i=0;igetImage(image);orientation=getOrientation();posX=getPosX();posY=getPosY();if(orient

41、ation=0)if(posXwidth-1)|(posYheight-1)return 0;if(imageposY-1posX!=0)|(imageposYposX!=0)|(imageposYposX-1!=0)|(imageposY+1posX-1!=0)return 0;if(orientation=1)if(posX+1width-1)|(posYheight-1)return 0;if(imageposY-1posX-1!=0)|(imageposY-1posX!=0)|(imageposYposX!=0)|(imageposYposX+1!=0)return 0;if(orie

42、ntation=2)if(posX+1width-1)|(posYheight-1)return 0;if(imageposYposX!=0)|(imageposY+1posX!=0)|(imageposY-1posX+1!=0)|(imageposYposX+1!=0)return 0;if(orientation=3)if(posXwidth-1)|(posY+1height-1)return 0;if(imageposYposX-1!=0)|(imageposYposX!=0)|(imageposY+1posX!=0)|(imageposY+1posX+1!=0)return 0;ret

43、urn 1;void CFSBrick:operator (unsigned char *binImage)unsigned int orientation;unsigned int posX;unsigned int posY;unsigned char colour;posX=getPosX();posY=getPosY();orientation=getOrientation();colour=getColour();if(orientation=0)binImageposY-1posX=colour;binImageposYposX=colour;binImageposYposX-1=

44、colour;binImageposY+1posX-1=colour;if(orientation=1)binImageposY-1posX-1=colour;binImageposY-1posX=colour;binImageposYposX=colour;binImageposYposX+1=colour;if(orientation=2)binImageposYposX=colour;binImageposY+1posX=colour;binImageposY-1posX+1=colour;binImageposYposX+1=colour;if(orientation=3)binIma

45、geposYposX-1=colour;binImageposYposX=colour;binImageposY+1posX=colour;binImageposY+1posX+1=colour;void CFSBrick:putAtTop(unsigned int newOrient, unsigned int newPosX)setPosX(newPosX);setOrientation(newOrient);switch(newOrient)case 0: setPosY(1);break;case 1: setPosY(1);break;case 2: setPosY(1);break

46、;case 3: setPosY(0);break;/田字形型砖块代码的实现部分:(黑色方块为程序中所选的坐标点)COBrick类型砖块:(左移、右移、上键、下键消息响应函数与I型砖块代码的实现部分相同,这里就不列出来了)shiftLeft(CBin*bin)shiftDown(CBin*bin)shiftRight(CBin*bin)rotateClockwise(CBin*bin)int COBrick:checkCollision(CBin *bin)unsigned int width;unsigned int height;unsigned char*image;unsigned i

47、nt orientation;unsigned int posX;unsigned int posY;width=bin-getWidth();height=bin-getHeight();image=new unsigned char*height;for(unsigned int i=0;igetImage(image);orientation=getOrientation();posX=getPosX();posY=getPosY();if(orientation=0)if(posX+1width-1)|(posY+1height-1)return 0;if(imageposYposX!

48、=0)|(imageposYposX+1!=0)|(imageposY+1posX!=0)|(imageposY+1posX+1!=0)return 0;if(orientation=1)if(posXwidth-1)|(posY+1height-1)return 0;if(imageposYposX-1!=0)|(imageposYposX!=0)|(imageposY+1posX-1!=0)|(imageposY+1posX!=0)return 0;if(orientation=2)if(posXwidth-1)|(posYheight-1)return 0;if(imageposYpos

49、X!=0)|(imageposYposX-1!=0)|(imageposY-1posX-1!=0)|(imageposY-1posX!=0)return 0;if(orientation=3)if(posX+1width-1)|(posYheight-1)return 0;if(imageposYposX!=0)|(imageposY-1posX!=0)|(imageposY-1posX+1!=0)|(imageposYposX+1!=0)return 0;return 1;void COBrick:operator (unsigned char *binImage)unsigned int

50、orientation;unsigned int posX;unsigned int posY;unsigned char colour;posX=getPosX();posY=getPosY();orientation=getOrientation();colour=getColour();if(orientation=0)binImageposYposX=colour;binImageposYposX+1=colour;binImageposY+1posX=colour;binImageposY+1posX+1=colour;if(orientation=1)binImageposYpos

51、X-1=colour;binImageposYposX=colour;binImageposY+1posX-1=colour;binImageposY+1posX=colour;if(orientation=2)binImageposY-1posX=colour;binImageposY-1posX-1=colour;binImageposYposX=colour;binImageposYposX-1=colour;if(orientation=3)binImageposY-1posX=colour;binImageposYposX=colour;binImageposY-1posX+1=colour;binImageposYposX+1=colour;void COBrick:putAtTop(unsigned int newOrient, unsigned int newPosX) setPosX(newPosX);setOrientation(newOrient);switch(newOrient)case 0:

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!