VB做扫雷游戏.docx
《VB做扫雷游戏.docx》由会员分享,可在线阅读,更多相关《VB做扫雷游戏.docx(27页珍藏版)》请在冰豆网上搜索。
VB做扫雷游戏
编号
南京航空航天大学
毕业论文
题目
用VB实现一个简单的游戏
学生姓名
学号
学院
专业
班级
指导教师
南京航空航天大学
本科毕业设计(论文)诚信承诺书
本人郑重声明:
所呈交的毕业设计(论文)(题目:
)是本人在导师的指导下独立进行研究所取得的成果。
尽本人所知,除了毕业设计(论文)中特别加以标注引用的内容外,本毕业设计(论文)不包含任何其他个人或集体已经发表或撰写的成果作品。
作者签名:
年月日
(学号):
用VB实现一个简单的游戏
摘要
当前,随着计算机应用及网络的的深入普及,越来越多的政府部门、厂矿企业、学校等单位及个人都拥有了自己的计算机,计算机不仅在工作方面给人们以很大的帮助,还给人们带来了多种的娱乐享受.,操作系统自带的游戏也起到了很大的娱乐作用,而且它的开发成本小,所以小游戏的开发在这种形势下就应运而生,它的开发主要采用VC++,VB等编程语言.
本设计采用VB编写,VB一直以来被认为有以下优缺点:
优点是上手快、开发效率高;缺点是能力有限,运行效率低.这正是有些软件把VB做为首选语言,而有些软件肯定不会用VB做的原因.而很多VC,DELPHI的程序员都认为VB里搞开发不自由.的确,简单和功能强大这两者本身就是一对矛盾.
扫雷游戏是操作系统中的一个主要的益智类游戏.用户对鼠标进行操作,单击鼠标左键为踩雷,单击鼠标左键在标记,疑问,空白三种状态中循环,同时单击鼠标左右键为踩单击点在内的周围九格内所有没有标记为已标记的所有格子.同时程序从你单击第一次时开始计时,到胜利或引爆地雷终结.结束后单击开始按钮重新开始游戏.这款游戏实现了开发人类大脑思维的目的.
关键词VB,扫雷游戏
RealizesasimplegamewithVB
Abstract
Front,isappliedalongwiththecalculatorandnetworkofofthethoroughuniversality,moreandmoregovernmentssection,factorymineralbusinessenterprise,school...etc.unitandindividualallownedowncalculator,thecalculatorisnotonlytogivepeopleintheaspectsofworkingwiththeverybighelp,returningtopeoplebroughtvariousamusementsenjoys.,theoperatesystemalsorosefromthegamethattakeverybigamusementfunction,anditofthecostofdevelopmentissmall,sothedevelopmentoftheget-awaydramaunderthiskindofsituationemergewiththetideofthetimes,itofmainadoptionindevelopmentVC++,VBetc.plaitdistancelanguage.
ThisdesignadoptionVBplaitwrites,theVBhasesbeenpassingfortohavesincethenbelowmeritandshortcoming:
Theadvantageistoundertakesquick,developmenttheefficiencyishigh;Theweaknessisanabilitylimited,circulatetheefficiencylow.Thisexactlysomesoftwaresisusedasareasonforchoosethelanguage,butsomesoftwaresisaffirmativeanddowiththeVBofVBs.AndalotofVCs,theDELPHIprocedurememberthinkstheVBinmakethedevelopmentnotfree.Really,itissimpletoisstrongandbigwiththefunctionthisbothoneselfisanonerightnessantinomy.
Themineclearancegameisanoperatesysteminsideofagrowsinwisdomagameprimarily.Thecustomerproceedstheoperationtotheratmark,theleftkeyinmarkinratinsingleshotisfortramplingthethunder,thesingleshotratmarkstheleftkeyinmarking,question,blankthreekindsofappearancescirculating,thesingleshotratmarksorsokeyastotrampleatthesametimethesingleshotordersthesurroundingsininsideninethemarkinghadinspacesesarealreadyallblanksofthemarking.Atthesametimeprocedureisfromyousingleshotfirsttimehourstartsaccounting,arrivevictoryorsetoffthelandmineend.Endingthesingleshotinempressstartspressingbuttonrestartingthegame.Thisgamerealizesthepurposeofthehumanbrainindevelopmentthought.
Keywords:
VB,Themineclearancegame
1引言
本论文研究的是以VisualBasic6.0为开发环境,设计并开发一款扫雷游戏,其功能类似于Windows操作系统自带的扫雷游戏。论文首先介绍了制作游戏的整体思路及整个游戏设计的流程规划,然后介绍了雷区的布置及地雷随机产生的实现方法;重点介绍了在游戏过程中各事件的处理,其中又以鼠标事件和清除未靠近地雷区方块这两方面最为重要,鼠标事件是利用鼠标所发出的信息了解使用者的意图,进而做出相对应的动作,而清除未靠近地雷区方块由于引进了“递归”这个概念而使其简单化。
扫雷游戏是WINDOWS系统自带的一个娱乐性的小游戏,在玩扫雷游戏的过程中也可以很好的培养耐心和细心,同时在无聊得时候可以用以休闲娱乐,如果我们自己也能动手做一个小程序来实现这个功能,自然能乐在其中。
本次设计只是完成了扫雷游戏的基本功能,在细节方面仍有待完善。
2VisualBasic概况
2.1VB简介
VISUALBASIC是微软公司出品的一个快速可视化程序开发工具软件。
借助微软在操作系统和办公自动化软件的垄断地位,VB在短短的几年内风靡全球。
VB是极具特色和功能强大的软件,主要表现:
所见即所得的界面设计,基于对象的设计方法,极短的软件开发周期,较易维护的代码。
同时众多的ACTIVE控件,提高了软件的使用效率。
可以用于可以开发多媒体、数据库、网络、图形等方面的应用程序。
VB应用程序语言的基本特点[1]:
1可视化界面设计
VB为用户提供大量的界面元素(在VB中称为控件对象),这些控件对象对于熟悉WINDOWS应用程序的用户来说是一点也不陌生,如“窗体”,“菜单”,“命令按扭”,“工具按扭”,“检查框”等等,用户只要利用鼠标、键盘把这些控件对象拖动到合适的位置,设置其大小、形状、属性等,就可以设计出所需的应用程序界面。
2事件驱动编程
在使用VB设计应用程序是,必须首先确定应用程序如何同用户进行交互。
例如发生鼠标单击、键盘输入等事件是,由用户编写代码控制这些事件的响应,这就是所谓的事件驱动编程。
3与数据库的连接性
VISUALBASIC提供了与底层数据库系统紧密的连接。
VISUALBASIC支持不同的关系数据库管理系统并充分发挥每一个数据库的特长。
开发人员和利用内置的高性能数据库引擎——JET生成独立应用或脱离服务器运行的服务以上的应用。
2.2本设计运用的技术
这个游戏里运用了VB里的组件及语法作为游戏运算和显示,其相关语法及组件如下表1所示:
表1使用的语法及组件
组件及语法
说明
For...Next
利用循环布置地雷区、按下时检查非地雷方块
Load(Unload)
动态加载或删除指令产生表示地雷方块图案的Image组件
Mousedown与Mouseup事件
判断按下或放开方块时的按键为左键或右键
Imagelist组件
存储游戏过程中所需的图案
Image组件
利用此显示地雷方块
Timer组件
设定触发时间,来控制方块游戏时间
PictureBox组件
利用此组件作为地雷方块的布置区域
递归
利用递归展开非地雷的方块
详细说明如下:
1.For...Next循环应用
在游戏设计上,利用了两个二维数组分别记录地雷的分布状况及地雷区及表面探测情形。
利用数据循环的对比,不但速度快,而且在设计阶段,程序的架构比较清楚。
2.Load及Unload动态增加或删除组件
利用Load及Unload指令,可动态新增及删除组件。
在游戏的雷区,依照使用者自定义的地图类型,布置未探测的地雷方块。
加载组件后,通过Image组件的Move属性,将组件布置于预定的位置。
Move函数的原型如下:
组件.MoveX坐标,[Y坐标],[组件宽度][组件高度]
再配合双循环的变量值,可以控制组件布置于窗体的方向及方式。
3.MouseDown与MouseUp事件
在游戏过程中,利用鼠标所发出的信息了解使用者的意图,进而做出相应的动作。
在MouseDown与MouseUp事件中,可以捕捉鼠标所按下或放开的按键为何、鼠标光标在该组件上的坐标及是否同时按下辅助键等。
用Button参数值表示鼠标上的按钮数值。
其意义如下:
1:
左键
2:
右键
4:
中央键
若同时按下不止一个按键时,则传回数值为按键数相加。
例如同时按下左键及右键,则Button值为1+2=3.
在本游戏中,利用右键的MouseDown事件标示“已标示”方块,利用左键的MouseDown事件,标示使用者准备按下的方块,利用左键的MouseUp事件确定翻开的方块。
4.ImageList组件
利用Imagelist可以存储显示方块的图形[2]。
将组件布置于窗体上后编辑组件属性,通过【插入图片】按钮和【删除图片】按钮即可编辑组件内所存放的图片。
如图1所示。
因为一个Imagelist组件内必须存储大小相同的图片,所在这款游戏设计中,显示的图片共分为三个部分:
游戏状态图形、数字计数图形和地雷区标示图形。
图1ImageList组件属性
利用ListImage集合对象的Picture方法,即可将ListImage组件内的图片指定给图形显示组件,语法如下:
Set图形组件.Picture=Imagelist.ListImage(图片索引).Picture
5.Image组件
利用Image组件作为游戏执行阶段所有图形的显示。
在游戏画面中,计数数字、游戏状态表情及地雷区方块图形等,都利用Image组件作为显示组件,再搭配ImageList组件所存储的图形,便可在执行阶段在同一个Image组件上变换不同的图片。
6.Timer组件
在游戏中,地雷引爆的可能有2中,第一种为使用者翻开(踩到)地雷方块,第二种为设定时间内未探测完所有地雷而引爆。
其中第二种的行为,可以通过Timer组件来加以控制。
利用Timer组件在固定时间即会触发事件的特性,在事件触发时便将计数值加1,直到判断计数值超过限定值时,即引爆地雷。
7.PictureBox组件
PictureBox为容器类型的组件,可以加入其它组件在内[3]。
在游戏中利用了PictureBox的两个特性:
容器特性和立体框架。
分述如下:
●容器特性:
只要容器本身显示的行为改变,在容器内的组件也会跟着改变。
当游戏初始时,地雷区的显示组件会循环执行,逐一布置在画面上,但由于执行循环时多个Image组件要显示图形,造成分时系统执行频率显示上会出现不流畅的情形,若在循环之前,先将容器本身的Visible属性设为False,在循环执行完成后再将Visible属性设为True,则显示就会变得流畅许多。
●立体框架:
通过组件本身立体框线的属性设定,可以为游戏画面的显示上营造出层次感。
8.递归
递归就是一个程序能被自己所定义的语句调用。
在游戏过程中,当使用者按下非地雷方块时,方块会沿四周八个方向向外翻开非地雷的方块。
程序执行时必须判断:
以按下方块为中心。
检查周围八个方块是否为非地雷方块,若其中一个方块是非地雷方块时,则又以其为中心,向外检查周围八个方块是否为非地雷方块,如此反复的行为即构成了递归的使用条件。
当判断方块内容为数字时(即在非地雷方块周围),即停止递归执行。
3可行性分析
可行性研究的目的是用最小的代价在尽可能短的时间内确定问题是否能够解决。
也就是说可行性研究的目的不是解决问题,而是确定问题是否值得去解,研究在当前的具体条件下,是否具备必要的资源和其它条件。
一般说来,应从经济可行性、技术可行性、运行可行性、和开发方案可行性等方面研究可行性。
可行性分析:
1.对于当前条件下,完全可以达到该系统功能目标;
2.该系统功能在现有技术下,完全可以实现;
3目标:
实现游戏的各类功能,如:
初、中、高(自定义)各个游戏等级.
4用户的特点;都是对扫雷游戏的喜好者.
4总体设计
4.1设计构想
本游戏的功能类似于Windows操作系统自带扫雷游戏,设计之前,先了解这款游戏的规则。
在不掀开任何的情况下,以最快的速度找出所有的地雷。
如果在掀开方块的过程中,不小心翻开(踩到)藏有地雷的方块,则宣告失败(死亡),惟有将所有不含地雷的方块掀开,游戏才算成功(存活)。
游戏的操作方面主要以鼠标为主,当鼠标指针对准未翻开的方块按下左键时即表示翻开方块,当鼠标指针对准未翻开的方块按下右键时即表示标示或疑似地雷,反复按下右键则方块会依未标示
→标示
→疑似
三者关系不断循环。
使用者可以通过地雷区内的数表示以其为中心的周边八个方块内所含的地雷数。
当按下的方块不是地雷,且周边也没有地雷时,方块会以被翻开的八个方向将空白方块翻开。
4.2流程规划
流程规划分为三个部分,分别为:
画面初始、使用者按下第一个方块和为非地雷方块时展开。
画面初始时,以使用者最后一次设定的地雷区大小为范围画出地雷区,但此时并未产生地雷。
当使用者按下第一个方块时产生地雷并启动定时器,主要为了不让使用者第一次就踩到地雷,这样在某种程度上提高了游玩的气氛。
接着就是如何判断按下的方块为非地雷时的处理,这也是整个游戏的技术核心,可以通过递归的观念来检查周边是否含有地雷及是否继续往外翻开。
流程规划如图2所示:
图2流程规划图
5详细设计
5.1画面规划
画面规划如图3所示:
图3画面规划图
说明如下:
●
:
游戏窗口(Form)。
为了避免因改变窗口大小而造成画面呈现不美观,将BorderStyle属性值设定为3(双线固定对话框),即无法以窗口边缘进行窗口大小调整。
●
:
计数区(PictureBox)。
●
:
地雷数显示区(PictureBox)。
●
:
游戏时间显示区(PictureBox)。
●
:
地雷区(PictureBox)。
●
~
:
地雷数(Image)。
●
:
游戏状态(Image)。
●
~
:
经过秒数(Image)。
●
:
地雷区图样(Image)。
●
:
游戏状态图片(ImageList)。
●
:
地雷区图片(ImageList)。
●
:
地雷数及秒数数字图片(ImageList)。
●
:
秒数控制(Timer)。
5.2设计过程
5.2.1添加菜单
使用菜单编辑器编辑游戏的主菜单,点击“工具”菜单上的“菜单编辑器”命令选项,即可打开菜单编辑器。
菜单控件在列表框中的位置决定了该控件是菜单标题、菜单项、子菜单标题,还是子菜单项。
对于一些常用的菜单命令,可以设置“Alt+快捷键”组合来快速打开菜单。
方法是在菜单编辑器中的Caption后面添加“(&R)”就可以了。
图4菜单编辑器
5.2.2自定义窗体设计
打开主菜单游戏→自定义,可以显示窗体,如图5所示。
通过这个窗体使用者可以自己设定行数、列数和地雷数。
图5自定义窗体
'设置参数
PrivateSubCommand1_Click()
IftHeight.Text>50OrtHeight.Text<0Then
tHeight.Text=24
EndIf
IftWidth.Text>50OrtWidth.Text<0Then
tWidth.Text=30
EndIf
IftMines.Text>(tHeight.Text*tWidth.Text)OrtMines.Text<0Then
tMines.Text=(tHeight.Text-1)*(tWidth.Text-1)
EndIf
SaveSetting"Mine","SET","1",tWidth.Text
SaveSetting"Mine","SET","2",tHeight.Text
SaveSetting"Mine","SET","3",tMines.Text
UnloadMe
EndSub
5.2.3关于窗体设计
打开主菜单帮助→关于扫雷,可以显示如图6所示。
帮助使用者了解相关信息。
PrivateSubabout_Click()
aboutfrm.Show
EndSub
5.3运行界面
执行窗体时的界面如图6所示:
图6窗体运行界面
'窗体加载
PrivateSubForm_Load()
Randomize'初始化随机数产生器
'加载为地雷区方块图片
SetiMine(0).Picture=ilMap.ListImages(9).Picture
'参数初始设定
CallsetInit(GetSetting("Mine","Level","1","0"))
'计数区配置
CallsetCounterInit
'地雷区配置
CallsetMapInit
'设定窗体大小
CallsetFormSize
EndSub
6系统测试
扫雷游戏是WINDOWS系统自带的一个娱乐性的小游戏,为了确保本游戏能够正常运行,需要在发布之后做一次较全面的测试。
扫雷游戏的目标是尽快找到雷区中的所有地雷,而不许踩到地雷。
如果挖开的是地雷,您将输掉游戏。
扫雷游戏在程序运行后生成指定的地雷,在鼠标左键点击下寻找地雷,右键点击下标记地雷,点击笑脸的标记开始重新游戏,并给出胜利和失败的条件:
标出所有的地雷和左键点中地雷。
在游戏菜单上,单击开局。
单击游戏区中的任何方块,要启动计时器。
通过单击即可挖开方块。
如果挖开的是地雷,则您输掉游戏。
如果方块上出现数字,则表示在其周围的八个方块中共有多少颗地雷。
要标记您认为可能有地雷的方块,请右键单击它。
游戏区包括雷区、地雷计数器和计时器。
经过一些简单的步骤的测试,证明本游戏具有相当的稳定性。
结束语
经过一个星期的设计和开发,以VisualBasic6.0为开发工具,扫雷小游戏基本开发完毕,基本功能能够实现。
但是由于设计时间较短,所以该游戏还有许多不尽如人意的地方,有待进一步改善。
在游戏的设计过程中,学习了很多知识包括设计思想和对所学语言的应用,加深了对VisualBasic6.0的理解,还使我对各个控件有了更好的掌握。
能把所学的运用到实践中,提高了独立思考和动手能力。
同时深深地体会到进行软件开发不是一件简单的事情,它需要设计者具有全面的专业知识、缜密的思维、严谨的工作态度以及较高的分析问题解决问题的能力,而我在很多方面还有欠缺。
今后还要努力学习这方面的专业知识,虚心请教他人的工作经验,来提高自身的分析问题、解决问题的能力。
参考文献
[1]柴欣,武优西.VisualBasic程序设计基础.中国铁道出版社,2005,8(3):
73-79
[2]刘瑞新,汪远佂.VisualBasic程序设计教程.机械工业出版社,2002,5:
209-223
[3]谭浩强.VisualBasic程序设计案例教程.清华大学出版社,2008,2
(2):
32-37
[4]管丽娜,白海波.实用VisualBasic6教程.北京:
清华大学出版社,2001
[5]段兴.VisualBasic数据库实用程序设计100例.人民邮电出版社,2002
[6]王运坚.VISUALBASIC6.0应用指南.北京:
人民邮电出版社,1998
致谢
经过一周的努力,我做的扫雷游戏终于完成。
在课设的过程中遇到了很多问题,在老师的指导下和同学的帮助下,把这些问题一一解决了,按时的顺利的完成了任务。
由于学识疏浅,文中难免有失当之处,敬请老师不吝赐教,以使本文能够更加完善!
在此,对老师和同学表示衷心的感谢!
附录
附上本程序完整代码:
DimMAP_XAsInteger'地图的X轴长
DimMAP_YAsInteger'地图的Y轴长
DimMINE_NUMAsInteger'地雷数
DimMINE_NUM_LABELAsInteger'地雷标记数
DimMINE_NUM_CLEARAsInteger'方块清除数
DimTIME_COUNTERAsInteger'时间计数
DimisStartAsBoolean'游戏是否已进行
DimisDieAsBoolean'游戏是否呈结束状态
DimisFinalAsBoolean'游戏是否完成
DimmapArr()AsInteger'地雷区地雷分布情形
DimmapFaceArr()AsInteger'地雷区方块探测情形
'窗体加载
Private