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

上传人:laozhun 文档编号:2385743 上传时间:2023-02-17 格式:DOC 页数:24 大小:623KB
返回 下载 相关 举报
VC++程序设计实验报告俄罗斯方块游戏.doc_第1页
第1页 / 共24页
VC++程序设计实验报告俄罗斯方块游戏.doc_第2页
第2页 / 共24页
VC++程序设计实验报告俄罗斯方块游戏.doc_第3页
第3页 / 共24页
VC++程序设计实验报告俄罗斯方块游戏.doc_第4页
第4页 / 共24页
VC++程序设计实验报告俄罗斯方块游戏.doc_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《VC++程序设计实验报告俄罗斯方块游戏.doc》由会员分享,可在线阅读,更多相关《VC++程序设计实验报告俄罗斯方块游戏.doc(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)unsigned int width;unsigned int height;unsigned char

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号