문제

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에서 테트리스 게임을 만들려고 하는데 "왼쪽 이동" 기능이 올바르게 작동하지 않습니다. 왼쪽을 매우 빠르게 2~3번 누르면 값이 2(전체 셀)인 셀이 있는지 확인하는 과정을 건너뛰고 전체 과정을 진행합니다. 세포.어떤 제안이 있나요?

도움이 되었습니까?

해결책

먼저 코드를 조사하여 명령에서 벗어나는 위치를 확인하는 것이 좋습니다.예를 들어, debug.print "j<3" 너의 첫 번째 안에 if 명령은 코드가 종료되는 위치인지 알려줍니다.여러 지점에 다른 줄을 배치하고 즉각적인 창을 통해 무엇이 처리되고 있는지 확인하세요.전역 변수를 인쇄하여 의도한 대로인지 확인할 수도 있습니다.

둘째, 사용하지 마세요 end 이후로 goto 지점으로 end VBA의 키워드입니다.나는 그것을 다음과 같이 바꿨다. endleft

속도가 문제인 경우 다음 두 가지 사항이 도움이 될 수 있습니다.

셋째, 이후 j for 루프 내부에서는 변경되지 않습니다. 외부로 끌어당깁니다.이것은 모든 루프 내에서 수행하는 평가가 하나 더 적습니다.

넷째, 다른 두 개의 if를 하나로 묶고 논리를 사용하십시오. AND.이제 첫 번째 조건이 거짓일 때 모든 루프에서 하나의 평가를 덜 수행합니다.


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