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?

¿Fue útil?

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?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top