技術(shù) 點(diǎn)
- 技術(shù)
- 點(diǎn)
- V幣
- 點(diǎn)
- 積分
- 3347
|
看這個代碼好懂些,不過我的代碼很多冗余,水平有限!請指教!
Option Compare Database
Option Explicit
Dim ifOpen As Boolean
Dim wm As WinMine
Dim Cels(1 To 16, 1 To 30) As Boolean
Public Sub MineClassDemo()
Dim X As Long
Dim Y As Long
Dim a As Long
Dim b As Long
Dim gg As OpenCellsEnum
Dim ifok As Boolean
Dim t2 As Long
Dim times As Long
times = 0
'如果失敗,則回這里重試
start:
'重試次數(shù)
times = times + 1
Debug.Print times
ifOpen = False
a = 1
b = 1
ifok = False
For X = 1 To 16
For Y = 1 To 30
Cels(X, Y) = False
Next Y
Next X
'第一次先隨機(jī)打開30個格,因為只打開一個格很難完成
Do While Not ifok
Set wm = CreateWinMine()
'ÖØÐÂÓÎÏ·
wm.newgame
X = Fix(Rnd * 16) + 1
Y = Fix(Rnd * 30) + 1
wm.OpenCellEx X, Y
For t2 = 1 To 30 '打開30個格
If wm.ReadCell(X, Y) <> ciLose Then '
X = Fix(Rnd * 16) + 1
Y = Fix(Rnd * 30) + 1
wm.OpenCellEx X, Y
End If
If wm.ReadCell(X, Y) = ciLose Then ifok = False: t2 = 130
Next t2
If wm.ReadCell(X, Y) <> ciLose Then ifok = True: Cels(X, Y) = True '30個格成功打開后ifok=true,跳出while
Loop '如果30個格觸雷,則再嘗試
wm.DumpCellsDisplay
'ÉèÖñê¼Ç
'wm.SetTag 5, 5
'̽Ë÷À׸ñ
'wm.OpenCell 5, 5
'wm.OpenCells 5, 5
ifok = False'用于跳出循環(huán)
Do While Not ifok
ifOpen = False
For X = 1 To 16
For Y = 1 To 30
If Cels(X, Y) = False Then 'Èç¹û´Ë¸ñδ´ò¿ª
If wm.ReadCell(X, Y) = ciOneMine Then a = X: b = Y '這句其實(shí)暫時無有
If wm.ReadCell(X, Y) <> ciunknown Then '如果當(dāng)前格未打開
If TrySet(X, Y) = True Then SetXy X, Y '如果九宮內(nèi)的雷數(shù)與未打開數(shù)相同,則把所有未打開設(shè)為有雷,這是第一個計算
End If
If wm.ReadCell(X, Y) <> ciunknown Then
If CanOpen(X, Y) Then OpenAl X, Y '如果九宮內(nèi)雷數(shù)與已設(shè)置雷數(shù)相同,則打開其余的格
End If
If wm.ReadCell(X, Y) = ciWin Then
Debug.Print wm.GetWinCode '»ñȡʤÀû´úÂë
ifok = True '
Exit Sub
End If
End If
If X = 16 And Y = 30 And ifOpen = False Then '如果一個循環(huán)下來都沒有設(shè)雷或打開格,則失敗
'失敗的話在這里中斷可手動打開某格
' wm.OpenCellEx 4, 8
'wm.DumpCellsDisplay
GoTo start '失敗重試
End If
Next Y
Next X
Loop
'»ñÈ¡³¢ÊÔ´ÎÊý
'wm.GetTimes
End Sub
Private Sub SetXy(X As Long, Y As Long)
If X - 1 > 0 And Y - 1 > 0 Then If wm.ReadCell(X - 1, Y - 1) = ciunknown Then wm.SetTag X - 1, Y - 1
If Y - 1 > 0 Then If wm.ReadCell(X, Y - 1) = ciunknown Then wm.SetTag X, Y - 1
If Y - 1 > 0 And X + 1 < 17 Then If wm.ReadCell(X + 1, Y - 1) = ciunknown Then wm.SetTag X + 1, Y - 1
If X - 1 > 0 Then If wm.ReadCell(X - 1, Y) = ciunknown Then wm.SetTag X - 1, Y
If X + 1 < 17 Then If wm.ReadCell(X + 1, Y) = ciunknown Then wm.SetTag X + 1, Y
If X - 1 > 0 And Y + 1 < 31 Then If wm.ReadCell(X - 1, Y + 1) = ciunknown Then |
|