C++程序设计实验报告 TetrisC++双人版 西安科技大学.docx
- 文档编号:8224849
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:10
- 大小:59.42KB
C++程序设计实验报告 TetrisC++双人版 西安科技大学.docx
《C++程序设计实验报告 TetrisC++双人版 西安科技大学.docx》由会员分享,可在线阅读,更多相关《C++程序设计实验报告 TetrisC++双人版 西安科技大学.docx(10页珍藏版)》请在冰豆网上搜索。
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总结 优点: 实现了双人游戏模式,有各自独立的系统。 缺点: 反应慢,导致游戏出现延迟较高。 未能实现砖块预测功能。 开发过程: 首先完善了所有砖块的显示,其次实现了双游戏界面功能,并逐渐完善显示函数等问题。 心得体会: 完善所有砖块时遇到不少问题,如: 下标越界。 无法显示等,经过思考能解决。 双游戏界面起初没有想法,经讨论过后有了头绪,并逐步实现。 双人游戏过程在测试过程中遇到了不少问题,一遍遍反复的修改、再测试过程中完善了游戏,体会到了‘写’游戏的乐趣。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+程序设计实验报告 TetrisC+双人版 西安科技大学 C+ 程序设计 实验 报告 TetrisC 双人 西安 科技大学