문제
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
다섯째, 멋진 프로젝트입니다.완성되면 공유해주실거죠?
제휴하지 않습니다 StackOverflow