質問

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

Excelでテトリスゲームを作ろうとしているのですが、「moveleft」関数が正しく動作しません。素早く左を2、3回押すと、値が2(フルセル)のセルがあるかどうかのチェックがスキップされ、フルセルが実行されます。細胞。助言がありますか?

役に立ちましたか?

解決

まず、コードを調べて、コマンドのどこから飛び出しているのかを確認することをお勧めします。例えば、 debug.print "j<3" あなたの最初の中で if コマンドは、そこからコードが終了しているかどうかを示します。複数の場所に別の行を配置し、すぐに表示されるウィンドウを見て、何が処理されているかを確認します。グローバル変数も出力して、意図したとおりであることを確認することもできます。

2番目に、使用しないでください end それ以降のgotoポイントとして end VBAのキーワードです。に変更しました endleft

速度が問題になる場合は、次の 2 つの点が役立つ可能性があります。

第三に、以来 j for ループ内では変更されないので、外側に引き出します。これにより、各ループ内で行う評価が 1 つ少なくなります。

4 番目に、他の 2 つの if を 1 つにまとめ、論理演算子を使用します。 AND. 。これで、最初の条件が false の場合、各ループで行う評価が 1 つ少なくなります。


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

5つ目は、クールなプロジェクトです。終わったらシェアしてもらえますか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top