Pregunta
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
así que estoy tratando de hacer un juego de tetris en Excel y mi función "moveleft" no funciona correctamente, cuando presiono hacia la izquierda 2 o 3 veces muy rápidamente, se salta la verificación si hay una celda con valor de 2 (celda completa) y pasa por completa células.¿alguna sugerencia?
Solución
Primero, recomendaría probar el código para ver dónde se sale del comando.Por ejemplo, debug.print "j<3"
dentro de tu primero if
El comando le dirá si es de ahí de donde sale el código.Coloque una línea diferente en varios lugares y observe su ventana inmediata para ver qué se está procesando.Es posible que también desee imprimir sus variables globales para asegurarse de que sean las previstas.
Segundo, no uses end
como punto de partida desde end
es una palabra clave en VBA.lo he cambiado a endleft
Si la velocidad es un problema, los siguientes dos puntos podrían ayudar:
En tercer lugar, desde j
no cambia dentro de los bucles for, sáquelo hacia afuera.Esta es una evaluación menos que realizas dentro de cada bucle.
Cuarto, junte los otros dos en uno y use la lógica AND
.Ahora estás haciendo una evaluación menos en cada ciclo cuando la primera condición es 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
Quinto proyecto genial.¿Lo compartirás cuando termines?