سؤال
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
خامسا ، مشروع رائع.سوف تشاركه عند الانتهاء?