[矩阵上的枚举]大家有接触过地雷游戏吗?如图所示是一个“挖地雷”游戏的界面,9X9个格子里都有一个数字,红旗代表地雷可以用“★”表示,图中共有10个地雷,“一一”表示空白格,边上的“▲”表示边框。
定义规则:你需要标记出所有空白格子周边相邻的格子上有多少地雷(在正方向和斜45度方向挨着的格子均可视为相邻),并将数量标记在空白格中,如下图所示。
实现上述功能的VB程序如下,请在划线处填入合适的代码。
Dim n As Integer,m As Integer 'n 存储地雷区域大小,m存储地雷数目 Dim a(1 To 100 * 100) As String Dim b(1 To 100 * 100) As Integer Private Sub Command1_Click() '按要求生成数组a中的数据并显示 Randomize List1. Clear n=9 : m=10 Dim s As String, pos As Integer, i As Integer s=" " : n=n+2 For i=1 To n * n If isinside(i) Then a(i)="— —" Else a(i)="▲" Next i For i=1 To m pos=Int(Rnd * n * n)+1 Do While a(pos)="★" Or pos= Int(Rnd * n *n)+1 Loop a(pos)="★" Next i For i=1 To n* n s= s+" "+a(i) If i Mod n=0 Then List1. AddItem s s=" " End If Next i End Sub Private Sub Command2_Click() Dim i As Integer, j As Integer, row As Integer Dim col As Integer, start As Integer, temp As String For i=1 To n* n If a(i)="★" Then row=(i-1) \ n+1 : col=(i-1) Mod n+1 For j=1 To 3 start= If a(start+col- 1)="— —" Then b (start+ col- 1)= b(start+col- 1)+1 If a(start+col)="— —" Then b(start+ col)= b(start+col)+1 If a(start+col+1)= "— —" Then b (start+col+ 1)= b(start+ col+1)+1 Next j End If Next i List2. Clear For i=1 To n temp=" " For j=1 To n If a((i-1) * n+j)="— —" Then temp=temp+" "+ Str(b((i-1) * n+j)) Else temp= temp+" "+a((i- 1)*n+j) End If Next j List2. AddItem temp Next i End Sub Function isinside(x As Integer) As Boolean isinside= x>n And And x Modn<;>1AndxMod<> 0 End Function
答案:【1】Not isinside( pos)或isinside( pos)= False【2】start= (row+j-3) *n【3】x<<=(n-1)*n