我无法在Visual Basic语言中找到有关此问题的任何信息,但我试图为5x5扫雷游戏生成10个且只有10个随机地雷。我的问题涉及地雷的数量。我经常只生成4个地雷,或者10多个地雷,而且它总是不一致的。这是我的代码:
Sub Minesweeper()
Dim i As Single
Dim Col As Single
Dim Row As Single
Dim BombArray(1 To 5, 1 To 5) As String
'assignment of mines
Do
Row = Application.WorksheetFunction.RandBetween(1, 5)
Col = Application.WorksheetFunction.RandBetween(1, 5)
1
If BombArray(Row, Col) <> "X" Then
BombArray(Row, Col) = "X"
Sheet1.Cells(4 + Row, 3 + Col).Value = BombArray(Row, Col)
Else
i = i + 1
GoTo 1
End If
Loop Until i = 10
End Sub
任何帮助将不胜感激。
答案 0 :(得分:1)
为循环使用标准
此外,由于您使用的是数组,因此在循环之后仅分配一次数组:
Sub Minesweeper()
Dim i As Single
Dim Col As Single
Dim Row As Single
Dim BombArray(1 To 5, 1 To 5) As String
'assignment of mines
For i = 1 To 10
Row = Application.WorksheetFunction.RandBetween(1, 5)
Col = Application.WorksheetFunction.RandBetween(1, 5)
If BombArray(Row, Col) <> "X" Then
BombArray(Row, Col) = "X"
Else
i = i - 1
End If
Next i
Sheet1.Range("D5").Resize(UBound(BombArray, 1), UBound(BombArray, 2)).Value = BombArray
End Sub
答案 1 :(得分:1)
建立一个有关地雷位置的字典,并不断添加/覆盖,直到达到10。
Option Explicit
Sub Minesweeper()
Dim mines As Object
Set mines = CreateObject("scripting.dictionary")
Do While mines.Count < 10
mines.Item(Cells(Application.RandBetween(5, 9), Application.RandBetween(4, 8)).Address(0, 0)) = vbNullString
Loop
Debug.Print Join(mines.keys, ", ")
Sheet1.Range(Join(mines.keys, ", ")) = "x"
End Sub