《上海大学计算机认识实习报告VB拼图游戏》由会员分享,可在线阅读,更多相关《上海大学计算机认识实习报告VB拼图游戏(12页珍藏版)》请在金锄头文库上搜索。
1、1 计算机认识实习报告专 业: 计算机科学与技术班级 / 题序: B3 班 第二题:拼图游戏实习题目: 拼图游戏姓 名: xxx 学 号:指导教师:计算机工程与科学学院报告日期 2016 年 6 月 23 日平时表现 优秀 良好 一般 较差系统验收 优秀 良好 一般 较差报告撰写 优秀 良好 一般 较差教师评语成绩:总序号: 247 班级序号: 5 2 一、 实习目的和要求计算机认识实习一般安排在短学期进行,是理论联系实际的重要实践性教学环节。通过认识实习,了解程序设计的一般过程,树立良好的设计方法,巩固有关计算机软件的知识, 加深专业知识的了解, 扩大专业知识面, 培养和提高发现问题、 认识
2、问题、分析问题及解决问题的能力,为有关后续专业课程的学习奠定基础。通过 Visual Basic 语言的使用, 体会使用 VB 进行程序设计的特色, 试探用 VB 开发更为复杂的应用程序;加强高级语言的编程能力,了解计算机软件设计的基本方法和一般步骤;通过实习,对计算机及计算机软件设计有一个较为全面的认识,培养发现问题、认识问题、分析问题及解决问题的能力,提高自学能力和上机动手能力。通过认识实习,学生通过查阅资料了解计算机软件开发技术的最新技术和发展趋势。通过 Visual Basic 语言有关知识的学习,使我们掌握:VB 的安装、设置和操作技能;VB 编程的基本概念;VB 中的常量、变量、表
3、达式及运算;VB 中的数组、记录和控制结构使用;VB 中窗体和控件的设计使用方法,图形、图象类控件的使用;VB 中对话框与菜单程序设计方法;VB 与数据库的链接与应用;简单的游戏软件的设计与开发方法。每人将按要求开发设计一个简单的游戏软件。二、 实习内容这次认识实习,我的主要任务是利用 VB ,设计一个拼图游戏,其具体要求如下:拼图游戏( Puzzle)是一种容易上手的小游戏。本题目要求编程,实现以下功能。游戏时,用户可以选择一幅图作为拼图素材。系统显示的是被分割成 M N 个,并打乱顺序后随机排列的(见图 1)小图块。其中有一块空档。游戏者用鼠标点击与空档相邻的图块,使其与空档互换位置。利用
4、该空档最终恢复图片的原貌,最后一块为底牌(见图 2) ,翻底牌为完成拼图。移动的步数越少或时间越短,说明水平越高。基本要求:程序能完成概述中的基本功能。原始图片可以选择在旁边预览。M 与 N 可由游戏者输入确定。小图块的排列以及作为空档的图块都是随机的。主界面为窗口界面,包含菜单栏。菜单中至少要有“运行”菜单,含“ run ” 命令、“ stop ”命令; “帮助”菜单,含“ Help” 命令、 “ About” 命令( Help 内容是操作说明。About 内容是开发者的姓名、学号、日期等。 (见有关要求的说明。 )建议功能:设置游戏级别。用记步数或计时来记录成绩,供查询或分胜负。空档背景色
5、可选。空档位置也可以指定。3 游戏者可以选择级别:学习级、挑战级、应战级。1. 学习级:作上述一般游戏。2. 挑战级:计时、记步数,记成绩。上排行板。3. 应战级:选一个擂台,比时间、步数分胜负。最后上冠军宝座。“ Undo”功能的实现。若点错图块(如点了无法移动的图) ,报警。作者可以自行发挥各种附加功能和游戏规则,只要在你的帮助信息中给出说明。相信大家都玩过这样的拼图游戏, 但是自己动手去做, 又是另一种很有意义的体验。在认识实习期间,我们上了三次 VB 课程,另外还在机房上了五次机,在这期间我们学习了 VB 的一些基本操作,但是更重要的是在实践中学习。通过自己查阅资料,制作游戏,来理解和
6、运用学到的知识,这样才是实习的目的之所在。三、 系统概要设计说明,功能模块及流程和工作原理系统概要设计说明:要设计一个拼图游戏,其核心是把一个完整的图片分割成若干块,然后随机打乱,再随机去掉其中的一块。通过玩家拼图操作之后,如果拼出的图与原图吻合,那么就视为拼图成功,并记录玩家使用的步数。实现这个游戏的主要设计,应该是判断什么时候可以移动图片,以及什么时候图片与原图吻合。其次是通过空间数组,动态的生成我们需要的数量的 Image 控件,来存储每个图片单元,并且要控制各个空间数组的相对位置。功能模块:主游戏模块:1. 可选难度模式,主要有三种难度,对应三种不同的分割数目。Easy: 3*3; N
7、ormal: 4*4; Hard: 5*5 2. 自定义模式:由玩家自己决定分割的块数,自定义难度。(难度设定我参考了扫雷游戏,让玩家不断突破自己)显示原图:玩家可以在游玩时随时预览原图,方便玩家娱乐。4 自定义图片:为了增大游戏的乐趣,此游戏可以由玩家自定义图片,来进行拼图。“关于”对话框:显示此游戏的有关数据,版本,制作人信息等等。“ Help”对话框:显示游戏的基本操作,难度选择等信息。5 “最佳选手” :可以分别显示不同难度下的最佳成绩美化:美化了游戏背景图,鼠标图标,对话框等,使游戏更加美观。流程和工作原理:首先,点击“新游戏” ,选择游戏难度( Easy, Normal , Har
8、d,自定义) ,通过CommonDialog 控件,来让玩家自己选择图片进行游玩。然后玩家点击分割后打乱的图片,软件会自动判断点击的图片是否可以移动,若可以,则移动。当所有图片都回到它正确的位置时,软件会自动提示拼图成功,并且记录使用的步数,如果是最佳纪录,则上英雄榜。如果有问题,可以点击“浏览原图”来显示原图,或者查看“ Help”和“关于”对话框。点击“退出”即可退出游戏。6 四、 系统详细设计、关键技术与难点、测试数据图片的分割与初始化:首先,是进行图片的分割。在这里我是用的是 PictureClip 控件,因为这个控件方便我们进行分割 (有 col 和 row 属性) 。 如果要分成
9、M*N 的图片块, 那么只需要把 PictureClip的 row 设置成 M, col 设置成 N 即可。然后再根据分割出的块数,对应的生成相应数量的 Image控件数组,调整好每一个控件的相对位置,这样基本操作就完成了。接下来便是随机打乱图片。利用 Rnd 来产生随机数,然后把每个 PictureClip 的图片单元都对应一个随机的 Image控件,这样就随机分配好了各个图片块。然后再随机去掉一块,只需使用 LoadPicture( )即可,这一块用来图片移动。这样初始化就完成了。在这一部分,我认为比较难的是“自定义模式”下,动态生成控件数组,并且根据分割的块数,让 Image 控件自适应
10、大小,不至于由于图片的大小原因,或者分割的块数过多,使得出现图片显示不全,分割的图片不完整等等问题。在这里,我是先创建一个Image(0), 然后利用 Load 来动态创建控件数组。 由于图片分割后可以看成是分割成了一个矩阵,并且空间数组是按顺序排放的,根据矩阵行与列的关系,我们可以得知,当控件数组的下标 Index mod N(列数) = 0 时,这一个控件一定在 Image(0)的正下方。所以这些 Image 控件的 Left 与 Image(0)相同, Top 为 Image(0)的高度再加上当前控件的正上方一个控件( Index 为 i-N )的 Top 值。而剩下的控件,其 Top
11、值为它前一个控件的 Top值, Left 值为它前一个控件的 Left 值再加上 Image控件的宽度即可。这里需要注意的是, 需要设置 PictureClip1.StretchX = 500 / N, PictureClip1.StretchY = 500 / M,来限制每个图块的大小,防止由于图片过大,导致的每个图块也过大,甚至超出了屏幕范围,我这么设置之后,图块的总大小就被我确定了,更加的美观。由此便很好的实现了自定义行、列数的分割,并且图片排列紧凑,也完整包含了全部图片,没有出现“消失的部分” 。图片的移动与拼图:图片的移动,我也是根据矩阵的特性,首先判断列的情况,再看行的情况。总结规
12、律之后发现,列和行都分别只有三种情况。列的情况有:第一列,只需要判断右边是否为空; 最后一列, 只需要判断左边是否为空; 其余的左右都需要判断。 行的情况也一样:第一行,只需要判断下面是否为空;最后一行,只需要判断上面是否为空;中间各行上下都需要判断。这样便实现了图片的有序移动,程序的基本功能已经完成了。判断是否拼 图 成 功 , 这 点 很 简 单 , 只 需 要 看 每 个 Image(i).picture 是 否 对 应 的 是PictureClip.GraphicCell(i) 即可。如果是的,则说明拼图成功,弹出 Success框,并记录步数,再把步数与“英雄榜”比较,将较小者留下。
13、多种模式:首先游戏本身设置好了三种难度, 玩家可以根据自身需求, 选择相应的难度。 此外,也可以选择自定义模式,自己去设置 M 与 N 的值,这样也更有乐趣。这里的时候与上文相似,不必多说。显示原图:我是用的是添加了一个新的窗体,当点击“显示原图”按钮时,就弹出这个窗体,7 并把当前 PictureClip 的图显示出来,并让图片自适应窗体大小。“关于”与“ help” :这里我也是使用的新的窗体, VB6.0 自带的有“关于”对话框窗体,添加之后使用很方便,可以自己设定图标等信息,关于里面的内容也是自动填充的。英雄榜: 当玩家选择内置的 Easy、 Normal、 Hard 难度进行游戏,
14、并且拼图成功之后,游戏就会记录玩家使用的步数,并且和已有的榜单进行比较,留下步数最少的成绩。玩家可以点击“最佳玩家”按钮进行查看最佳成绩。测试数据 (此处只放 Easy 模式下的成功案例, 分割块数太多的案例, 拼起来太难了) :一开始无有效成绩成功拼图,使用 42 步8 再次查看英雄榜可以看见英雄榜已经变成了 42 五、 系统使用说明这个游戏使用起来很方便,只需要打开游戏,选择菜单中的新游戏,再选择 Easy、Normal 或者 Hard 难度,再选择图片就可以进行游戏。当然,你也可以在左侧菜单中选择进阶难度(即自定义难度) ,选择图片后进行游戏。点击右下角“ Exit”或者左上角的 叉都可
15、以退出游戏。如果有需要了解的信息,可以点击菜单中的“关于”和“ Help”按钮。六、 实习的收获、心得、问题、困难和建议作为一个从小就喜欢玩游戏的人,第一次自己做游戏,感觉还是很开心的。虽然使用的是比较古老的 VB 语言, 但我想编程大体上都是差不多的, 主要是自己思想的体现,编程的语言并不重要。VB 相比较 C+来说, 我感觉是简单不少, 大概是 VB 这种基于事件的编程, 更加的直观,理解起来也更加容易一点。而且 C+学习过程中,感觉自己编写的一些程序都不怎么派的上用场,不像这次的 VB 学习,一开始就要我们做一个游戏,既好玩,又能激发我们学习的兴趣,是一次不错的经历。而且我一直对游戏编程
16、比较感兴趣,但是却没有仔细去研究过,借这次实习的机会,我又重燃了学习这方面知识的兴趣,很有意义。这一个游戏,两周的时间,虽然不能说是很好了吧,但是要实现的功能我都自己做出来了,很有成就感。期间自己一个一个知识点百度,不断的思考该如何去做,一个一个功能去实现,才有了最后的游戏。我觉得这种通过项目来学习的方式,是比单纯的听老师讲解要好的,听讲是被动的,这样的学习是主动的。在 VB 学习中也遇到了不少难题,其中有的问题被我慢慢搞定了,有的却还没有解决。比如建议功能中可以选择空档图的颜色,这一点我利用 CommonDialog 可以调出颜色选择框,但是选好了之后,我就不知道怎么把空档图设置成这个颜色了,这不像 C+中的 OpenCV,可以直接画图,具体的我没有仔细研究。9 对这次实习,我的收获很多,但也有一点建议。比如我觉得我这个游戏,题目中给的建议功能很多都是“垃圾功能” ,没有什么设计的