君,已阅读到文档的结尾了呢~~
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
基于Java的扫雷课程设计
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口关于扫雷游戏设计_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
关于扫雷游戏设计
上传于||文档简介
&&扫雷游戏设计
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩18页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢扫雷游戏的设计与开发
&&&&&&&&&&&&&&
&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
Visual Basic
6.0Windows
关键词:扫雷;Visual
论文总页数:16页
WindowsWindowsVisual
Visual Basic(VB)是一种由微软公司开发的包含协助开发环境的事件驱动编程语言。从任何标准来说,VB都是世界上使用人数最多的语言----不仅是盛赞VB的开发者还是抱怨VB的开发者的数量。它源自于BASIC编程语言。VB拥有图形用户界面(GUI)和快速应用程序开发(RAD)系统,可以轻易的使用DAO、RDO、ADO连接数据库,或者轻松的创建ActiveX控件。程序员可以轻松的使用VB提供的组件快速建立一个应用程序。
1991年,微软公司推出了Visual Basic
1.0版。这在当时引起了很大的轰动。这个连接编程语言和用户界面的进步被称为Tripod(有些时候叫做Ruby),最初的设计是由阿兰?库珀(Alan
Cooper)完成的。许多专家把VB的出现当做是软件开发史上的一个具有划时代意义的事件。其实,以我们现在的目光来看,VB1.0的功能实在是太弱了;(不过最近VB6.0, VB.NET的功能相当大!)。但在当时,它是第一个“可视”的编程软件。这使得程序员欣喜之极,都尝试在VB的平台上进行软件创作。微软也不失时机地在四年内接连推出VB2.0,VB3.0,4.0三个版本。并且从VB3开始,微软将ACCESS的数据库驱动集成到了VB中,这使得VB的数据库编程能力大大提高。从VB4开始,VB也引入了面向对象的程序设计思想。VB功能强大,学习简单。而且,VB还引入了“控件”的概念,使得大量已经编好的VB程序可以被我们直接拿来使用。VB1.0的DOS版本VB1.0于1991年发布。这个连接编程语言和用户界面的进步被称为Tripod(有些时候叫做Ruby),最初的设计是由阿兰?库珀(Alan
Cooper)完成的。
VB 2005的“显著”优点是,可以直接编写出XP风格的按钮,以及其他的控件。但是其编写的小程序占用近10MB的内存。通过几年的发展,它已成为一种专业化的开发语言和环境。用户可用Visual Basic快速创建Windows程序,现在还可以编写企业水平的客户端/服务器程序及强大的数据库应用程序。VB会吸引更多的赞誉和批评,也会继续为广大的用户和程序员使用。它非常适合用来开发拥有友好界面的程序(比如针对终端的数据),但是不适合开发其它程序(比如联合计算程序)。
一个典型的VB进程VB的中心思想就是要便于程序员使用,无论是新手或者专家。VB使用了可以简单建立应用程序的GUI系统,但是又可以开发相当复杂的程序。VB的程序是一种基于窗体的可视化组件安排的联合,并且增加代码来指定组建的属性和方法。因为默认的属性和方法已经有一部分定义在了组件内,所以程序员不用写多少代码就可以完成一个简单的程序。过去的版本里面VB程序的性能问题一直被放在了桌面上,但是随着计算机速度的飞速增加,关于性能的争论已经越来越少。
窗体控件的增加和改变可以用拖放技术实现。一个排列满控件的工具箱用来显示可用控件(比如文本框或者按钮]]。每个控件都有自己的属性和事件。默认的属性值会在控件创建的时候提供,但是程序员也可以进行更改。很多的属性值可以在运行时候随着用户的动作和修改进行改动,这样就形成了一个动态的程序。举个例子来说:窗体的大小改变事件中加入了可以改变控件位置的代码,在运行时候每当用户更改窗口大小,控件也会随之改变位置。在文本框中的文字改变事件中加入相应的代码,程序就能够在文字输入的时候自动翻译或者阻止某些字符的输入。VB的程序可以包含一个或多个窗体,或者是一个主窗体和多个子窗体,类似于操作系统的样子。有很少功能的对话框窗口(比如没有最大化和最小化按钮的窗体)可以用来提供弹出功能。
VB的组件既可以拥有用户界面,也可以没有。这样一来服务器端程序就可以处理增加的模块。
&VB使用参数计算的方法来进行垃圾收集,这个方法中包含有大量的对象,提供基本的面向对象支持。因为越来越多组建的出现,程序员可以选用自己需要的扩展库。和有些语言不一样,VB对大小写不敏感,但是能自动转换关键词到标准的大小写状态,以及强制使得符号表入口的实体的变量名称遵循书写规则。默认情况下字符串的比较是对大小写敏感的,但是可以关闭这个功能。
VB使得大量的外界控件有了自己的生存空间。大量的第三方控件针对VB提供。VB也提供了建立、使用和重用这些控件的方法,但是由于语言问题,从一个应用程序创建另外一个并不简单。
在讨论Visual
Basic时,经常可以听到以下这些术语,因此对这些术语的基本理解十分有帮助。
控件----简单的说,控件就是构成或者说建造Visual
Basic应用程序的图形化工具,包括窗体、按钮、复选框、列表框、数据控件、表格控件和图片控件等等...。
事件----由用户或操作系统引发的动作。事件的示例有击键、单击鼠标(Click)、双击鼠标(DblClick)、一段时间的限制,或从端口接收数据。
方法----嵌入在对象定义中的程序代码,它定义对象怎样处理信息并响应某事件。例如,数据库对象有打开纪录集并从一个记录移动到另一个记录的方法程序的基本元素,它含有定义其特征的属性,定义其任务和识别它可以响应的事件的方法。控件和窗体是Visual Basic中所有对象的示例。
对象----一个控件、窗体等都可被看作一个对象。
过程----为完成某些特定的任务而编写的代码段,过程通常用于响应特定的事件,也可以当作应用程序的用户自定义函数来使用。
属性----属性是组成用户界面的各对象的性质的具体描述。例如上述“对象”中所提到的尺寸、位置、颜色、宽度、高度等等都称为控件的
属性。属性决定对象的外观,有时也决定对象的行为。对象的属性绝大部分是VB中已经事先定义好的,但也有的属性是需要在应用
过程中才去定义的。属性即可为对象提供数据,也能从对象取回信息。
随着Intemet的迅猛发展,Microsoft的ActiveX技术出现了,并被不失时机地加入到 Visual Basic 5.0版本中(1997年)。在1998年,Microsoft推出了Visual Basic 6.0版本,这一版本使VB得到了很大的扩充和增强。它还引入了使用部件编程的概念,实际上这是对面向对象编程思想的扩展。迄今为止,Visual Basic已经发展成为快速应用程序开发(RAD,Rapid Application Development)工具的代表。
图1整体流程规划图
画面规划如图2所示:
&&&&&&&&&&&&&&&&
图2规划样图
说明如下:
①:游戏窗口(Form)。为了避免因改变窗口大小而造成画面呈现不美观,在这里将BorderStyle属性设定为3(双线固定对话框),即无法以窗口边缘进行窗口大小调整。
②:地雷数显示区(PictureBox)。
③:游戏状态(Image)。
④:游戏时间显示区(PictureBox)。
⑤:计数及状态区(PictureBox)。
⑥:地图区图样(Image)。
⑦:地雷区(PictureBox)。
⑧:存储图片的组件,包括游戏状态图片、地雷区图片、地雷数及秒数数字图片(Imagelist)。
⑨:秒数控制(Timer)。
图3游戏初始画面
我们可以清楚的看到,游戏界面主要分为两个主要部分:1. ;2.地雷区。
首先我利用PictureBoxPictureBoxPictureBox
(1)容器特性:只要容器本身显示的行为改变,在容器内的组件也会跟着改变。当游戏初始时,地雷区的显示组件会循环执行,逐一布置在画面上,但由于执行循环时多个Image组件要显示图形,造成分时系统执行频率显示上会出现不流畅的情形,若在循环执行前,先将容器本身的Visable属性设为False,在循环执行完成后再将Visable属性设为Ture,则显示就会变得流畅许多。
然后再利用ImageList组件来存储游戏中将要使用的图片,我们可以将组件布置于窗体后编辑组件属性,如图4所示:
通过InsertPicture和RemovePicture按钮即可编辑组件所存放的图片。
利用ImageList集合对象的Picture方法,即可将ImageList组件内的图片指定给图形显示组件,语法如下:
Set 图形组件. Picture=ImageList.
ImageList(图片索引). Picture
因为一个ImageList组件内必须存储大小相同的图片,所以在游戏中显示的图片共分为三个部分:1.数字计数图形;2.游戏状态图形;3.地雷区表示图形。
所以我们使用了三个ImageList组件来存储不同大小的图片。
接着便是对地雷区的初始化,这里我们利用Load及UnLoad指令,动态新增2030For…NextLoad:
For& y = 0 To
For& x = 0 To
2030=600600Load
ImageMoveMove
For& y = 0 To
For& x = 0 To
index.Move x
yMove=X+Y*
这样,游戏界面的初始化工作就基本完成了,下面就是地雷的随机产生。
雷区的布置
当游戏界面初始化完成后,这时在地雷区中并未产生地雷,只有当玩家在地雷区中第一次点下左键后,才会在地雷区中随机的布置当前游戏难度下应该产生的地雷总数,其主要用意在于不让玩家第一次就踩到地雷,这样在某种程度上可以提高玩家游戏的气愤。具体实现如下所示:
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
&&&&&&&&&&&&&&&
&&&&&&&&&&&&&
&&&&&&&&&&&&&&&
Do While cMINE_NUM & 0
&&&&&&&&&&&&&&&&&&&
rX = Rnd() * (MAP_X - 1)
&&&&&&&&&&&&&&&&&&&
rY = Rnd() * (MAP_Y - 1)
&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
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 &= MAP_X And
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
yy &= 0 And yy &= MAP_Y
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
If mapArr(xx, yy) && 9 And
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
Not (xx = rX And yy = rY) Then
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
mapArr(xx, yy) = mapArr(xx, yy) + 1
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&
&&&&&&&&&&&
游戏中主要模块的介绍与使用
在游戏过程中,我们利用鼠标所发出的信息了解游戏者的意图,进而作出相对应的动作。
在MouseDown与MouseUp事件中,可以捕捉鼠标所按下或放开的按键为何、鼠标光标在该组件上的坐标及是否同时按下辅助键等。函数原型如下:
组件名称_MouseDown(index As Integer, _Button As
Integer, _Shift As Integer, _ x As Single, _y As
组件名称_MouseUp(index As Integer, _Button As
Integer, _Shift As Integer, _ x As Single, _y As
在参数列中,Button参数值表示鼠标上的按狃数值。其意义如下:
1:左键&&&&&
倘若同时按下不止一个按键时,则传回数值为按键数值相加,例如同时按下左键及右键,则Button值为1+2=3
在本游戏中,我们利用右键的MouseDown事件来标示“已标示”方块,利用左键的MouseDown事件,来标示游戏者准备按下的方块,再利用左键的MouseUp事件来确定翻开的方块。这样的用意在于,假如游戏者发现按下的方块是错误的,此时只要不松开左键,同时按下右键,该方块就会被标示为“已标示”方块,若再松开左键,则该方块因为已成为“已标示”方块,所以就无法翻开。
在窗口的软件中,鼠标的应用是不可或缺的,但鼠标固然好用,如果程序设计不当,也可能造成使用者的不便。通常鼠标在软件的应用上经常使用MouseUp事件来作为确定使用者的操作意图,而只把MouseDown事件当做标示的用途(用意就如同前面所提),只是为给使用者一个反悔的机会。
游戏的操作方面主要以鼠标为主,当鼠标指针对准未翻开的方块按下左键时即表示翻开方块
If Button = 1 Then
&&&&&&&&&&&
If mapFaceArr(xxx, yyy) = 1 Then
&&&&&&&&&&&&&&&
Call setMineImage(index, 10)
&&&&&&&&&&&&&&&
Set iState.Picture =
ilSmile.ListImages(3).Picture
&&&&&&&&&&&
If Button = 2 Then
&&&&&&&&&&&
If mapFaceArr(xxx, yyy) = 1 Then '
&&&&&&&&&&&&&&&
mapFaceArr(xxx, yyy) = 2
&&&&&&&&&&&&&&&
MINE_NUM_LABEL = MINE_NUM_LABEL + 1
&&&&&&&&&&&&&&&
Call setMineImage(index, 13)
&&&&&&&&&&&&&&&
Call setNowMines
&&&&&&&&&&&
&&&&&&&&&&&
ElseIf mapFaceArr(xxx, yyy) = 2 Then '
&&&&&&&&&&&&&&&
mapFaceArr(xxx, yyy) = 3
&&&&&&&&&MINE_NUM_LABEL
= MINE_NUM_LABEL - 1
&&&&&&&&&&&&&&&
Call setMineImage(index, 14)
&&&&&&&&&&&&&&&
Call setNowMines
&&&&&&&&&&&
&&&&&&&&&&&
ElseIf mapFaceArr(xxx, yyy) = 3 Then '
&&&&&&&&&&&&&&&
mapFaceArr(xxx, yyy) = 1
&&&&&&&&&&&&&&&
Call setMineImage(index, 9)
&&&&&&&&&&&
3.3.2地雷及雷区表面探测情况
图5标示地雷分布情况
图6标示地雷探测情况
3.3.3清除未靠近地雷的方块
(Recursion)if…thenSelect
Private Sub doClear(ByVal x As
Integer, _
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
ByVal y As Integer, _
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
ByVal index As Integer)
MINE_NUM_CLEAR = MINE_NUM_CLEAR + 1
For xx = x - 1 To x + 1
For yy = y - 1 To y + 1
&&&&&&&&&&&
If xx &= 0 And xx &= MAP_X And
&&&&&&&&&&&&&&
yy &= 0 And yy &= MAP_Y
&&&&&&&&&&&&&&&
If Not (xx = x And yy = y) Then
&&&&&&&&&&&&&&&&&&&
If mapFaceArr(xx, yy) = 1 And _
&&&&&&&&&&&&&&&&&&&&&&
mapArr(xx, yy) &= 0 And _
&&&&&&&&&&&&&&&&&&&&&&
mapArr(xx, yy) &= 8 Then
&&&&&&&&&&&&&&&&&&&&&&&
mapFaceArr(xx, yy) = 0
&&&&&&&&&&&&&&&&&&&&&&&
Select Case mapArr(xx, yy)
&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&
&&&&&&&&&&&&Call
setMineImage((yy * MAP_X + xx), 10)
&&&&&&&&&&&&&&&&&&&&&&&&&&&
Call doClear(xx, yy, (yy * MAP_X + xx))
&&&&&&&&&&&&&&&&&&&&&&&
Case 1 To 8
&&&&&&&&&&&&&&&&&
MINE_NUM_CLEAR = MINE_NUM_CLEAR + 1
&&&&&&&&&&&&&&&&&
Call setMineImage((yy * MAP_X + xx), mapArr(xx,
&&&&&&&&&&&&&&&&&&&&&&&
End Select
&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&
&&&&&&&&&&&
3.3.4游戏难度的选择
游戏的判断
3.4.1游戏成功完成
3.4.2游戏失败
TimerTimer
Private Sub
Timer1_Timer()
TIME_COUNTER = TIME_COUNTER + 1
Call setNowTimer
If TIME_COUNTER = 999 Then
isDie = True
Timer1.Enabled = False
mapFaceArr(xxx, yyy) = 0
Call showMine
Call setStateImage
MsgBox "", ,
WindowsFlash
[1] 唐任仲.工程应用软件开发技术[M].北京:化学工业出版社,1999。
李怀明.Visual Basic 6.0 中文版
参考详解[M].北京:清华大学出版社,1999。
李善茂.Visual Basic 6.0
高级编程技巧[M].西安:电子工业出版社,1999。
谭浩强.Visual Basic 6.0 中文版
提高与应用[M].西安:电子工业出版社,1999。
冯锋,王运坚.Visual Basic 程序设计基础教程[M].西安:电子工业出版社,1999。
何斌,刘醒.Visual Basic 6.0 应用指南[M].成都:四川大学出版社,1998。
伍俊良.VB课程设计与系统开发案例[M].北京:清华大学出版社,2002。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。