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?
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é ?