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?
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?