上海大学计算机认识实习报告VB拼图游戏资料.docx

上传人:b****2 文档编号:1279598 上传时间:2023-04-30 格式:DOCX 页数:17 大小:563.82KB
下载 相关 举报
上海大学计算机认识实习报告VB拼图游戏资料.docx_第1页
第1页 / 共17页
上海大学计算机认识实习报告VB拼图游戏资料.docx_第2页
第2页 / 共17页
上海大学计算机认识实习报告VB拼图游戏资料.docx_第3页
第3页 / 共17页
上海大学计算机认识实习报告VB拼图游戏资料.docx_第4页
第4页 / 共17页
上海大学计算机认识实习报告VB拼图游戏资料.docx_第5页
第5页 / 共17页
上海大学计算机认识实习报告VB拼图游戏资料.docx_第6页
第6页 / 共17页
上海大学计算机认识实习报告VB拼图游戏资料.docx_第7页
第7页 / 共17页
上海大学计算机认识实习报告VB拼图游戏资料.docx_第8页
第8页 / 共17页
上海大学计算机认识实习报告VB拼图游戏资料.docx_第9页
第9页 / 共17页
上海大学计算机认识实习报告VB拼图游戏资料.docx_第10页
第10页 / 共17页
上海大学计算机认识实习报告VB拼图游戏资料.docx_第11页
第11页 / 共17页
上海大学计算机认识实习报告VB拼图游戏资料.docx_第12页
第12页 / 共17页
上海大学计算机认识实习报告VB拼图游戏资料.docx_第13页
第13页 / 共17页
上海大学计算机认识实习报告VB拼图游戏资料.docx_第14页
第14页 / 共17页
上海大学计算机认识实习报告VB拼图游戏资料.docx_第15页
第15页 / 共17页
上海大学计算机认识实习报告VB拼图游戏资料.docx_第16页
第16页 / 共17页
上海大学计算机认识实习报告VB拼图游戏资料.docx_第17页
第17页 / 共17页
亲,该文档总共17页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

上海大学计算机认识实习报告VB拼图游戏资料.docx

《上海大学计算机认识实习报告VB拼图游戏资料.docx》由会员分享,可在线阅读,更多相关《上海大学计算机认识实习报告VB拼图游戏资料.docx(17页珍藏版)》请在冰点文库上搜索。

上海大学计算机认识实习报告VB拼图游戏资料.docx

上海大学计算机认识实习报告VB拼图游戏资料

总序号:

247

班级序号:

5

成绩:

计算机认识实习报告

专业:

计算机科学与技术

班级/题序:

B3班第二题:

拼图游戏

实习题目:

拼图游戏

姓名:

xxx

学号:

指导教师:

 

计算机工程与科学学院

报告日期2016年6月23日

平时表现

优秀□良好□一般□较差□

系统验收

优秀□良好□一般□较差□

报告撰写

优秀□良好□一般□较差□

教师评语

 

一、

实习目的和要求

计算机认识实习一般安排在短学期进行,是理论联系实际的重要实践性教学环节。

通过认识实习,了解程序设计的一般过程,树立良好的设计方法,巩固有关计算机软件的知识,加深专业知识的了解,扩大专业知识面,培养和提高发现问题、认识问题、分析问题及解决问题的能力,为有关后续专业课程的学习奠定基础。

通过VisualBasic语言的使用,体会使用VB进行程序设计的特色,试探用VB开发更为复杂的应用程序;

加强高级语言的编程能力,了解计算机软件设计的基本方法和一般步骤;

通过实习,对计算机及计算机软件设计有一个较为全面的认识,培养发现问题、认识问题、分析问题及解决问题的能力,提高自学能力和上机动手能力。

通过认识实习,学生通过查阅资料了解计算机软件开发技术的最新技术和发展趋势。

通过VisualBasic语言有关知识的学习,使我们掌握:

VB的安装、设置和操作技能;

VB编程的基本概念;

VB中的常量、变量、表达式及运算;

VB中的数组、记录和控制结构使用;

VB中窗体和控件的设计使用方法,图形、图象类控件的使用;

VB中对话框与菜单程序设计方法;

VB与数据库的链接与应用;

简单的游戏软件的设计与开发方法。

每人将按要求开发设计一个简单的游戏软件。

二、实习内容

这次认识实习,我的主要任务是利用VB,设计一个拼图游戏,其具体要求如下:

拼图游戏(Puzzle)是一种容易上手的小游戏。

本题目要求编程,实现以下功能。

游戏时,用户可以选择一幅图作为拼图素材。

系统显示的是被分割成M×N个,并

打乱顺序后随机排列的(见图1)小图块。

其中有一块空档。

游戏者用鼠标点击与空档相邻的图块,使其与空档互换位置。

利用该空档最终恢复图片的原貌,最后一块为底牌(见图2),翻底牌为完成拼图。

移动的步数越少或时间越短,说明水平越高。

基本要求:

程序能完成概述中的基本功能。

原始图片可以选择在旁边预览。

M与N可由游戏者输入确定。

小图块的排列以及作为空档的图块都是随机的。

主界面为窗口界面,包含菜单栏。

菜单中至少要有“运行”菜单,含“run”命令、“stop”命令;“帮助”菜单,含“Help”命令、“About”命令(Help内容是操作说明。

About内容是开发者的姓名、学号、日期等。

(见有关要求的说明。

建议功能:

设置游戏级别。

用记步数或计时来记录成绩,供查询或分胜负。

空档背景色可选。

空档位置也可以指定。

游戏者可以选择级别:

学习级、挑战级、应战级。

1.学习级:

作上述一般游戏。

2.挑战级:

计时、记步数,记成绩。

上排行板。

3.应战级:

选一个擂台,比时间、步数分胜负。

最后上冠军宝座。

“Undo”功能的实现。

若点错图块(如点了无法移动的图),报警。

作者可以自行发挥各种附加功能和游戏规则,只要在你的帮助信息中给出说明。

相信大家都玩过这样的拼图游戏,但是自己动手去做,又是另一种很有意义的体验。

在认识实习期间,我们上了三次VB课程,另外还在机房上了五次机,在这期间我们学习了VB的一些基本操作,但是更重要的是在实践中学习。

通过自己查阅资料,制作游戏,来理解和运用学到的知识,这样才是实习的目的之所在。

三、系统概要设计说明,功能模块及流程和工作原理

系统概要设计说明:

要设计一个拼图游戏,其核心是把一个完整的图片分割成若干块,然后随机打乱,再随机去掉其中的一块。

通过玩家拼图操作之后,如果拼出的图与原图吻合,那么就视为拼图成功,并记录玩家使用的步数。

实现这个游戏的主要设计,应该是判断什么时候可以移动图片,以及什么时候图片与原图吻合。

其次是通过空间数组,动态的生成我们需要的数量的Image控件,来存储每个图片单元,并且要控制各个空间数组的相对位置。

功能模块:

主游戏模块:

1.可选难度模式,主要有三种难度,对应三种不同的分割数目。

Easy:

3*3;Normal:

4*4;Hard:

5*5

2.自定义模式:

由玩家自己决定分割的块数,自定义难度。

(难度设定我参考了扫雷游戏,让玩家不断突破自己)

显示原图:

玩家可以在游玩时随时预览原图,方便玩家娱乐。

自定义图片:

为了增大游戏的乐趣,此游戏可以由玩家自定义图片,来进行拼图。

 

“关于”对话框:

显示此游戏的有关数据,版本,制作人信息等等。

 

“Help”对话框:

显示游戏的基本操作,难度选择等信息。

 

“最佳选手”:

可以分别显示不同难度下的最佳成绩

 

美化:

美化了游戏背景图,鼠标图标,对话框等,使游戏更加美观。

流程和工作原理:

首先,点击“新游戏”,选择游戏难度(Easy,Normal,Hard,自定义),通过CommonDialog控件,来让玩家自己选择图片进行游玩。

然后玩家点击分割后打乱的图片,软件会自动判断点击的图片是否可以移动,若可以,则移动。

当所有图片都回到它正确的位置时,软件会自动提示拼图成功,并且记录使用的步数,如果是最佳纪录,则上英雄榜。

如果有问题,可以点击“浏览原图”来显示原图,或者查看“Help”和“关于”对话框。

点击“退出”即可退出游戏。

四、系统详细设计、关键技术与难点、测试数据

图片的分割与初始化:

首先,是进行图片的分割。

在这里我是用的是PictureClip控件,因为这个控件方便我们进行分割(有col和row属性)。

如果要分成M*N的图片块,那么只需要把PictureClip的row设置成M,col设置成N即可。

然后再根据分割出的块数,对应的生成相应数量的Image控件数组,调整好每一个控件的相对位置,这样基本操作就完成了。

接下来便是随机打乱图片。

利用Rnd来产生随机数,然后把每个PictureClip的图片单元都对应一个随机的Image控件,这样就随机分配好了各个图片块。

然后再随机去掉一块,只需使用LoadPicture("")即可,这一块用来图片移动。

这样初始化就完成了。

在这一部分,我认为比较难的是“自定义模式”下,动态生成控件数组,并且根据分割的块数,让Image控件自适应大小,不至于由于图片的大小原因,或者分割的块数过多,使得出现图片显示不全,分割的图片不完整等等问题。

在这里,我是先创建一个Image(0),然后利用Load来动态创建控件数组。

由于图片分割后可以看成是分割成了一个矩阵,并且空间数组是按顺序排放的,根据矩阵行与列的关系,我们可以得知,当控件数组的下标IndexmodN(列数)=0时,这一个控件一定在Image(0)的正下方。

所以这些Image控件的Left与Image(0)相同,Top为Image(0)的高度再加上当前控件的正上方一个控件(Index为i-N)的Top值。

而剩下的控件,其Top值为它前一个控件的Top值,Left值为它前一个控件的Left值再加上Image控件的宽度即可。

这里需要注意的是,需要设置PictureClip1.StretchX=500/N,PictureClip1.StretchY=500/M,来限制每个图块的大小,防止由于图片过大,导致的每个图块也过大,甚至超出了屏幕范围,我这么设置之后,图块的总大小就被我确定了,更加的美观。

由此便很好的实现了自定义行、列数的分割,并且图片排列紧凑,也完整包含了全部图片,没有出现“消失的部分”。

 

图片的移动与拼图:

图片的移动,我也是根据矩阵的特性,首先判断列的情况,再看行的情况。

总结规律之后发现,列和行都分别只有三种情况。

列的情况有:

第一列,只需要判断右边是否为空;最后一列,只需要判断左边是否为空;其余的左右都需要判断。

行的情况也一样:

第一行,只需要判断下面是否为空;最后一行,只需要判断上面是否为空;中间各行上下都需要判断。

这样便实现了图片的有序移动,程序的基本功能已经完成了。

判断是否拼图成功,这点很简单,只需要看每个Image(i).picture是否对应的是PictureClip.GraphicCell(i)即可。

如果是的,则说明拼图成功,弹出Success框,并记录步数,再把步数与“英雄榜”比较,将较小者留下。

多种模式:

首先游戏本身设置好了三种难度,玩家可以根据自身需求,选择相应的难度。

此外,也可以选择自定义模式,自己去设置M与N的值,这样也更有乐趣。

这里的时候与上文相似,不必多说。

显示原图:

我是用的是添加了一个新的窗体,当点击“显示原图”按钮时,就弹出这个窗体,并把当前PictureClip的图显示出来,并让图片自适应窗体大小。

“关于”与“help”:

这里我也是使用的新的窗体,VB6.0自带的有“关于”对话框窗体,添加之后使用很方便,可以自己设定图标等信息,关于里面的内容也是自动填充的。

英雄榜:

当玩家选择内置的Easy、Normal、Hard难度进行游戏,并且拼图成功之后,游戏就会记录玩家使用的步数,并且和已有的榜单进行比较,留下步数最少的成绩。

玩家可以点击“最佳玩家”按钮进行查看最佳成绩。

测试数据(此处只放Easy模式下的成功案例,分割块数太多的案例,拼起来太难了):

一开始无有效成绩

成功拼图,使用42步

再次查看英雄榜

可以看见英雄榜已经变成了42

五、系统使用说明

这个游戏使用起来很方便,只需要打开游戏,选择菜单中的新游戏,再选择Easy、Normal或者Hard难度,再选择图片就可以进行游戏。

当然,你也可以在左侧菜单中选择进阶难度(即自定义难度),选择图片后进行游戏。

点击右下角“Exit”或者左上角的叉都可以退出游戏。

如果有需要了解的信息,可以点击菜单中的“关于”和“Help”按钮。

六、实习的收获、心得、问题、困难和建议

作为一个从小就喜欢玩游戏的人,第一次自己做游戏,感觉还是很开心的。

虽然使用的是比较古老的VB语言,但我想编程大体上都是差不多的,主要是自己思想的体现,编程的语言并不重要。

VB相比较C++来说,我感觉是简单不少,大概是VB这种基于事件的编程,更加的直观,理解起来也更加容易一点。

而且C++学习过程中,感觉自己编写的一些程序都不怎么派的上用场,不像这次的VB学习,一开始就要我们做一个游戏,既好玩,又能激发我们学习的兴趣,是一次不错的经历。

而且我一直对游戏编程比较感兴趣,但是却没有仔细去研究过,借这次实习的机会,我又重燃了学习这方面知识的兴趣,很有意义。

这一个游戏,两周的时间,虽然不能说是很好了吧,但是要实现的功能我都自己做出来了,很有成就感。

期间自己一个一个知识点XX,不断的思考该如何去做,一个一个功能去实现,才有了最后的游戏。

我觉得这种通过项目来学习的方式,是比单纯的听老师讲解要好的,听讲是被动的,这样的学习是主动的。

在VB学习中也遇到了不少难题,其中有的问题被我慢慢搞定了,有的却还没有解决。

比如建议功能中可以选择空档图的颜色,这一点我利用CommonDialog可以调出颜色选择框,但是选好了之后,我就不知道怎么把空档图设置成这个颜色了,这不像C++中的OpenCV,可以直接画图,具体的我没有仔细研究。

对这次实习,我的收获很多,但也有一点建议。

比如我觉得我这个游戏,题目中给的建议功能很多都是“垃圾功能”,没有什么设计的意义。

比如“撤销”功能,这游戏本来就是记步数的,撤销就不公平了,而且撤销这个功能,在原图上多点一下就能实现,何必再去单独添加呢。

而那个点了无法移动的图就报警,更是降低了游戏的流畅性,一点错就警告你一次,感觉很麻烦。

附录1:

核心代码及说明

根据输入的M和N分割图片:

PrivateSubCommandNewGame_Click()

DimsumimgAsInteger

M=InputBox("请输入行数M")

N=InputBox("请输入列数N")

CommonDialog1.ShowOpen玩家选择图片

PictureClip1.Picture=LoadPicture(CommonDialog1.FileName)

SavePicturePictureClip1.Picture,"SocPic.jpg"

PictureClip1.Cols=N

PictureClip1.Rows=M

sumimg=M*N

step=0//计数清零

Label2.Caption="步数:

"&step

Fori=0To8‘其他模式的控件框失效并隐藏

Image1(i).Enabled=False

Image1(i).Visible=False

Next

Fori=0To15

Image2(i).Enabled=False

Image2(i).Visible=False

Next

Fori=0To24

Image3(i).Enabled=False

Image3(i).Visible=False

Next

PictureClip1.StretchX=500/N‘控制每个图块的大小

PictureClip1.StretchY=500/M

Fori=0Tosumimg-1'随机产生不重复的M*N个编号(从0到M*N-1)

a0:

X(i)=Int(Rnd*sumimg)

Forj=0Toi-1

IfX(i)=X(j)ThenGoToa0

Next

Next

'Image4(0).Move480,600,7875/M,7875/N

Image4(0).Left=480

Image4(0).Top=600

Image4(0).Visible=True

Image4(0).Height=7875/M

Image4(0).Width=7875/N

Fori=1Tosumimg–1‘动态生成Image空间数组,用以存储每个图块

LoadImage4(i)

IfiModN=0Then

Image4(i).Left=480

Image4(i).Top=7875/M+Image4(i-N).Top

Else

Image4(i).Top=Image4(i-1).Top

Image4(i).Left=Image4(i-1).Left+7875/N

EndIf

Next

Fori=0Tosumimg-1

Image4(i).Enabled=True'使Image1响应鼠标事件

Image4(i).Visible=True

Image4(i).ZOrder0

Image4(X(i)).Picture=PictureClip1.GraphicCell(i)'让图片的9个单元分别赋予9个Image控件

Next

fuc=Rnd*sumimg-1

Image4(fuc).Picture=LoadPicture("")'空位用于移动图片

EndSub

 

点击图片,移动图片:

PrivateSubImage4_Click(IndexAsInteger)

SelectCaseIndexModN'把M*N个Image控件分成N列

Case0‘点击第一列的情况

IfImage4(Index+1).Picture=LoadPicture("")Then'判断右边是否为空

Image4(Index+1).Picture=Image4(Index).Picture'交换图片

Image4(Index).Picture=LoadPicture("")

win

EndIf

Case1ToN–2‘点击第2~N-1列的情况

IfImage4(Index-1).Picture=LoadPicture("")Then'判断左边是否为空

Image4(Index-1).Picture=Image4(Index).Picture

Image4(Index).Picture=LoadPicture("")

win

EndIf

IfImage4(Index+1).Picture=LoadPicture("")Then'判断右边是否为空

Image4(Index+1).Picture=Image4(Index).Picture

Image4(Index).Picture=LoadPicture("")

win

EndIf

CaseN–1‘点击最后一列的情况

IfImage4(Index-1).Picture=LoadPicture("")Then'判断左边是否为空

Image4(Index-1).Picture=Image4(Index).Picture

Image4(Index).Picture=LoadPicture("")

win

EndIf

EndSelect

SelectCaseIndex\N'把M*N个Image控件分成M行

Case0'当鼠标点击第1行时

IfImage4(Index+N).Picture=LoadPicture("")Then'判断下边是否为空

Image4(Index+N).Picture=Image4(Index).Picture

Image4(Index).Picture=LoadPicture("")

win

EndIf

Case1ToM-2'当鼠标点击第2~M-1行时

IfImage4(Index-N).Picture=LoadPicture("")Then'判断上边是否为空

Image4(Index-N).Picture=Image4(Index).Picture

Image4(Index).Picture=LoadPicture("")

win

EndIf

IfIndex+N

IfImage4(Index+N).Picture=LoadPicture("")Then'判断下边是否为空

Image4(Index+N).Picture=Image4(Index).Picture

Image4(Index).Picture=LoadPicture("")

win

EndIf

EndIf

CaseM-1'当鼠标点击第M行时

IfImage4(Index-N).Picture=LoadPicture("")Then'判断上边是否为空

Image4(Index-N).Picture=Image4(Index).Picture

Image4(Index).Picture=LoadPicture("")

win

EndIf

EndSelect

EndSub

附录2:

参考文献

1.VB控件数组的使用技巧

2.利用PictureClip进行图像处理

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

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

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2