Pergunta
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
então eu estou tentando fazer jogo de tetris no excel e o meu "moveleft" função não funciona corretamente, quando eu pressione para a esquerda 2 ou 3 vezes, muito rapidamente, ela ignora a verificação se há uma célula com valor de 2(célula inteira) e vai até a completa células.alguma sugestão?
Solução
Primeiro, eu recomendo sondando o código para ver onde o seu saltando para fora do comando.Por exemplo, debug.print "j<3"
dentro do seu primeiro if
comando vai dizer se isso é onde o código está a sair.Colocar uma linha diferente em vários pontos e vê a janela immediate para ver o que está sendo processada.Você pode imprimir as suas variáveis globais, bem como para se certificar de que eles são o que se pretende.
Segundo, não use end
como o goto, desde que, end
é uma palavra-chave no VBA.Eu mudei para endleft
Se a velocidade é um problema, em seguida, os dois seguintes pontos podem ajudar:
Terceiro, desde j
não muda dentro de loops, puxe-o para fora.Esta é um a menos eval seu fazer dentro de cada ciclo.
Quarta, coloque seus outros dois se juntos em um só e usar a lógica AND
.Agora, o seu fazendo um a menos eval em cada ciclo quando a primeira condição é falsa.
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
A quinta, fresca projeto.Você vai compartilhá-lo quando feito?