سؤال

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

لذلك أنا في محاولة لجعل لعبة تتريس على إكسيل و بلدي" موفيليفت " وظيفة لا تعمل بشكل صحيح ، عندما اضغط اليسار 2 أو 3 مرات بسرعة كبيرة فإنه يتخطى التحقق إذا كان هناك خلية مع قيمة 2(خلية كاملة) ويذهب من خلال خلايا كاملة.أي اقتراحات?

هل كانت مفيدة؟

المحلول

أولا ، أود أن أوصي التحقيق في التعليمات البرمجية لمعرفة أين القفز الخاص من الأمر.على سبيل المثال, debug.print "j<3" داخل الخاص بك أولا if سيخبرك الأمر إذا كان هذا هو المكان الذي يخرج منه الرمز.ضع خطا مختلفا في أماكن متعددة وشاهد نافذتك المباشرة لمعرفة ما تتم معالجته.قد ترغب في طباعة المتغيرات العالمية الخاصة بك أيضا للتأكد من أنها ما هو المقصود.

ثانيا ، لا تستخدم end كنقطة الانتقال منذ ذلك الحين end هي كلمة رئيسية في فبا.لقد غيرت ذلك إلى endleft

إذا كانت السرعة مشكلة ، فقد تساعد النقطتان التاليتان:

ثالثا ، منذ j لا يتغير داخل الحلقات ، اسحبه للخارج.هذا هو واحد أقل تقييم القيام به داخل كل حلقة.

رابعا ، ضع الاثنين الآخرين إذا كانا معا في واحد واستخدم المنطقي AND.الآن تقوم بإجراء تقييم أقل في كل حلقة عندما يكون الشرط الأول خاطئا.


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

خامسا ، مشروع رائع.سوف تشاركه عند الانتهاء?

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top