« 简单问题--VC制作的程序运行时如何动态设置控件焦点« »娃啊,刚学编程半个月就瘦成这样了 »
VB入门必看,VB扫雷游戏,详细说明每一行代码-附源码下载

VB入门必看,VB扫雷游戏,详细说明每一行代码-附源码下载

VB扫雷游戏--是我在大二刚学VB时做的,当时没有参考别人的系统,都是自己想出来的,现在感觉,算法还是不错的,就是有点冗余,还可以精简,不过我现在没时间做这个了,因为我已经好久没做VB了,所以,如果你有兴趣可以好好研究一下,有问题再问。这个程序原来发表在百度VB贴吧里,流量不错,还有很多人因为这个而加我QQ来问我相关的问题,一直都想整理一下放到我的博客里让大家下载回去看,可惜,总是一忙起来就忘记了,今天看到一网友在博客里留言,所以,马上整理一下,发上来,不然,过一下又忘记了,到时就对不起这位网友了。

源码里有我的联系方法,里面的那个我的网站已经关闭了,我现在还没有改过来,也没什么关系。呵呵。希望有什么问题尽管提,有时间我就会到博客里来的,一定第一时间回复你。这里是:巴士飞扬技术博客 地址:www.busfly.cn

聪聪扫雷第二版2.00.02.rar

 http://www.busfly.cn/ 巴士飞扬技术博客 欢迎你

源码也贴出来,大家好一起讨论:

VERSION 5.00
Begin VB.Form Form1
   AutoRedraw      =   -1  'True
   BackColor       =   &H8000000B&
   BorderStyle     =   1  'Fixed Single
   Caption         =   "聪聪扫雷"
   ClientHeight    =   5085
   ClientLeft      =   45
   ClientTop       =   735
   ClientWidth     =   4125
   Icon            =   "Form1.frx":0000
   LinkTopic       =   "Form1"
   MaxButton       =   0   'False
   ScaleHeight     =   5085
   ScaleWidth      =   4125
   StartUpPosition =   2  '屏幕中心
   Begin VB.PictureBox P
      AutoRedraw      =   -1  'True
      BackColor       =   &H8000000B&
      Height          =   3855
      Left            =   120
      ScaleHeight     =   3795
      ScaleWidth      =   3795
      TabIndex        =   3
      Top             =   1080
      Width           =   3855
      Begin VB.CommandButton C
         BackColor       =   &H8000000A&
         Height          =   105
         Index           =   0
         Left            =   120
         Style           =   1  'Graphical
         TabIndex        =   4
         Top             =   0
         Width           =   135
      End
   End
   Begin VB.PictureBox Picture1
      AutoRedraw      =   -1  'True
      BackColor       =   &H8000000B&
      Height          =   855
      Left            =   120
      ScaleHeight     =   795
      ScaleWidth      =   3795
      TabIndex        =   0
      Top             =   120
      Width           =   3855
      Begin VB.Timer Timer1
         Enabled         =   0   'False
         Interval        =   1000
         Left            =   2040
         Top             =   240
      End
      Begin VB.CommandButton c1
         Caption         =   "Start"
         BeginProperty Font
            Name            =   "Arial"
            Size            =   18
            Charset         =   0
            Weight          =   700
            Underline       =   0   'False
            Italic          =   0   'False
            Strikethrough   =   0   'False
         EndProperty
         Height          =   615
         Left            =   1320
         TabIndex        =   5
         Top             =   120
         Width           =   1095
      End
      Begin VB.TextBox Text2
         Alignment       =   1  'Right Justify
         BackColor       =   &H80000006&
         CausesValidation=   0   'False
         BeginProperty Font
            Name            =   "宋体"
            Size            =   21.75
            Charset         =   134
            Weight          =   700
            Underline       =   0   'False
            Italic          =   0   'False
            Strikethrough   =   0   'False
         EndProperty
         ForeColor       =   &H000000C0&
         Height          =   540
         Left            =   2640
         Locked          =   -1  'True
         TabIndex        =   2
         TabStop         =   0   'False
         Text            =   "0"
         Top             =   120
         Width           =   1035
      End
      Begin VB.TextBox Text1
         Alignment       =   1  'Right Justify
         BackColor       =   &H80000006&
         CausesValidation=   0   'False
         BeginProperty Font
            Name            =   "宋体"
            Size            =   21.75
            Charset         =   134
            Weight          =   700
            Underline       =   0   'False
            Italic          =   0   'False
            Strikethrough   =   0   'False
         EndProperty
         ForeColor       =   &H000000C0&
         Height          =   555
         HideSelection   =   0   'False
         IMEMode         =   2  'OFF
         Left            =   120
         Locked          =   -1  'True
         TabIndex        =   1
         TabStop         =   0   'False
         Text            =   "10"
         Top             =   120
         Width           =   1035
      End
   End
   Begin VB.Menu mnustart
      Caption         =   "开始(&S)"
   End
   Begin VB.Menu munexit
      Caption         =   "退出(&E)"
   End
   Begin VB.Menu abaot
      Caption         =   "关于(&A)"
   End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Dim a(9, 9) As Integer, coun As Integer, rei As Integer
'为0时打开一大片的的0
Public Sub op0(i As Integer)
C(i).BackColor = &HFFFFFF: C(i).Caption = a(Int(i / 10), Int(i Mod 10))
If i - 1 >= 0 And i Mod 10 <> 0 Then If C(i - 1).BackColor <> &HFFFFFF Then C_Click (i - 1)
If i > 9 And i Mod 10 <> 9 Then If C(i - 9).BackColor <> &HFFFFFF Then C_Click (i - 9)
If i >= 10 Then If C(i - 10).BackColor <> &HFFFFFF Then C_Click (i - 10)
If i >= 11 And i Mod 10 <> 0 Then If C(i - 11).BackColor <> &HFFFFFF Then C_Click (i - 11)
If i + 1 <= 99 And i Mod 10 <> 9 Then If C(i + 1).BackColor <> &HFFFFFF Then C_Click (i + 1)
If i + 9 <= 99 And i Mod 10 <> 0 Then If C(i + 9).BackColor <> &HFFFFFF Then C_Click (i + 9)
If i + 10 <= 99 Then If C(i + 10).BackColor <> &HFFFFFF Then C_Click (i + 10)
If i + 11 <= 99 And i Mod 10 <> 9 Then If C(i + 11).BackColor <> &HFFFFFF Then C_Click (i + 11)
End SubPrivate Sub abaot_Click()
MsgBox "版权所有,仅供学习,请不要用于商业用途,作者:袁聪,QQ:81734107,E-mail:janrn@163.com, 有任何问题请到我的博客留言,巴士飞扬技术博客 地址:
www.busfly.cn,  如果支持我,就常来这里交流.我也会在这里提供更多原创代码."
End Sub

 

 

 

 

Private Sub C_Click(Index As Integer) '单击左键,用蓝色标记挖开
If C(Index).BackColor = vbRed Then
Else
    If a(Int(Index / 10), Int(Index Mod 10)) = -1 Then rei = -10: Timer1.Enabled = False: click: MsgBox "你技术怎么这么菜啊,回去再练练吧!!  你所花的时间是:" + Str(Val(Text2.Text)) + "秒", vbOKOnly, "结果" 'Form2.Caption = "失败了,郁闷啊!": Form2.Picture = LoadPicture("G:\done\VB\第6章习题\6-131\3.gif"): Form2.Show
'挖错了雷,失败
    If a(Int(Index / 10), Int(Index Mod 10)) <> -1 And C(Index).BackColor <> vbRed Then
    If a(Int(Index / 10), Int(Index Mod 10)) = 0 Then
        Call op0(Index)
     Else
        C(Index).BackColor = &HFFFFC0: C(Index).Caption = a(Int(Index / 10), Int(Index Mod 10))
    End If
    End If
End If
End Sub

Private Sub C_MouseDown(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
If rei <> -10 And rei <> 10 Then
    If Button = 2 Then '右键时红色为插旗,再点右键取消
        If C(Index).BackColor = vbRed Then
            C(Index).BackColor = &H8000000A: coun = coun + 1
            If a(Int(Index / 10), Int(Index Mod 10)) = -1 Then rei = rei - 1
        Else
            If C(Index).BackColor <> &HFFFFC0 And C(Index).BackColor <> &HFFFFFF Then C(Index).BackColor = vbRed: coun = coun - 1
            If a(Int(Index / 10), Int(Index Mod 10)) = -1 Then rei = rei + 1
        End If
        Text1 = coun
       
        If rei = 10 Then Timer1.Enabled = False: MsgBox "胜利,好极了!  你所花的时间是:" + Str(Val(Text2.Text)) + "秒", vbOKOnly, "结果"
    End If
End If
'雷全部挖出,胜利
End Sub
Private Sub C1_Click()
Dim b(9) As Integer, temp As Integer, i As Integer, j As Integer
Randomize
coun = 10 '雷数计数器
Text1 = coun '雷数
rei = 0 '正确挖出的雷数
For i = 0 To 99
C(i).BackColor = &H8000000A
C(i).Caption = ""
a(Int(i / 10), Int(i Mod 10)) = 0 '全部为0,表示都没雷
Next

b(0) = Int(Rnd * 100) '随机产生1个雷

For i = 1 To 9
ji:
    b(i) = Int(Rnd * 100) '随机产生9个雷
     For j = 0 To (i - 1)
     If b(i) = b(j) Then GoTo ji
     Next
Next


For i = 0 To 9
temp = b(i)
a(Int(temp / 10), Int(temp Mod 10)) = -1 '雷
If temp - 1 >= 0 And temp Mod 10 <> 0 Then If a(Int((temp - 1) / 10), Int((temp - 1) Mod 10)) <> -1 Then a(Int((temp - 1) / 10), Int((temp - 1) Mod 10)) = a(Int((temp - 1) / 10), Int((temp - 1) Mod 10)) + 1 '附近的雷数加1
If temp - 9 > 0 And temp Mod 10 <> 9 Then If a(Int((temp - 9) / 10), Int((temp - 9) Mod 10)) <> -1 Then a(Int((temp - 9) / 10), Int((temp - 9) Mod 10)) = a(Int((temp - 9) / 10), Int((temp - 9) Mod 10)) + 1 '附近的雷数加1
If temp - 10 >= 0 Then If a(Int((temp - 10) / 10), Int((temp - 10) Mod 10)) <> -1 Then a(Int((temp - 10) / 10), Int((temp - 10) Mod 10)) = a(Int((temp - 10) / 10), Int((temp - 10) Mod 10)) + 1  '附近的雷数加1
If temp - 11 >= 0 And temp Mod 10 <> 0 Then If a(Int((temp - 11) / 10), Int((temp - 11) Mod 10)) <> -1 Then a(Int((temp - 11) / 10), Int((temp - 11) Mod 10)) = a(Int((temp - 11) / 10), Int((temp - 11) Mod 10)) + 1  '附近的雷数加1
If temp + 1 <= 99 And temp Mod 10 <> 9 Then If a(Int((temp + 1) / 10), Int((temp + 1) Mod 10)) <> -1 Then a(Int((temp + 1) / 10), Int((temp + 1) Mod 10)) = a(Int((temp + 1) / 10), Int((temp + 1) Mod 10)) + 1 '附近的雷数加1
If temp + 9 < 99 And temp < 90 And temp Mod 10 <> 0 Then If a(Int((temp + 9) / 10), Int((temp + 9) Mod 10)) <> -1 Then a(Int((temp + 9) / 10), Int((temp + 9) Mod 10)) = a(Int((temp + 9) / 10), Int((temp + 9) Mod 10)) + 1 '附近的雷数加1
If temp + 10 <= 99 Then If a(Int((temp + 10) / 10), Int((temp + 10) Mod 10)) <> -1 Then a(Int((temp + 10) / 10), Int((temp + 10) Mod 10)) = a(Int((temp + 10) / 10), Int((temp + 10) Mod 10)) + 1  '附近的雷数加1
If temp + 11 <= 99 And temp Mod 10 <> 9 Then If a(Int((temp + 11) / 10), Int((temp + 11) Mod 10)) <> -1 Then a(Int((temp + 11) / 10), Int((temp + 11) Mod 10)) = a(Int((temp + 11) / 10), Int((temp + 11) Mod 10)) + 1  '附近的雷数加1

Next
Timer1.Enabled = True
Text2.Text = "0"
End Sub

Private Sub Form_Click()
Call click
rei = -10
 Timer1.Enabled = False
End Sub

Private Sub Form_Load()

C(0).Width = (P.Width - 550) / 10
C(0).Left = P.ScaleLeft + 50
C(0).Height = C(0).Width
C(0).Top = P.ScaleTop + 50
For m = 1 To 99

Load C(m)
C(m).Visible = True
C(m).Width = C(0).Width
C(m).Left = P.ScaleLeft + 50 + (C(0).Width + 50) * (m Mod 10)
C(m).Height = C(0).Width
C(m).Top = P.ScaleTop + 50 + (C(0).Width + 50) * Int(m / 10)
Next
C1_Click
End Sub

Public Sub click()
For i = 0 To 99
If a(Int(i / 10), Int(i Mod 10)) <> -1 Then '用白色标记周围没雷
If a(Int(i / 10), Int(i Mod 10)) = 0 Then C(i).BackColor = &HFFFFFF Else C(i).BackColor = &HFFFFC0     '用蓝色标记无雷
Else
C(i).BackColor = vbRed '用红色标记雷
End If

C(i).Caption = a(Int(i / 10), Int(i Mod 10))
Next
End Sub


Private Sub mnustart_Click()
C1_Click
End Sub

Private Sub munexit_Click()
Unload Me
End Sub

Private Sub Timer1_Timer()

Text2.Text = Val(Text2.Text) + 1
End Sub

 

 

 


Tags: VB   |

原创文章如转载,请注明:转载自:巴士飞扬-技术BLOG : http://www.busfly.net/

本文链接地址:http://www.busfly.net/post/vbboon.html

如果你喜欢本文,请顶一下,支持我,你的支持是我继续发好文章的最大动力。谢谢。
好东西需要分享,快把本文发给你的朋友吧~!~

     
相关文章:
  • 引用此留言  12.巴士  
  • 楼主真强。。。。我现在大二,期末要用vb做一个类似于微软扫雷的游戏课设。想了半天也没想懂。哎,总觉得老食讲的和作业要求相差的太远了。。。。
  • [删除]2011-5-28 13:14:50 回复该留言
  • 引用此留言  6.甜甜  
  • 可以告诉我你的QQ吗?我正在做这个设计,想让你教一下.
    巴士飞扬 于 2008-6-16 18:39:46 回复
    抱歉,我已经不做VB,VC很多年了,我现在只做J2EE
  • [删除]2008-6-16 11:39:05 回复该留言
  • 引用此留言  5.急急  
  • 我现在也是大二,要用VC语言做扫雷,我想跟你交流下,如果看到请发个邮件给我,写上你的QQ好吗?
    很急切
    巴士飞扬 于 2008-6-16 18:39:18 回复
    抱歉,我已经不做VB,VC很多年了,我现在只做J2EE
  • [删除]2008-6-16 11:25:54 回复该留言
  • 引用此留言  4.1焛睦  
  • 其实不好
    做的比微软的差多了
    巴士飞扬 于 2008-6-5 17:38:53 回复
    确实差很多,没法比的,哈哈,这个只是上学是练习玩的,没法和微软比的
  • [删除]2008-6-5 9:36:32 回复该留言
  • 引用此留言  2.燕子  
  • 哼~既然这样说我,不懂就不懂,知道什么叫旁观者清么?不懂技术就没发言权,那不懂技术的多了。既然你这么说了以后我保持沉默不在你这上面乱说了
    巴士飞扬 于 2007-9-13 9:50:09 回复
    呵呵,我不是这意思嘛,我是说,你起码要玩一下,才知道,你玩都没玩过我做的这个,你怎么可以说:你的雷有人赢过么?就怕是死局从来没人赢过哦,嘿嘿~~~。
    我可以告诉你,肯定不是你说的这样,这种游戏做起来很简单,怎么会出现你说的这样呢,你肯定是玩都没玩,就这样一相情愿的猜测。
  • [删除]2007-9-13 9:50:09 回复该留言
  • 引用此留言  1.燕子  
  • 你的雷有人赢过么?就怕是死局从来没人赢过哦,嘿嘿~~~
    巴士飞扬. 于 2007-9-12 17:17:00 回复
    女人之见,不和你一般见识。
    不要否定别人的成果,你不做编程,不懂技术,也不玩这个,没有发言权
  • [删除]2007-9-12 17:17:00 回复该留言




◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。
网站分类
分类最近文章
最近发表
最新评论及回复
最近留言
热文排行
随机推荐文章
Powered By Z-Blog   STYLE by busfly . FatMouse
Copyright © 2007 巴士飞扬技术博客. . 沪ICP备07027972号. 会员群1(J2EE为主):3769186.