ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:220.57KB ,
资源ID:25456575      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/25456575.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(北邮 C++计算机实习报告.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

北邮 C++计算机实习报告.docx

1、北邮 C+计算机实习报告计算机实习报告 一功能说明1.1总体功能说明本工程用C+语言实现了俄罗斯方块经典游戏。俄罗斯方块游戏特点:俄罗斯方块的基本规则是通过键盘控制移动、旋转和摆放游戏自动输出的各种方块,使之排列成完整的一行或多行并且消除得分,上手简单,是一款经典游戏。在经典玩法(正常模式)的基础上,本程序还添加了挑战模式,即在游戏伊始时在游戏区域中随机分布方块,减小了留给玩家调整方块的时间和区域,需要通过玩家不断填补消行才能把游戏进行下去。游戏会随着玩家的得分的增多而加大方块下落的速度,从而增加游戏难度,因此也在原来的基础上大大增加了游戏的可玩性。游戏中还增加了Esc键的功能,从而可以实现暂

2、停游戏和退出游戏的功能。1.2用户界面这是游戏的初始界面。出现游戏名,根据提示,玩家按下“c”“n”即可自行选择挑战模式和正常模式,难度不同。这样既明确了游戏名称,提供两种模式的入口,又给玩家一个准备的时间以自行控制游戏开始,不必一打开文件就突然开始游戏,增加了游戏的人性化。以上两图为进入游戏后的主界面,分别为正常模式和挑战模式。中间的区域为游戏主要界面,游戏从上往下随机产生并自动输出七种方块,对俄罗斯方块的基本操作如(左移),(右移),(方块变形),(加速下落)都在此区域里完成。最上方显示的是模式。右边的区域显示一些与游戏相关的信息,从上往下分别是下落速度、游戏得分、游戏操作说明,编者信息。

3、此图为按下“Esc”键后出现的画面。程序支持Esc键暂停的功能,即按下后,按Y键退出,按N键可继续游戏,玩家中途有事离开,回来后也可继续游戏,提供了方便。1.3使用方法打开程序后根据屏幕上的提示信息,按下回车键以进入游戏界面开始游戏。进入游戏界面后,根据屏幕右下方的游戏说明,通过键盘上(左移),(右移),(方块变形),(加速下落)控制方块。游戏过程中,可按“Esc”键暂停,并可以通过“Y”和“C”键选择退出和继续。游戏结束之后,通过键盘按键“Y”和“N”选择是否退出游戏。,:左移,右移,翻转和加速下落。Esc:暂停/继续/退出游戏难度配置是随着分数的增加而提高的。二程序设计说明2.1 总体设计

4、框架程序以main函数为主线,在main函数中调用其他函数,具体算法主要在其他函数中实现,使程序更加简洁明了,清晰而有层次。除main函数外,还有Start,Begin,Block_birth,Print,Clear,Turn,Intomap,Available,Deleteline,Gameover十个实现算法的函数,分别用来实现初始界面,初始游戏,生成方块,打印方块,擦除方块,旋转方块,更改地图矩阵,判断是否放下,消行,游戏结束的功能。框架图如下: Y N N Y N Y N Y2.2 关键算法描述本工程主要采用了数组来存储矩阵,用三维数组(block_shape744)存储了最基本的7种

5、俄罗斯方块,而在具体操作中则通过对另外两个新定义的二维数组当前方块(tshape44)与新方块(newshape44)来实现各种操作与判断。打印函数Print()和擦除函数Clear()可实现方块的移动。判断函数Available ()进行方块满行和叠加的判断,主要是通过定义了一个二维的地图矩阵map_shape2446,在有方块的地方值为1,无则为0,对于“”字符横坐标占两个的问题,统一取其左边第一个位置为1进行各种判断操作。关键算法 1:算法功能:在主程序中接收键盘传来的信息,并对所要操纵的方块做相应的操作(翻转,左移,右移,下落),包括Esc键控制的暂停/继续/退出游戏。void Tur

6、n(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_n

7、ewshapekj; 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

8、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(handl

9、e,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(han

10、dle,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,1

11、2,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

12、: 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

13、,GColors,1, );/显示“消行成功” couta;/消行时蜂鸣 score+=10;/加分 if(speed49) speed=49; delay_max=2; else delay_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

14、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()就发挥着这个作用。第二对于方块的操作。向左向右相对来说比较好解决,只需要修改横坐

15、标即可,而向上键则需要实现方块的反转,这需要用到一个类似矩阵转置的算法。向下的实现引入了延迟量,即相当每一层横坐标的循环中给玩家一个操作时间,当玩家按“”就相当于放弃调整进入下一个横坐标的循环。第三对于消行的判断与操作。因为“”字符横坐标占两个的问题,导致打印方块时横坐标都要乘以2,于是统一取左边第一个位置为1进行各种操作。故最终判断是否满行时该行的地图矩阵存储的数据是1、0交错的。在判断消行时因为每次消行判断只与当前操作的方块有关,所以判断只需在有方块的横坐标处进行判断,再者消行时也只从开始消行的横坐标向上操作,一下部分不需要变动,可以增加程序执行的效率。2.4 调试的方法问题 1:“”字符

16、横向输出占两格问题 同样是坐标,因为之前下手写比较简单的打印和擦除函数实现方块移动的时候,没有细想就用横坐标乘以2的方式把方块画出来了,到了后期编判断函数的时候一直为此烦恼,后来索性把打印的“”换成“10”观察数据应该如何存储,而得出向左靠齐存储的想法。问题 2:判断函数问题因为要编一个通用的判断函数,所以一直向左向右判断与向下判断与原地判断就要都写在一个函数里,再加上横向输出占两格的问题,一度无法实现,不过通过不断运行调试,纵然有很多错误之处,但每发现一个错误就会都修改程序消除这个错误,但是其他错误并没有解决,但当你针对每一个错误解决完的时候,也就是编出了正确代码的时候。问题4:itoa函数

17、的调试过程分数显示时需用调用了这个函数。经过多次调试,发现其初始是默认初始,便把初始置0,后来运行程序分数便能够正确累加。问题3:语法错误程序刚编写的时候有许多语法错误,后经过不断地设断点调试,以及分模块的调试,逐步修正,完成了整个程序。2.5 程序性能评价在程序运行的效果上还是非常流畅的,不论是方块自身的反转变换移动,还是满行后的消行都没有延迟,在实现键盘操纵的过程中也没有什么延迟感。在程序设计上大体上感觉还是不错的,通过几个函数模块互相嵌套调用实现程序设计上的几个模块的功能,减少了代码重复率,增加了代码执行的效率。在程序的精简度方面做的还不够,由于许多函数内都重复调用了一些变量,导致可能设

18、置了较多的全局变量。另外方块并没有实现彩色随机出现,而都为红色。且在界面右边也未设计出现下一个方块的函数,增大了游戏的难度。但基于此程序中方块生成及打印的算法,这两点恐怕无法实现,在这一点上做得不够好。三心得体会通过这次小学期的计算机实习,我的编程能力的得到了很大提升。通过实践将原来学习的许多理论知识应用到编程实际中,不仅巩固了自己的与原来已经掌握的知识,还锻炼了自己的动手能力,增强了信心。之前正常课时的C+学习只是基于书本,平时的上机也只局限于对一些小程序的调试和部分语句的编写,表明上虽然懂了,但是离实践还有很远。我们真正消化为自己掌握的内容其实很少,所以对于C+,只是个平面的印象,然而这次

19、计算机实习让它变得立体鲜活。一开始的我还毫无头绪,但是通过老师的讲解,我首先从网上查找了一些代码,自己试着调试,尝试先看懂每个函数的功能,大致了解编写俄罗斯方块的基本思路,再自己尝试着一边借鉴一边原创。由于是自己编写的程序,所以开始运行时出现了很多错误,由此我对程序的调试过程有了更加深刻的理解,并能熟练地运用这些调试方法。某些错误是语法的错误,有的是自己的不仔细造成的错误,这些错误都使我对于C+的编程以及自己的细心程度有了极大的提升。通过这次计算机实习,通过俄罗斯方块这个小游戏的编写,我接触了不少不曾用过的函数,了解了控制台编程,体会到模块化,多文件,多线程的好处。这次实习让我在编译原理方面得到了巩固,而且使我们对软件的编写有了一个初步的认识,同时,我的动手能力得到了提高。总之,这次实验让我受益匪浅。

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

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