扫雷游戏设计论文.doc
《扫雷游戏设计论文.doc》由会员分享,可在线阅读,更多相关《扫雷游戏设计论文.doc(17页珍藏版)》请在沃文网上搜索。
1、VB扫雷游戏设计论文摘 要本论文研究的是以Visual Basic 6.0为开发环境,设计并开发一款扫雷游戏,其功能类似于Windows操作系统自带的扫雷游戏。论文首先介绍了制作游戏的整体思路及整个游戏设计的流程规划,然后介绍了雷区的布置及地雷随机产生的实现方法;重点介绍了在游戏过程中各事件的处理,其中又以鼠标事件和清除未靠近地雷区方块这两方面最为最要,鼠标事件是利用鼠标所发出的信息了解使用者的意图,进而做出相对应的动作,而清除未靠近地雷区方块由于引进了“递归”这个概念而使其简单化。本次设计只是完成了扫雷游戏的基本功能,在细节方面仍有待以后完善。关键词:扫雷;Visual Basic 6.0;
2、事件;递归 目 录1引言31.1课题背景及意义32游戏的总体分析与设计32.1设计构想32.2流程规划42.3画面规划53游戏的详细设计63.1游戏初始化63.2雷区的布置93.3游戏中主要模块的介绍与使用103.3.1鼠标事件103.3.2地雷及雷区表面探测情况123.3.3清除未靠近地雷的方块133.3.4游戏难度的选择143.4游戏的判断143.4.1游戏成功完成143.4.2游戏失败144游戏测试结果15结 论15参考文献16致 谢17声 明181引言1.1 课题背景及意义在计算机逐步渗入社会生活各个层面的今天,计算机已经成为人们日常生的一部分,越来越多的人使用计算机办公、娱乐等等。扫
3、雷游戏是Windows操作系统自带的一款小游戏,在过去的几年里,Windows操作系统历经数次换代更新,变得越来越庞大、复杂,功能也越来越强大,但是这款小游戏依然保持原来的容貌,可见这款小游戏受到越来越多人的喜爱。本次的课程设计我将利用Visual Basic6.0作为开发工具,开发一款类似的“扫雷游戏”。通过研究Windows操作系统自带的扫雷游戏,我们可以发现在这个游戏中主要有以下两个关键的地方:第一个是初始化问题,包括随机产生本局游戏中雷的总数,雷的分布对于每一个小区域如何获取周围地区分布的雷数等等。第二就是对鼠标事件的处理问题,既在游戏过程中对鼠标事件应如何做出反应。经过学习,我对理论
4、知识已经有了一定的了解与认知,本次的课程设计便是将书本上所学的理论知识与实际相结合,同时也是对所学知识的一种检查,希望通过本次的课程设计使自己在程序的开发和设计上有新的认识并能有所提高。本次课程设计既锻炼了我们的实际动手能力,又在老师的指导下进行了一次模拟实际产品的开发,对于我们以后工作能力的培养具有重要意义。2 游戏的总体分析与设计2.1 设计构想相信大多数使用Windows操作系统的使用者,对这款游戏都不陌生。这款游戏不止操作简单,规则也不难,再加上游戏速度的控制机制得宜,让整个游戏在操作过程中充满了快乐与紧张的气氛。除了游乐当中能带给使用者快乐之外,游戏的设计内容无形中也不断训练使用者的
5、逻辑思考能力,对于依靠高度脑力工作的现代人,都可以通过这个游戏,不时的检验一下自己,所以我们不难发现,在各种可携带的电子产品上都有这款游戏的踪影。在设计之前,我们先来了解这款游戏的规则。在不掀开任何藏有地雷的方块情况下,以最快的速度找出所有的地雷。如果在掀开方块的过程中,不小心翻开(踩到)藏有地雷的方块,则宣告失败(游戏结束),惟有将所有不含地雷的方块掀开,游戏才算成功。游戏的操作方面主要以鼠标为主,当鼠标指针对准未翻开的方块按下左键时即表示翻开方块,当鼠标指针对准未翻开的方块按下右键时即表示标示或疑示地雷,反复按下右键则方块会以未标示标示疑似三者关系不断循环。游戏者可以通过地雷区内的数字提示
6、了解以数字为中心的其周边八个方格内所含的地雷数,假若翻开的方块显示数字“3”,则表示以其为中心的周边方块内藏有3个地雷。当按下的方块不是地雷,且周边八个方块也都没有地雷时,方块会以被翻开方块的八个方向将空白方块翻开。2.2 流程规划流程规划大致上可以分为三个部分,分别为:画面初始、游戏者按下第一个方块和为非地雷方块时展开。画面初始时,以游戏者最后一次设定的地雷区大小为范围画出地雷区,但此时并未产生地雷。当游戏者按下第一个方块时产生地雷资料并启动定时器,为何在游戏者按下第一个方块才产生地雷资料呢?其主要的用意在于不要让游戏者第一次就踩到地雷,这样在某种程度上可以提高游戏者游玩的气氛。接着就是如何
7、判断按下的方块是非地雷时的处理,这也是整个游戏的技术核心,我们可以通过递归的观念来检查周边的方块是否含有地雷及是否继续往外翻开。流程规划如图1所示:是是开始依照使用者初始设定等待按键左键键右键显示方块1 布置地图2 启动计时器显示分数结束延按下方块周围展开非地雷方块否否是是否是否第一次按下按下方块是否为地图第一次按下是否再玩图1整体流程规划图2.3画面规划画面规划如图2所示: 图2规划样图说明如下:游戏窗口(Form)。为了避免因改变窗口大小而造成画面呈现不美观,在这里将BorderStyle属性设定为3(双线固定对话框),即无法以窗口边缘进行窗口大小调整。:地雷数显示区(PictureBox
8、)。:游戏状态(Image)。:游戏时间显示区(PictureBox)。:计数及状态区(PictureBox)。:地图区图样(Image)。:地雷区(PictureBox)。:存储图片的组件,包括游戏状态图片、地雷区图片、地雷数及秒数数字图片(Imagelist)。:秒数控制(Timer)。3 游戏的详细设计3.1 游戏初始化当玩家开始游戏时,游戏画面如图3所示:地雷区计数及状态区图3游戏初始画面我们可以清楚的看到,游戏界面主要分为两个主要部分:1. 计数及状态区;2.地雷区。首先我利用PictureBox组件,PictureBox为容器类型的组件,因此可以加入其他组件在其内。在游戏中我利用了
9、PictureBox组件的两个特性,分别为容器特性及立体框线,具体如下:(1)容器特性:只要容器本身显示的行为改变,在容器内的组件也会跟着改变。当游戏初始时,地雷区的显示组件会循环执行,逐一布置在画面上,但由于执行循环时多个Image组件要显示图形,造成分时系统执行频率显示上会出现不流畅的情形,若在循环执行前,先将容器本身的Visable属性设为False,在循环执行完成后再将Visable属性设为Ture,则显示就会变得流畅许多。(2)立体框线:通过组件本身立体框线的属性设定,可以为游戏画面的显示上营造出层次感。然后再利用ImageList组件来存储游戏中将要使用的图片,我们可以将组件布置于
10、窗体后编辑组件属性,如图4所示:图4通过InsertPicture和RemovePicture按钮即可编辑组件所存放的图片。利用ImageList集合对象的Picture方法,即可将ImageList组件内的图片指定给图形显示组件,语法如下:Set 图形组件. Picture=ImageList. ImageList(图片索引). Picture因为一个ImageList组件内必须存储大小相同的图片,所以在游戏中显示的图片共分为三个部分:1.数字计数图形;2.游戏状态图形;3.地雷区表示图形。所以我们使用了三个ImageList组件来存储不同大小的图片。接着便是对地雷区的初始化,这里我们利用L
11、oad及UnLoad指令,动态新增及删除组件。在游戏的地雷区,我们依照游戏者自定义的地图类型,来布置未探测地雷方块。假如设定的地图大小为2030时,我们可以通过双循环ForNext及Load指令在程序执行阶段动态加载表示方块的组件,程序片段如下:加载表示地图资料的图片For y = 0 To 20 地雷区高For x = 0 To 30 地雷区宽Load 表示方块组件(index) 设定组件位置Next xNext y经过双循环的运算,程序就会产生2030=600个组件,试想如果在程序设计阶段,就把600个组件布置在窗体上,那将是多么没有效率的事情,况且组件数量的多少,还要取决于游戏玩家设定的
12、地雷区大小,所以利用Load指令对于大量加载同一组件的动作将有莫大的帮助。加载组件后必须将组件做适当的布置,我们可以通过Image组件的Move属性,将组件布置于预定的位置,Move函数的原型如下:组件.Move X坐标,Y坐标,组件宽度,组件高度(其中括号内表示可以省略)再配合双循环的变量值,可以控制组件布置于窗体的方向及方式,例如以下程序片段:For y = 0 To 20 地雷区高For x = 0 To 30 地雷区宽Load 表示方块组件(index) 设定组件位置 组件(index).Move x *组件宽度,y *组件高度Next xNext y组件将呈现先由左至右,再由上至下布
13、置。若将内循环改为y值,同样的Move指令,组件的布置方向将由上而下再由左至右。布置方向的不同,会关联到组件内含的索引值不同,相对在程序执行阶段存取组件时,所定义的组件索引值就必须考虑组件不止的方向,这样才不会造成组件存取的错误。以由左至右再由上而下的布置方式为例,我们可以利用以下公式,求得组件索引值:组件索引值=(X坐标+Y坐标*数组宽度)这样,游戏界面的初始化工作就基本完成了,下面就是地雷的随机产生。3.2雷区的布置当游戏界面初始化完成后,这时在地雷区中并未产生地雷,只有当玩家在地雷区中第一次点下左键后,才会在地雷区中随机的布置当前游戏难度下应该产生的地雷总数,其主要用意在于不让玩家第一次
14、就踩到地雷,这样在某种程度上可以提高玩家游戏的气愤。具体实现如下所示:判断地雷区是否处于可动作状态 If isDie = False And isFinal = False Then xxx = index Mod MAP_X 标示动作图片的坐标 yyy = index MAP_X 判断为左键且该方块为未探测状态 If Button = 1 And mapFaceArr(xxx, yyy) = 1 Then 判断游戏是否等待启动 If isStart = False Then cMINE_NUM = MINE_NUM isStart = True Timer1.Enabled = True 布
15、置地雷 Do While cMINE_NUM 0 rX = Rnd() * (MAP_X - 1) rY = Rnd() * (MAP_Y - 1) 判断数组中(rX,rY)为非地雷及 非点选的方块坐标时If mapArr(rX, rY) 9 And _ Not (rX = xxx And rY = yyy) Then cMINE_NUM = cMINE_NUM - 1 mapArr(rX, rY) = 9 地雷外围数字各加一 For xx = rX - 1 To rX + 1 For yy = rY - 1 To rY + 1 If xx = 0 And xx = 0 And yy = MA
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
20 积分
下载 | 加入VIP,下载更划算! |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 扫雷 游戏 设计 论文
