⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mine.frm

📁 vb精彩编程希望大家有用
💻 FRM
📖 第 1 页 / 共 2 页
字号:
           For Y1 = mY To mY + 2
               If X1 = mX + 1 And Y1 = mY + 1 Then
               Else
                  If X1 >= 1 And X1 <= NowWidth Then
                     If Y1 >= 1 And Y1 <= NowHeight Then
                        x2 = X1: y2 = Y1
                        Picture1_MouseUp vbLeftButton, 0, x2, y2
                     End If
                  End If
                  
               End If
           Next
       Next
          Exit Sub
       End If
    End If
    End If
End Sub
Private Sub Picture1_MouseUp(Button As Integer, Shift As Integer, _
    X As Single, Y As Single)
If Button = vbLeftButton Then
   '左击
   If What(mX + 1, mY + 1) = 10 Then
      '点到雷
      Timer1.Enabled = False
      Picture1.PaintPicture Image1(13).Picture, mX, mY
      Picture1.Enabled = False
      Label3 = "哇!你点到雷了呀!重来吧!!!"
      EndGame
      Timer1 = False
      Picture1.Enabled = False
      Exit Sub
   ElseIf What(mX + 1, mY + 1) >= 1 And What(mX + 1, mY + 1) <= 9 Then
      '点到数字
      OpenFlag = OpenFlag + 1
      Picture1.PaintPicture Image1(What(mX + 1, mY + 1)).Picture, mX, mY
      What(mX + 1, mY + 1) = -What(mX + 1, mY + 1)
   ElseIf What(mX + 1, mY + 1) = 0 Then
      '点到空
      Picture1.PaintPicture Image1(0).Picture, mX, mY
      What(mX + 1, mY + 1) = 11
      OpenBlank mX + 1, mY + 1
   End If
   If MineFlag + OpenFlag = NowHeight * NowWidth Then
      Label3 = "恭喜恭喜!你过关了!"
      Timer1.Enabled = False
      Picture1.Enabled = False
   End If
ElseIf Button = vbRightButton Then
   '右击
   If What(mX + 1, mY + 1) >= 0 And What(mX + 1, mY + 1) <= 10 Then
      '未标记过的进行标记
      Save(mX + 1, mY + 1) = What(mX + 1, mY + 1)
      What(mX + 1, mY + 1) = 13
      Picture1.PaintPicture Image1(10).Picture, mX, mY
      MineFlag = MineFlag + 1
      Label1 = TotMine - MineFlag
   ElseIf What(mX + 1, mY + 1) = 13 Then
      '已经标记过则改为?
      What(mX + 1, mY + 1) = 14
      MineFlag = MineFlag - 1
      Label1 = TotMine - MineFlag
      Picture1.PaintPicture Image1(11).Picture, mX, mY
   ElseIf What(mX + 1, mY + 1) = 14 Then
      '标记过?号的则
      What(mX + 1, mY + 1) = Save(mX + 1, mY + 1)
      Picture1.PaintPicture Image1(9).Picture, mX, mY
   End If
End If
End Sub
Private Sub ClearStart(ByVal mWidth As Long, ByVal mHeight As Long, ByVal MineNumber As Long)
    '预置雷位置
    Randomize
    mTime = 0
    MineFlag = 0
    OpenFlag = 0
    '清空数组
    Erase What
    For T = 1 To MineNumber
aa:
        '任意取一个坐标(X,Y)
        X = Rnd * (mWidth - 1)
        Y = Rnd * (mHeight - 1)
        '如果已经取过该坐标则重新再取
        If What(X + 1, Y + 1) = 10 Then GoTo aa
        '将当前坐标标记为有雷
        What(X + 1, Y + 1) = 10
        Save(X + 1, Y + 1) = 10
    Next
End Sub
Private Sub WriteNumber(ByVal mWidth As Long, ByVal mHeight As Long)
    '写入信息
    Dim X As Long
    Dim Y As Long
    Dim StartX As Long
    Dim StartY As Long
    Dim EndX As Long
    Dim EndY As Long
    Dim T As Long
    Dim TT
    Dim mNumber As Long
    
    For X = 1 To mWidth
        '从当前列的上一列开始
        StartX = X - 1
        If StartX = 0 Then StartX = 1
        '在当前列的下一列结束
        EndX = X + 1
        If EndX > mWidth Then EndX = mWidth
        For Y = 1 To mHeight
            '如果当前位置不是雷则开始计算
            If What(X, Y) <> 10 Then
               '从当前行的上一行开始
               StartY = Y - 1
               If StartY = 0 Then StartY = 1
               '在当前行的下一行结束
               EndY = Y + 1
               If EndY > mHeight Then EndY = mHeight
               '累加器置0
               mNumber = 0
               '计算四周有多少颗雷
               For T = StartX To EndX
                   For TT = StartY To EndY
                       If TT = Y And T = X Then
                         '如果是当前位置则不计入
                       Else
                          '如果是雷则计入
                          If What(T, TT) = 10 Then mNumber = mNumber + 1
                       End If
                   Next
              Next
              If mNumber = 0 Then
                 '如果没有雷在其四周则打开当前位置
                 What(X, Y) = 0
                 Save(X, Y) = 0
              Else
                 '写入雷数
                 What(X, Y) = mNumber
                 Save(X, Y) = mNumber
              End If
           End If
        Next
    Next
End Sub
Private Sub Timer1_Timer()
    Dim sTime As String
    Dim mM As Long
    Dim mS As Long
    Dim sM As String
    Dim sS As String
    mTime = mTime + 1
    mM = Int(mTime / 60)
    mS = mTime - mM * 60
    sS = mS
    sM = mM
    If sM < 10 Then sM = "0" & sM
    If sS < 10 Then sS = "0" & mS
    Label2 = sM & ":" & sS
End Sub
Private Sub OpenBlank(ByVal zmX As Long, ByVal zmY As Long)
    Dim Continue As Boolean
    Dim mX As Long
    Dim mY As Long
    OpenFlag = OpenFlag + 1
    Do While True
       Continue = False
       For mY = 1 To NowHeight
           For mX = 1 To NowWidth
               If What(mX, mY) = 11 Then
                  '如果存在未判断的空
                  Continue = True
                  '把它周围的8个点打开
                  '先打开左面的点
                  If mX - 1 >= 1 Then
                     If What(mX - 1, mY) = 0 Then
                        What(mX - 1, mY) = 11
                        Picture1.PaintPicture Image1(0).Picture, mX - 2, mY - 1
                        OpenFlag = OpenFlag + 1
                     ElseIf What(mX - 1, mY) >= 1 And What(mX - 1, mY) <= 9 Then
                        Picture1.PaintPicture Image1(What(mX - 1, mY)).Picture, mX - 2, mY - 1
                        What(mX - 1, mY) = -What(mX - 1, mY)
                        OpenFlag = OpenFlag + 1
                     End If
                  End If
                  '打开左上的点
                  If mX - 1 >= 1 And mY - 1 >= 1 Then
                        If What(mX - 1, mY - 1) = 0 Then
                           What(mX - 1, mY - 1) = 11
                           Picture1.PaintPicture Image1(0).Picture, mX - 2, mY - 2
                           OpenFlag = OpenFlag + 1
                        ElseIf What(mX - 1, mY - 1) >= 1 And What(mX - 1, mY - 1) <= 9 Then
                           Picture1.PaintPicture Image1(What(mX - 1, mY - 1)).Picture, mX - 2, mY - 2
                           What(mX - 1, mY - 1) = -What(mX - 1, mY - 1)
                           OpenFlag = OpenFlag + 1
                        End If
                  End If
                  '再打开上面的点
                  If mY - 1 >= 1 Then
                     If What(mX, mY - 1) = 0 Then
                        What(mX, mY - 1) = 11
                        Picture1.PaintPicture Image1(0).Picture, mX - 1, mY - 2
                        OpenFlag = OpenFlag + 1
                     ElseIf What(mX, mY - 1) >= 1 And What(mX, mY - 1) <= 9 Then
                        Picture1.PaintPicture Image1(What(mX, mY - 1)).Picture, mX - 1, mY - 2
                        What(mX, mY - 1) = -What(mX, mY - 1)
                        OpenFlag = OpenFlag + 1
                     End If
                  End If
                  '打开右上的点
                  If mY - 1 >= 1 And mX + 1 <= NowWidth Then
                        If What(mX + 1, mY - 1) = 0 Then
                           What(mX + 1, mY - 1) = 11
                           Picture1.PaintPicture Image1(0).Picture, mX, mY - 2
                           OpenFlag = OpenFlag + 1
                        ElseIf What(mX + 1, mY - 1) >= 1 And What(mX + 1, mY - 1) <= 9 Then
                           Picture1.PaintPicture Image1(What(mX + 1, mY - 1)).Picture, mX, mY - 2
                           What(mX + 1, mY - 1) = -What(mX + 1, mY - 1)
                           OpenFlag = OpenFlag + 1
                        End If
                  End If
                  '再打开右面的点
                  If mX + 1 <= NowWidth Then
                     If What(mX + 1, mY) = 0 Then
                        What(mX + 1, mY) = 11
                        Picture1.PaintPicture Image1(0).Picture, mX, mY - 1
                        OpenFlag = OpenFlag + 1
                     ElseIf What(mX + 1, mY) >= 1 And What(mX + 1, mY) <= 9 Then
                        Picture1.PaintPicture Image1(What(mX + 1, mY)).Picture, mX, mY - 1
                        What(mX + 1, mY) = -What(mX + 1, mY)
                        OpenFlag = OpenFlag + 1
                     End If
                  End If
                  '再打开右下的点
                  If mY + 1 <= NowHeight And mX + 1 <= NowWidth Then
                        If What(mX + 1, mY + 1) = 0 Then
                           What(mX + 1, mY + 1) = 11
                           Picture1.PaintPicture Image1(0).Picture, mX, mY
                           OpenFlag = OpenFlag + 1
                        ElseIf What(mX + 1, mY + 1) >= 1 And What(mX + 1, mY + 1) <= 9 Then
                           Picture1.PaintPicture Image1(What(mX + 1, mY + 1)).Picture, mX, mY
                           What(mX + 1, mY + 1) = -What(mX + 1, mY + 1)
                           OpenFlag = OpenFlag + 1
                        End If
                  End If
                  '打开下面的点
                  If mY + 1 <= NowHeight Then
                     If What(mX, mY + 1) = 0 Then
                        What(mX, mY + 1) = 11
                        Picture1.PaintPicture Image1(0).Picture, mX - 1, mY
                        OpenFlag = OpenFlag + 1
                     ElseIf What(mX, mY + 1) >= 1 And What(mX, mY + 1) <= 9 Then
                        Picture1.PaintPicture Image1(What(mX, mY + 1)).Picture, mX - 1, mY
                        What(mX, mY + 1) = -What(mX, mY + 1)
                        OpenFlag = OpenFlag + 1
                     End If
                  End If
                  '最后打开左下的点
                  If mY + 1 <= NowHeight And mX - 1 >= 1 Then
                        If What(mX - 1, mY + 1) = 0 Then
                           What(mX - 1, mY + 1) = 11
                           Picture1.PaintPicture Image1(0).Picture, mX - 2, mY
                           OpenFlag = OpenFlag + 1
                        ElseIf What(mX - 1, mY + 1) >= 1 And What(mX - 1, mY + 1) <= 9 Then
                           Picture1.PaintPicture Image1(What(mX - 1, mY + 1)).Picture, mX - 2, mY
                           What(mX - 1, mY + 1) = -What(mX - 1, mY + 1)
                           OpenFlag = OpenFlag + 1
                        End If
                  End If
                  '四点判断完后将本点标记为已判断过
                  What(mX, mY) = 12
               End If
           Next
       Next
       If Continue = False Then Exit Do
    Loop
End Sub
Private Sub EndGame()
    Dim X As Long
    Dim Y As Long
    For Y = 1 To NowHeight
        For X = 1 To NowWidth
            If What(X, Y) = 10 Then
               Picture1.PaintPicture Image1(13).Picture, X - 1, Y - 1
            Else
               If What(X, Y) = 13 Then
                  If Save(X, Y) <> 10 Then
                     Picture1.PaintPicture Image1(12).Picture, X - 1, Y - 1
                  End If
               ElseIf What(X, Y) = 14 Then
                  If Save(X, Y) = 10 Then
                     Picture1.PaintPicture Image1(13).Picture, X - 1, Y - 1
                  End If
               End If
            End If
        Next
    Next
End Sub

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -