Sub left()
Dim m As Integer
Dim n As Integer
For m = 0 To 3
For n = 0 To 3
If j < 3 Then
GoTo end
End If
If board(m + i - 1, n + j) = 1 Then
If board(i + m - 1, j + n - 1) = 2 Then
GoTo end
End If
End If
Next n
Next m
j = j - 1
end:
End Sub
所以即时尝试在excel上制作俄罗斯方块游戏并且我的“moveleft”功能无法正常工作,当我快速按下2或3次时它会跳过检查,如果有一个值为2的单元格(完整单元格)经历完整的细胞。有什么建议吗?
答案 0 :(得分:3)
首先,我建议探测代码,看看你跳出命令的位置。例如,第一个debug.print "j<3"
命令中的if
将告诉您代码是否从中退出。在多个位置放置不同的行,并观察您的即时窗口以查看正在处理的内容。您可能还希望打印出全局变量,以确保它们符合预期目的。
其次,不要使用end
作为转到点,因为end
是VBA中的关键字。我已将其更改为endleft
如果速度有问题,那么以下两点可能有所帮助:
第三,由于j
在for循环内没有改变,所以把它拉到外面。这是你在每个循环中做的一个较少的eval。
第四,将你的另外两个if组合成一个并使用逻辑AND
。现在,当第一个条件为假时,你在每个循环上做一个较少的eval。
Sub left()
Dim m As Integer
Dim n As Integer
If Not (j < 3) Then
For m = 0 To 3
For n = 0 To 3
If ((board(m + i - 1, n + j) = 1) And (board(i + m - 1, j + n - 1) = 2)) Then
GoTo endleft
End If
Next n
Next m
j = j - 1
End If
endleft:
End Sub
第五,酷项目。完成后你会分享吗?