读书人

小弟我写的vb用command控件实现的扫雷

发布时间: 2012-01-22 22:38:43 作者: rapoo

我写的vb用command控件实现的扫雷,为什么最后一行会报错说越界?请各位高手给看看~

VB code
Private Sub Command1_MouseDown(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single) Dim count2 As Integer Dim temp  RowNum = Index / Row ColNum = Index Mod Col If Button = vbLeftButton Then                                                               '左击事件  For count2 = 0 To CmdNum    If Command1(Index).Tag = "1" Then                                                       '触雷行为       temp = MsgBox("you are lost", vbOKOnly, "Game Over") = vbOK       If temp = vbOKOnly Then           Form1.Hide           Form2.Show        End If    End                                  Else:                    '计算周围有几个雷,并显示出来     If Command1(Index).Caption <> "雷" Then       '只有不是标记为雷,才可以左击出数字       If Index = ClickNum(0, 0) Then                   '左上角       '   Command1(Index).Caption = Str$(Val(MineArea(ClickNum(RowNum + 1, ColNum))) _                                       + Val(MineArea(ClickNum(RowNum, ColNum + 1))) _                                       + Val(MineArea(ClickNum(RowNum + 1, ColNum + 1))) _                                       )        Command1(Index).Caption = Str$(Val(Command1(ClickNum(RowNum + 1, ColNum)).Tag) _                                       + Val(Command1(ClickNum(RowNum, ColNum + 1)).Tag) _                                       + Val(Command1(ClickNum(RowNum + 1, ColNum + 1)).Tag) _                                       )       End If       If (Index = ClickNum(0, ColNum)) And (Index <> ClickNum(0, 0)) And (Index <> ClickNum(0, Col - 1)) Then '左侧非角区域 '        Command1(Index).Caption = Str$(Val(MineArea(ClickNum(RowNum + 1, ColNum))) _                                    + Val(MineArea(ClickNum(RowNum + 1, ColNum - 1))) _                                    + Val(MineArea(ClickNum(RowNum + 1, ColNum + 1))) _                                    + Val(MineArea(ClickNum(RowNum, ColNum + 1))) _                                    + Val(MineArea(ClickNum(RowNum, ColNum - 1))) _                                    )          Command1(Index).Caption = Str$(Val(Command1(ClickNum(RowNum + 1, ColNum)).Tag) _                                    + Val(Command1(ClickNum(RowNum + 1, ColNum - 1)).Tag) _                                    + Val(Command1(ClickNum(RowNum + 1, ColNum + 1)).Tag) _                                    + Val(Command1(ClickNum(RowNum, ColNum + 1)).Tag) _                                    + Val(Command1(ClickNum(RowNum, ColNum - 1)).Tag) _                                    )       End If           If (Index = ClickNum(RowNum, 0)) And (Index <> ClickNum(0, 0)) And (Index <> ClickNum(Row - 1, 0)) Then '上侧非角区域 '       Command1(Index).Caption = Str$(Val(MineArea(ClickNum(RowNum + 1, ColNum))) _                                    + Val(MineArea(ClickNum(RowNum + 1, ColNum + 1))) _                                    + Val(MineArea(ClickNum(RowNum, ColNum + 1))) _                                    + Val(MineArea(ClickNum(RowNum - 1, ColNum + 1))) _                                    + Val(MineArea(ClickNum(RowNum - 1, ColNum))) _                                    )              Command1(Index).Caption = Str$(Val(Command1(ClickNum(RowNum + 1, ColNum)).Tag) _                                    + Val(Command1(ClickNum(RowNum + 1, ColNum + 1)).Tag) _                                    + Val(Command1(ClickNum(RowNum, ColNum + 1)).Tag) _                                    + Val(Command1(ClickNum(RowNum - 1, ColNum + 1)).Tag) _                                    + Val(Command1(ClickNum(RowNum - 1, ColNum)).Tag) _                                    )        End If            If Index = ClickNum(0, Col - 1) Then                                                             '右上角 '         Command1(Index).Caption = Str$(Val(MineArea(ClickNum(RowNum + 1, ColNum))) _                                       + Val(MineArea(ClickNum(RowNum, ColNum - 1))) _                                       + Val(MineArea(ClickNum(RowNum + 1, ColNum - 1))) _                                       )           Command1(Index).Caption = Str$(Val(Command1(ClickNum(RowNum + 1, ColNum)).Tag) _                                       + Val(Command1(ClickNum(RowNum, ColNum - 1)).Tag) _                                       + Val(Command1(ClickNum(RowNum + 1, ColNum - 1)).Tag) _                                       )        End If            If Index = ClickNum(RowNum, Col - 1) And Index <> ClickNum(0, Col - 1) And Index <> ClickNum(Row - 1, Col - 1) Then '右侧非角区域'        Command1(Index).Caption = Str$(Val(MineArea(ClickNum(RowNum + 1, ColNum - 1))) _                                    + Val(MineArea(ClickNum(RowNum, ColNum - 1))) _                                    + Val(MineArea(ClickNum(RowNum - 1, ColNum - 1))) _                                    + Val(MineArea(ClickNum(RowNum - 1, ColNum))) _                                    + Val(MineArea(ClickNum(RowNum + 1, ColNum))) _                                    )                Command1(Index).Caption = Str$(Val(Command1(ClickNum(RowNum + 1, ColNum - 1)).Tag) _                                    + Val(Command1(ClickNum(RowNum, ColNum - 1)).Tag) _                                    + Val(Command1(ClickNum(RowNum - 1, ColNum - 1)).Tag) _                                    + Val(Command1(ClickNum(RowNum - 1, ColNum)).Tag) _                                    + Val(Command1(ClickNum(RowNum + 1, ColNum)).Tag) _                                    )        End If               If Index = 99 Then        Print RowNum; ColNum; ClickNum(Row - 1, Col - 1)         RowNum = RowNum - 1                  Command1(Index).Caption = Str$(Val(Command1(ClickNum(RowNum - 1, ColNum)).Tag) _                                       + Val(Command1(ClickNum(RowNum, ColNum - 1)).Tag) _                                       + Val(Command1(ClickNum(RowNum - 1, ColNum - 1)).Tag) _                                       )        End If             If (Index = ClickNum(Row - 1, ColNum)) And (Index <> ClickNum(Row - 1, 0)) And (Index <> ClickNum(Row - 1, Col - 1)) Then '下侧非角区域        RowNum = RowNum - 1                 Command1(Index).Caption = Str$(Val(Command1(ClickNum(RowNum - 1, ColNum - 1)).Tag) _                                    + Val(Command1(ClickNum(RowNum + 1, ColNum)).Tag) _                                    + Val(Command1(ClickNum(RowNum - 1, ColNum)).Tag) _                                    + Val(Command1(ClickNum(RowNum - 1, ColNum + 1)).Tag) _                                    + Val(Command1(ClickNum(RowNum - 1, ColNum)).Tag) _                                    )        End If            If Index = ClickNum(Row - 1, 0) Then                                                     '左下角           Command1(Index).Caption = Str$(Val(Command1(ClickNum(RowNum - 1, ColNum)).Tag) _                                       + Val(Command1(ClickNum(RowNum, ColNum + 1)).Tag) _                                       + Val(Command1(ClickNum(RowNum - 1, ColNum + 1)).Tag) _                                       )        End If                If (RowNum <> 0) And (RowNum <> Row - 1) And (ColNum <> 0) And (ColNum <> Col - 1) Then   '非边缘区域                       Command1(Index).Caption = Str$(Val(Command1(ClickNum(RowNum - 1, ColNum)).Tag) _                                    + Val(Command1(ClickNum(RowNum + 1, ColNum)).Tag) _                                    + Val(Command1(ClickNum(RowNum - 1, ColNum - 1)).Tag) _                                    + Val(Command1(ClickNum(RowNum + 1, ColNum - 1)).Tag) _                                    + Val(Command1(ClickNum(RowNum - 1, ColNum + 1)).Tag) _                                    + Val(Command1(ClickNum(RowNum + 1, ColNum + 1)).Tag) _                                    + Val(Command1(ClickNum(RowNum, ColNum + 1)).Tag) _                                    + Val(Command1(ClickNum(RowNum, ColNum - 1)).Tag) _                                   )         End If                                           End If      End If    Next count2  End If      If Button = vbRightButton Then                                                             '右击事件:标记为雷、?、没有标记,标记为雷则不可左击      If Command1(Index).Caption = "" Then            Command1(Index).Caption = "雷"            FlagMine = FlagMine + 1            Label2.Caption = Str$(MineNum - FlagMine)              Else:                 If Command1(Index).Caption = "雷" Then               Command1(Index).Caption = "?"               FlagMine = FlagMine - 1               Label2.Caption = Str$(MineNum - FlagMine)                  Else:                If Command1(Index).Caption = "?" Then                Command1(Index).Caption = ""                Label2.Caption = Str$(MineNum - FlagMine)           End If      End If    End If   End If            End SubPrivate Sub Form_Load() Form1.Timer1.Enabled = False Form1.Label2.Caption = Str$(MineNum) FlagMine = 0 Timer1.Interval = 1000  Dim count As Integer For count = 0 To 99                 '按钮清零    Form1.Command1(count).Caption = ""  '清除所有雷    Form1.Command1(count).Enabled = False '等待计时开始时开始能用    MineArea(count) = False Next count  Mine_begin End Sub 



[解决办法]
地球人都知道。
所以你怎么才能不用 RowNum + 1
[解决办法]
记了,还有一张图片要贴给你看一下。

注意作标记的地方,是有错误的:

读书人网 >VB

热点推荐