Domanda
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
.
Così sto cercando di fare il gioco Tetris su Excel e la mia funzione "Moveleft" non funziona correttamente, quando premerò la sinistra 2 o 3 volte molto rapidamente salta il controllo se c'è una cella con valore di 2 (cella full) epassa attraverso le cellule complete.Qualche suggerimento?
Soluzione
In primo luogo, consiglierei di sondare il codice per vedere dove salta il comando. Ad esempio, debug.print "j<3"
all'interno del tuo primo comando if
ti dirà se è qui che è uscito dal codice. Metti una linea diversa in più punti e guarda la tua finestra immediata per vedere cosa viene elaborato. Potresti voler stampare anche le tue variabili globali per assicurarti che siano ciò che è destinato.
Secondo, non utilizzare end
come il punto GOTO poiché end
è una parola chiave in VBA. L'ho cambiato in endleft
Se la velocità è un problema, i seguenti due punti potrebbero aiutare:
Terzo, poiché j
non cambia all'interno del loopse, tiralo fuori. Questo è uno meno evale che stai facendo dentro ogni ciclo.
Quarto, metti i tuoi altri due se sono insieme in uno e usano il AND
logico. Ora stai facendo un modo in meno su ogni ciclo quando la prima condizione è 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
.
Fifth, Cool Project. Lo condividerete quando è finito?