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?

È stato utile?

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?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top