Frage

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

Ich versuche also, ein Tetris-Spiel in Excel zu erstellen, und meine „Moveleft“-Funktion funktioniert nicht richtig. Wenn ich zwei- oder dreimal sehr schnell nach links drücke, wird die Prüfung übersprungen, ob eine Zelle mit dem Wert 2 (vollständige Zelle) vorhanden ist, und die Zelle wird vollständig durchlaufen Zellen.irgendwelche Vorschläge?

War es hilfreich?

Lösung

Zuerst würde ich empfehlen, den Code zu prüfen, um zu sehen, wo Sie aus dem Befehl herausspringen.Zum Beispiel, debug.print "j<3" in deinem ersten if Der Befehl teilt Ihnen mit, ob der Code von dort aus ausgeführt wird.Fügen Sie an mehreren Stellen eine andere Zeile ein und beobachten Sie Ihr unmittelbares Fenster, um zu sehen, was verarbeitet wird.Möglicherweise möchten Sie auch Ihre globalen Variablen ausdrucken, um sicherzustellen, dass sie ihren Zwecken entsprechen.

Zweitens: Nicht verwenden end als Goto-Punkt seitdem end ist ein Schlüsselwort in VBA.Ich habe es geändert in endleft

Wenn die Geschwindigkeit ein Problem darstellt, können die folgenden zwei Punkte hilfreich sein:

Drittens, seitdem j sich innerhalb der for-Schleifen nicht ändert, ziehen Sie es nach draußen.Dies ist eine Bewertung weniger, die Sie in jeder Schleife durchführen.

Viertens: Fügen Sie Ihre beiden anderen Wenn zu einem zusammen und verwenden Sie das Logische AND.Jetzt führen Sie in jeder Schleife eine Auswertung weniger durch, wenn die erste Bedingung falsch ist.


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

Fünftens, cooles Projekt.Wirst du es teilen, wenn es fertig ist?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top