小弟我写的vb用command控件实现的扫雷,为什么最后一行会报错说越界?请给看看
我写的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 Sub Private 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