Вопрос

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 (полная ячейка), и проходит через полные ячейки.есть какие-нибудь предложения?

Это было полезно?

Решение

Во-первых, я бы рекомендовал изучить код, чтобы увидеть, где вы выходите за рамки команды.Например, debug.print "j<3" внутри вашего первого if команда сообщит вам, является ли это местом выхода кода.Поместите разные строки в нескольких местах и наблюдайте за своим непосредственным окном, чтобы увидеть, что обрабатывается.Возможно, вы также захотите распечатать свои глобальные переменные, чтобы убедиться, что они соответствуют назначению.

Во-вторых, не используйте end как точка перехода с тех пор, как end это ключевое слово в VBA.Я изменил его на endleft

Если скорость является проблемой, то могут помочь следующие два момента:

В-третьих, поскольку j не меняется внутри циклов for, вытяните его наружу.Это на одну оценку меньше, чем вы делаете внутри каждого цикла.

В-четвертых, объедините два других "если" в одно и используйте логический AND.Теперь вы выполняете на одно вычисление меньше в каждом цикле, когда первое условие равно false.


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

Пятый, классный проект.Поделитесь ли вы им, когда закончите?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top