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?

Foi útil?

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?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top