Question

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

donc j'essaie de créer un jeu Tetris sur Excel et ma fonction "moveleft" ne fonctionne pas correctement, lorsque j'appuie sur la gauche 2 ou 3 fois très rapidement, elle ignore la vérification s'il y a une cellule avec une valeur de 2 (cellule pleine) et passe par la pleine cellules.Aucune suggestion?

Était-ce utile?

La solution

Tout d’abord, je vous recommande de sonder le code pour voir où vous sortez de la commande.Par exemple, debug.print "j<3" à l'intérieur de ton premier if La commande vous dira si c'est de là que sort le code.Placez une ligne différente à plusieurs endroits et surveillez votre fenêtre immédiate pour voir ce qui est en cours de traitement.Vous souhaiterez peut-être également imprimer vos variables globales pour vous assurer qu'elles correspondent à ce qui est prévu.

Deuxièmement, n'utilisez pas end comme point de départ depuis end est un mot-clé dans VBA.Je l'ai changé en endleft

Si la vitesse pose problème, les deux points suivants peuvent vous aider :

Troisièmement, puisque j ne change pas à l'intérieur des boucles for, tirez-le vers l'extérieur.C'est une évaluation de moins que vous faites dans chaque boucle.

Quatrièmement, rassemblez vos deux autres si en un seul et utilisez la logique AND.Maintenant, vous faites une évaluation de moins sur chaque boucle lorsque la première condition est fausse.


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

Cinquièmement, un projet sympa.Le partagerez-vous une fois terminé ?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top