0
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(完整单元格)的单元格并通过完整细胞。有什么建议么?

4

1 回答 1

3

首先,我建议您探查代码以查看您跳出命令的位置。例如,debug.print "j<3"在您的第一个if命令中会告诉您代码是否从那里退出。将不同的行放在多个位置,并观察您的即时窗口以查看正在处理的内容。您可能还想打印出您的全局变量,以确保它们是预期的。

其次,不要end用作 goto 点,因为end它是 VBA 中的关键字。我已将其更改为endleft

如果速度是一个问题,那么以下两点可能会有所帮助:

第三,由于j在 for 循环内没有变化,所以将其拉到外面。这是您在每个循环中所做的少评估。

第四,将你的另外两个 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

第五,酷项目。完成后会分享吗?

于 2013-11-16T00:20:36.640 回答