VB6实现简单的扫雷小游戏

#VB实现简单的扫雷小游戏
扫雷这个小游戏可谓是简单又好玩,百万不腻,不知道有没有小伙伴跟博主一样脑热的曾经扫过一整个屏幕的雷。。。

源码可以在作者的资源页下载

https://download.csdn.net/download/wf824284257/9692305

今天呢,博主在这里总结一下自己做扫雷小游戏的主要过程以及主要思路,当然实际的过程相比这里介绍的可能会复杂一点点,博主已经将自己的扫雷源码上传到资源页了,读者可以参考。希望可以帮到后来的小伙伴们,游戏效果如图

VB6实现简单的扫雷小游戏_第1张图片

VB6实现简单的扫雷小游戏_第2张图片

好,下面我们从头开始依次分析一下如何实现这样的效果

##1.游戏功能分析

扫雷小游戏需要做哪些功能呢?

在开始游戏后,程序需要根据难度系数自动生成一片雷区,雷区包含少数地雷和多数空地,在规定时间内找出雷区中的所有地雷即可胜利。左键点击地雷会导致游戏失败,并给出所有地雷的位置;右键点击地雷或者空地都会在上面标记一面小旗,但右键点击地雷时,剩余地雷数会-1,而点击空地时不会。每次右键标记地雷后,都要判断剩余地雷数是否为0,是的话就胜利了。

##2.控件分析

通过以上的游戏功能分析可以得到我们需要用到的控件。

在游戏提示方面,我们需要1个标签lblbomb来显示雷数,1个标签lbltime来显示剩余时间,一个timer1来计时,1个按钮cmdstart作为开始游戏的按钮。并且把以上控件全放如一个框架frame1中。

在雷区这里,我们需要1个按钮来表示空地,并设置index为0;1个按钮来表示地雷,并设置index为0;一个标签来显示周围地雷数,并设置index为0.

在游戏开始后,需要根据游戏难度加载出空地按钮和地雷按钮以及显示周围地雷数得标签按钮

下面给出主要控件的名称及主要参数

【说明】	  【名称】 	【index】
空地按钮		Cmd0  		0
地雷按钮		Cmd1		0
标签按钮		lblnum		0

在调试过程中可以将空地按钮的caption设置为0,地雷按钮的caption设置为1,便于调试。
VB6实现简单的扫雷小游戏_第3张图片

##3.变量参数分析

主要游戏参数:
Public level As Integer ' 游戏难度
Public cmdnum As Integer ' 雷区所有按钮数目
Public bombnum As Integer ' 地雷数目
Public timerest As Integer ' 剩余时间
Public matrix() As Integer ' 雷区矩阵,0代表空地,1代表地雷
Public bombrest As Integer ' 剩余地雷数

这里我们设置雷区为正方形,此正方形的一条边上有几个按钮,难度就是几,所以有cmdnum=level^2。

设置地雷数为按钮总数的七分之一 bombnum=cmdnum\7,注意是整除。游戏开始时bombrest=bombnum。

matrix() 是动态数组,在游戏设置难度以后,Redim matrix(level,level)即可,用来储存游戏雷区的情况,为0代表是空地,为1代表是地雷。

主要界面参数:
Public lk as Integer '界面周围的留空
Public sw as Integer '雷区每个按钮的宽
Public sh as Integer '雷区每个按钮的高

通过以这三个参数为基底,可以很方便的给出每个按钮的坐标位置。

##4.功能实现分析

主要游戏代码思路:

窗体加载时,将cmd0,cmd1,lblnum设置为不可见,timer1设置为不可用。

点击开始时,首先inputbox 输入难度系数,若输入数字小于5,则难度等于5;若输入数字大于15,则难度等于15;输入数字在5到15之间,则难度等于该输入数字。

根据level求出所有游戏参数信息

cmdnum=level^2
bombnum=cmdnum\7
bombrest=bombnum

设置界面参数lk=300,sw=600,sh=600,设置剩余时间timerest=300

重定义动态数组 Redim matrix(level,level) ,以及给出每个位置的值,代码如下

ReDim matrix(level, level)
Randomize
Dim r As Integer  '随机数
For i = 1 To bombnum  '在矩阵内放置bombnum个1,其他位置为0
    r = Int(cmdnum * Rnd) + 1  '随机范围1到cmdnum
    j = (r - 1) \ level    '根据随机数得到坐标(j,k)
    k = (r - 1) Mod level
    If matrix(j, k) <> 1 Then '如果(j,k)位置未放置地雷,就放上
        matrix(j, k) = 1
    Else      '已经放置地雷了,则再重来一次
        i = i - 1
    End If
Next i

对窗体大小的设置

Frame1.Left = 0
Frame1.Top = 0
Frame1.Width = level * sw + 2 * lk
Frame1.Height = 800

Form1.Width = level * sw + 2 * lk
Form1.Height = level * sh + 2 * lk + Frame1.Height + lk

对于控件的加载以及初始设置,首先加载出所需要数量的控件,然后我们需要根据matrix的值来一个一个放置控件,并调节控件的属性,比如放置炸弹即cmd1的代码如下

Dim p1 as Integer
p1=0 '第p1个炸弹
For i = 0 To level - 1
    For j = 0 To level - 1

        If matrix(i, j) = 1 Then
		    Dim cmd As CommandButton
		    '放炸弹
		    Set cmd = Cmd1(p1) 
		    cmd.Top = Frame1.Height + lk + i * sh
		    cmd.Left = lk + j * sw
		    cmd.Width = sw - 20 '每个按钮之间留2*20=40的空隙,美观
		    cmd.Height = sh - 20
		    cmd.Visible = True
			p1=p1+1
		end if

	next j
next i

其他控件放置就由读者自己考虑了,博主也将自己的代码放到了博主资源页,读者可以下载参考

对于空地按钮的MouseDown事件,如果是左键点击的话,就让它以及它周围的空地按钮成为不可见状态,这样就会将它下面的标签按钮透出,显示周围的地雷数。如果是右键,则标记一面旗子,博主比较懒,没有搞图片,就写个"-F-"上去代表旗子吧

对于地雷按钮的MouseDown事件,如果是左键的话,就给出所有地雷位置,并提示失败;如果是右键,就标记一面旗子(写个"-F-"),并且bombrest=bombrest-1,判断bombrest是否为0,如果为0提示胜利。

##5结束
该游戏源代码在作者的个人主页下载http://www.dawufan.cn/

你可能感兴趣的:(VB6)