




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2012年计算机实习报告计算机实习报告 一功能说明1.1总体功能说明本工程用C+语言实现了俄罗斯方块经典游戏。俄罗斯方块游戏特点:俄罗斯方块的基本规则是通过键盘控制移动、旋转和摆放游戏自动输出的各种方块,使之排列成完整的一行或多行并且消除得分,上手简单,是一款经典游戏。在经典玩法(正常模式)的基础上,本程序还添加了挑战模式,即在游戏伊始时在游戏区域中随机分布方块,减小了留给玩家调整方块的时间和区域,需要通过玩家不断填补消行才能把游戏进行下去。游戏会随着玩家的得分的增多而加大方块下落的速度,从而增加游戏难度,因此也在原来的基础上大大增加了游戏的可玩性。游戏中还增加了Esc键的功能,从而可以实现暂停游戏和退出游戏的功能。1.2用户界面这是游戏的初始界面。出现游戏名,根据提示,玩家按下“c”“n”即可自行选择挑战模式和正常模式,难度不同。这样既明确了游戏名称,提供两种模式的入口,又给玩家一个准备的时间以自行控制游戏开始,不必一打开文件就突然开始游戏,增加了游戏的人性化。以上两图为进入游戏后的主界面,分别为正常模式和挑战模式。中间的区域为游戏主要界面,游戏从上往下随机产生并自动输出七种方块,对俄罗斯方块的基本操作如(左移),(右移),(方块变形),(加速下落)都在此区域里完成。最上方显示的是模式。右边的区域显示一些与游戏相关的信息,从上往下分别是下落速度、游戏得分、游戏操作说明,编者信息。此图为按下“Esc”键后出现的画面。程序支持Esc键暂停的功能,即按下后,按Y键退出,按N键可继续游戏,玩家中途有事离开,回来后也可继续游戏,提供了方便。1.3使用方法打开程序后根据屏幕上的提示信息,按下回车键以进入游戏界面开始游戏。进入游戏界面后,根据屏幕右下方的游戏说明,通过键盘上(左移),(右移),(方块变形),(加速下落)控制方块。游戏过程中,可按“Esc”键暂停,并可以通过“Y”和“C”键选择退出和继续。游戏结束之后,通过键盘按键“Y”和“N”选择是否退出游戏。,:左移,右移,翻转和加速下落。Esc:暂停/继续/退出游戏难度配置是随着分数的增加而提高的。二程序设计说明2.1 总体设计框架程序以main函数为主线,在main函数中调用其他函数,具体算法主要在其他函数中实现,使程序更加简洁明了,清晰而有层次。除main函数外,还有Start,Begin,Block_birth,Print,Clear,Turn,Intomap,Available,Deleteline,Gameover十个实现算法的函数,分别用来实现初始界面,初始游戏,生成方块,打印方块,擦除方块,旋转方块,更改地图矩阵,判断是否放下,消行,游戏结束的功能。框架图如下:开始显示控制台窗口(游戏初始界面)选择游戏模式点按y进入挑战模式点按n进入正常模式设置界面,生成已累积方块 随机产生方块判断对方块的操作 Y判断是否下移 N判断能否放下 N Y判断是否满行 N Y消行游戏结束判断是否退出 N Y退出程序2.2 关键算法描述本工程主要采用了数组来存储矩阵,用三维数组(block_shape744)存储了最基本的7种俄罗斯方块,而在具体操作中则通过对另外两个新定义的二维数组当前方块(tshape44)与新方块(newshape44)来实现各种操作与判断。打印函数Print()和擦除函数Clear()可实现方块的移动。判断函数Available ()进行方块满行和叠加的判断,主要是通过定义了一个二维的地图矩阵map_shape2446,在有方块的地方值为1,无则为0,对于“”字符横坐标占两个的问题,统一取其左边第一个位置为1进行各种判断操作。关键算法 1:算法功能:在主程序中接收键盘传来的信息,并对所要操纵的方块做相应的操作(翻转,左移,右移,下落),包括Esc键控制的暂停/继续/退出游戏。void Turn(int block_shape44)/操作方块int direction = _getch();switch(direction)case 72:/up 方块翻转for(int k=0;k4;k+)for(int j=0;j4;j+)block_newshape3-jk = block_shapekj;if(Available(block_newshape,0,0)Clear(block_tshape);Print(block_newshape);for(int k=0;k4;k+)for(int j=0;j4;j+)block_tshapekj = block_newshapekj;break;case 75:/left 方块左移if(Available(block_tshape,-2,0)Clear(block_tshape);x_coordinate-=2;Print(block_tshape);break;case 77:/right 方块右移if(Available(block_tshape,2,0)Clear(block_tshape);x_coordinate+=2;Print(block_tshape);break;case 80:/down 方块下移delay=delay_max;break;case 27:/Esc 暂停游戏textout(handle,23,9,BColors,1,Do you want to quit?);textout(handle,24,10,BColors,1,press y to exit);textout(handle,24,11,BColors,1,press n to continue);int temp = _getch();switch(temp)case 121: /Y 退出游戏textout(handle,24,9,Colors,1, );textout(handle,24,10,Colors,1, ); textout(handle,24,11,Colors,1, );textout(handle,28,12,BColors,1,score:);char output10;/临时输出矩阵itoa(score,output,10);textout(handle,35,12,BColors,1,output);PlaySound(dead.wav,NULL,SND_FILENAME|SND_ASYNC);exit(0);case 110: /N 继续游戏textout(handle,24,9,Colors,1, );textout(handle,24,10,Colors,1, ); textout(handle,24,11,Colors,1, );break;default: /输入错误提示textout(handle,50,10,Colors,1,input error.);textout(handle,50,11,Colors,1,if you want to exit,);textout(handle,50,12,Colors,1,please press Esc again);Sleep(1000);textout(handle,50,10,Colors,1, );textout(handle,50,11,Colors,1, );textout(handle,50,12,Colors,1, );break;关键算法 2:算法功能:判断方块能否出现在某个位置。bool Available(int block_shape44,int x_move,int y_move)/判断方块能否放下for(int x=0;x4;x+)for(int y=0;y4;y+)if (block_shapexy=1)switch(y)case 0:if (map_shapey_coordinate+y_move+xx_coordinate+x_move+y&block_shapexy)return 0;break;case 1:case 2:case 3:if (map_shapey_coordinate+y_move+xx_coordinate+x_move+2*y&block_shapexy)return 0;break;return 1;关键算法 3;算法功能:消除已经填满的一行。void Deleteline()/擦除一行方块for(int y=0;y4;y+)for(int x=0;x4;x+)if(block_tshapeyx=1)if(Block_Full(y)/判断是否满行 textout(handle,30,7,GColors,1,消行成功!); Sleep(500); textout(handle,30,7,GColors,1, );/显示“消行成功”couta;/消行时蜂鸣score+=10;/加分if(speed49)speed=49;delay_max=2;elsedelay_max=100-speed*2;char output10;/临时输出矩阵itoa(score,output,10);textout(handle,58,9,BColors,1,output);itoa(speed,output,10);textout(handle,58,5,BColors,1,output);for(int a=y_coordinate+y;a3;a-)for(int b=21;b3;x-)for(int y=21;y45;y+=2)textout(handle,y,x,Colors,1, );if(map_shapexy=1)textout(handle,y,x,Colors,1,);/从消行处开始向上重新打印2.3 程序设计的难点和关键点第一对于方块的位置的判断。因为在方块做任何操作之前都要进行判断,看变化之后的方块所处的位置具不具备出现方块的条件,即是否该坐标位置是否已经被占用。因此一个能够通用的判断函数就非常关键,在本程序中函数bool Available()就发挥着这个作用。第二对于方块的操作。向左向右相对来说比较好解决,只需要修改横坐标即可,而向上键则需要实现方块的反转,这需要用到一个类似矩阵转置的算法。向下的实现引入了延迟量,即相当每一层横坐标的循环中给玩家一个操作时间,当玩家按“”就相当于放弃调整进入下一个横坐标的循环。第三对于消行的判断与操作。因为“”字符横坐标占两个的问题,导致打印方块时横坐标都要乘以2,于是统一取左边第一个位置为1进行各种操作。故最终判断是否满行时该行的地图矩阵存储的数据是1、0交错的。在判断消行时因为每次消行判断只与当前操作的方块有关,所以判断只需在有方块的横坐标处进行判断,再者消行时也只从开始消行的横坐标向上操作,一下部分不需要变动,可以增加程序执行的效率。2.4 调试的方法问题 1:“”字符横向输出占两格问题同样是坐标,因为之前下手写比较简单的打印和擦除函数实现方块移动的时候,没有细想就用横坐标乘以2的方式把方块画出来了,到了后期编判断函数的时候一直为此烦恼,后来索性把打印的“”换成“10”观察数据应该如何存储,而得出向左靠齐存储的想法。问题 2:判断函数问题因为要编一个通用的判断函数,所以一直向左向右判断与向下判断与原地判断就要都写在一个函数里,再加上横向输出占两格的问题,一度无法实现,不过通过不断运行调试,纵然有很多错误之处,但每发现一个错误就会都修改程序消除这个错误,但是其他错误并没有解决,但当你针对每一个错误解决完的时候,也就是编出了正确代码的时候。问题4:itoa函数的调试过程分数显示时需用调用了这个函数。经过多次调试,发现其初始是默认初始,便把初始置0,后来运行程序分数便能够正确累加。问题3:语法错误程序刚编写的时候有许多语法错误,后经过不断地设断点调试,以及分模块的调试,逐步修正,完成了整个程序。2.5 程序性能评价在程序运行的效果上还是非常流畅的,不论是方块自身的反转变换移动,还是满行后的消行都没有延迟,在实现键盘操纵的过程中也没有什么延迟感。在程序设计上大体上感觉还是不错的,通过几个函数模块互相嵌套调用实现程序设计上的几个模块的功能,减少了代码重复率,增加了代码执行的效率。在程序的精简度方面做的还不够,由于许多函数内都重复调用了一些变量,导致可能设置了较多的全局变量。另外方块并没有实现彩色随机出现,而都为红色。且在界面右边也未设计出现下一个方块的函数,增大了游戏的难度。但基于此程序中方块生成及打印的算法,这两点恐怕无法实现,在这一点上做得不够好。三心得体会通过这次小学期的计算机实习,我的编程能力的得到了很大提升。通过实践将原来学习的许多理论知识应用到编程实际中,不仅巩固了自己的与原来已经掌握的知识,还锻炼了自己的动手能力,增强了信心。之前正常课时的C+学习只是基于书本,平时的上机也只局限于对一些小程序的调试和部分语句的编写,表明上虽然懂了,但是离实践还有很远。我们真正消化为自己掌握的内容其实很少,所以对于C+,只是个平面的印象,然而这次计算机实习让它变得立体鲜活。一开始的我还毫无头绪,但是通过老师的讲解,我首先从网上查找了一些代码,自己试着调试,尝试先看懂每个函数的功
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 20644.2-2025特殊环境条件选用导则第2部分:高分子材料
- 汉字翻译成拼音课件
- 汉字的象形文字课件
- 汉字溯源课件谭飞
- 工程结算工作协议书
- 《中国传统文化》19秋冬校内知到智慧树答案
- 我父亲演讲稿
- 2024年秋新北师大版数学一年级上册课件 我上学啦 我上学啦 4.好玩的游戏
- 永旺消防安全知识培训课件
- 永久收入理论课件
- 多媒体教室使用的课件
- 2025年军队专业技能岗位文职人员招聘考试(工程机械驾驶员)历年参考题库含答案详解(5卷)
- 高中英语必背3500单词表完整版
- 疑难病例讨论PPT模板
- 分布式光伏发电项目EPC总包合同范本
- 银行关于不动产抵押物权证保管操作模版
- 大金压缩机使用说明(D型)
- 心肺复苏术(三人组)操作程序及技术标准
- 工程进度计划横道图
- 医药代表销售技巧培训
- 牛的品种及生物学特性
评论
0/150
提交评论