C++程序设计实验报告 TetrisC++双人版 西安科技大学.docx

上传人:b****5 文档编号:8224849 上传时间:2023-01-30 格式:DOCX 页数:10 大小:59.42KB
下载 相关 举报
C++程序设计实验报告 TetrisC++双人版 西安科技大学.docx_第1页
第1页 / 共10页
C++程序设计实验报告 TetrisC++双人版 西安科技大学.docx_第2页
第2页 / 共10页
C++程序设计实验报告 TetrisC++双人版 西安科技大学.docx_第3页
第3页 / 共10页
C++程序设计实验报告 TetrisC++双人版 西安科技大学.docx_第4页
第4页 / 共10页
C++程序设计实验报告 TetrisC++双人版 西安科技大学.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

C++程序设计实验报告 TetrisC++双人版 西安科技大学.docx

《C++程序设计实验报告 TetrisC++双人版 西安科技大学.docx》由会员分享,可在线阅读,更多相关《C++程序设计实验报告 TetrisC++双人版 西安科技大学.docx(10页珍藏版)》请在冰豆网上搜索。

C++程序设计实验报告 TetrisC++双人版 西安科技大学.docx

C++程序设计实验报告TetrisC++双人版西安科技大学

西安科技大学

《C++语言程序设计》

实验报告

题目Tetris_C++(双人版)

院、系(部)计算机科学与技术

日期2015年6月20日

 

1题目要求

①完善原俄罗斯方块方块内容

②制作双人游戏

2功能需求

①所有的方块都可以使用

②双游戏界面(互相独立)

③双人操作系统(互相独立)

3总体设计

3.1系统模块

双游戏界面并相互独立

3.2系统业务处理流程

4详细设计

{

unsignedintbinWidth,binHeight;

CBin*tetrisBin=NULL;//指向游戏面板类对象的指针

unsignedchar**outputImage=NULL;//用于显示目的

//注意:

outputImage独立于CBin对象的image

CBrick*activeBrick=NULL;//指向当前正在下落砖块的指针,注意指针类型

intdifficulty=500;//难度

unsignedinti=0;

unsignedintj=0;

intgameOver=0;//游戏是否结束

intbrickInFlight=0;//砖块是否处于飞行状态

intbrickType=0;//砖块类别

unsignedintinitOrientation=0;//初始状态

intnotCollide=0;//砖块是否冲突

intarrowKey=0;

intscore=0;//记录分数

binWidth=10;//游戏面板的宽度

binHeight=20;//游戏面板的高度

tetrisBin=newCBin(binWidth,binHeight);//创建游戏面板类对象

Welcome();//显示欢迎界面

GotoXY(1,1);//startthecursesmode

//为游戏面板对应的二维数组动态开辟空间

outputImage=newunsignedchar*[binHeight];

for(i=0;i

{

outputImage[i]=newunsignedchar[binWidth];

for(unsignedintj=0;j

outputImage[i][j]=0;

}

Display(outputImage,score);

 

//开始游戏

while(!

gameOver)

{

if(!

brickInFlight)

{

//没有砖块落下时,需要新建一个砖块.

//新建砖块需要随机指定砖块的形状和初始状态.

brickType=(rand()%NUM_BRICK_TYPES)+1;

initOrientation=(unsignedint)(rand()%4);

if(brickType==1)

activeBrick=newCIBrick;

elseif(brickType==2)

activeBrick=newCLBrick;

elseif(brickType==3)

activeBrick=newCSBrick;

elseif(brickType==4)

activeBrick=newCL_2Brick;

elseif(brickType==5)

activeBrick=newCS_2Brick;

elseif(brickType==6)

activeBrick=newCFBrick;

elseif(brickType==7)

activeBrick=newCTBrick;

activeBrick->setColour((unsignedchar)brickType);//动态多态性的体现

activeBrick->putAtTop(initOrientation,binWidth/2);

notCollide=activeBrick->checkCollision(tetrisBin);//检查是否冲突

if(notCollide){

//新建砖块同游戏面板的顶部没有冲突,就可以下落了

brickInFlight=1;

tetrisBin->getImage(outputImage);//拷贝游戏面板类的image到outputImage

activeBrick->operator>>(outputImage);////输出当前下落砖块的映像到outputimage

Display(outputImage,score);//显示outputImage

}

else{

//新建砖块同游戏面板的顶部有冲突,表明面板剩余空间已经放不下新砖块。

//游戏结束

gameOver=1;

deleteactiveBrick;

brickInFlight=0;

}

}

 

//if(brickInFlight)

else

{

//当前有砖块正在下落,因此需要检测用户的按键

if(kbhit())

{//检测是否有键按下

arrowKey=getch();//检查用户输入

if(arrowKey==KEY_RIGHT)

activeBrick->shiftRight(tetrisBin);

elseif(arrowKey==KEY_LEFT)

activeBrick->shiftLeft(tetrisBin);

elseif(arrowKey==KEY_UP)

activeBrick->rotateClockwise(tetrisBin);

elseif(arrowKey==KEY_DOWN)//一键加速下落

{

while(activeBrick->shiftDown(tetrisBin));

}

elseif(arrowKey=='p')

Pause();

//更新屏幕显示

tetrisBin->getImage(outputImage);//拷贝游戏面板类的内部图像到outputImage

activeBrick->operator>>(outputImage);//输出当前下落砖块的映像到outputimage

Display(outputImage,score);

}

//砖块靠重力下落.

Sleep(difficulty);

notCollide=activeBrick->shiftDown(tetrisBin);

if(notCollide)

{

tetrisBin->getImage(outputImage);

activeBrick->operator>>(outputImage);

}

else

{

//砖块落在底部或已固定的砖块上,不再下落.

brickInFlight=0;

//Addthisbrickpermanentlytothebin.

tetrisBin->getImage(outputImage);

activeBrick->operator>>(outputImage);

tetrisBin->setImage(outputImage);

Display(outputImage,score);

//检查是否需要消行

switch(tetrisBin->removeFullLines())//计分方式。

这里还可以实现更复杂的计分方式

{

case1:

score++;break;

case2:

score+=3;break;

case3:

score+=5;break;

case4:

score+=8;break;

}

switch(score/100)//等级确定

{

case0:

difficulty=500;break;

case1:

difficulty=20;break;

case2:

difficulty=170;break;

case3:

difficulty=150;break;

case4:

difficulty=120;break;

case5:

difficulty=100;break;

case6:

difficulty=70;break;

case7:

difficulty=50;break;

case8:

difficulty=20;break;

case9:

difficulty=0;break;

}

//检查消行后,更新外部图像面板

tetrisBin->getImage(outputImage);

}

Display(outputImage,score);

}

}

GotoXY(1,24);

printf("GameOver");

getch();

//释放动态开辟的空间

for(i=0;i

delete[]outputImage[i];

delete[]outputImage;

return0;

}

5测试与实现

 

6总结

优点:

实现了双人游戏模式,有各自独立的系统。

缺点:

反应慢,导致游戏出现延迟较高。

未能实现砖块预测功能。

开发过程:

首先完善了所有砖块的显示,其次实现了双游戏界面功能,并逐渐完善显示函数等问题。

心得体会:

完善所有砖块时遇到不少问题,如:

下标越界。

无法显示等,经过思考能解决。

双游戏界面起初没有想法,经讨论过后有了头绪,并逐步实现。

双人游戏过程在测试过程中遇到了不少问题,一遍遍反复的修改、再测试过程中完善了游戏,体会到了‘写’游戏的乐趣。

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

当前位置:首页 > 总结汇报 > 实习总结

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1