Skip to main content

الدرس 2: بناء المشروع واختباره

الاستمرار في بناء المشروع 

  • الآن يجب تعيين شرط العبارة if else . لاستخدام مستشعر المسافة لاكتشاف القلاع، يمكن استخدام الأمر found_object . أضف الأمر found_object إلى الشرط. يجب أن يبدو مشروعك الآن كما يلي:

    def main ():
    	# هل يكتشف مستشعر المسافة قلعة ؟
    	
    	if front_distance.found_object():
    		# تحطم القلعة المكتشفة بواسطة
    		ممر مستشعر المسافة
    		
    	آخر:
    		# استدر للعثور على قلعة باستخدام
    		ممر مستشعر المسافة
  • إذا عثر مستشعر المسافة على شيء ما، فيجب أن يتحرك روبوت الواقع الافتراضي للأمام لضرب القلعة. أضف الأمر drive إلى فرع "if" من العبارة if else ، واضبط المعلمة لتحريك روبوت الواقع الافتراضي إلى الأمام. (يجب أن يحل هذا الأمر محل "النجاح"). 

    def main ():
    	# هل يكتشف مستشعر المسافة قلعة ؟
    	
    	if front_distance.found_object ():
    		# تحطم القلعة المكتشفة بواسطة مجموعة نقل الحركة لمستشعر
    		المسافة 		(للأمام)
    		
    	else:
    		# انعطف للعثور على قلعة باستخدام
    		ممر مستشعر المسافة
  • عندما يبلغ الأمر found_object عن False، سيتم تشغيل فرع "else"،  سيحتاج روبوت الواقع الافتراضي إلى الدوران للعثور على قلعة في ساحة اللعب. أضف الأمر turn داخل فرع "else" ، واضبط المعلمات لتحويل روبوت الواقع الافتراضي إلى اليمين. 

    def main ():
    	# هل يكتشف مستشعر المسافة قلعة ؟
    	
    	إذا كانتfront_distance.found_object ():
    		# تحطم القلعة المكتشفة بواسطة مجموعة نقل الحركة لمستشعر
    		المسافة 		(للأمام)
    		
    	آخر:
    		# انعطف للعثور على قلعة باستخدام مجموعة نقل الحركة لمستشعر
    		المسافة 		(لليمين)

لمعلوماتك

يعمل فرع "آخر" من عبارة if else فقط في مشروع كجزء من عبارة if else. بينما يمكنك الحصول على عبارة  if قائمة بذاتها، لا توجد عبارة "else" في VEXcode VR Python. يتم تشغيل الفرع "آخر" عندما لا يتم استيفاء شرط الفرع "إذا". بدون شرط محدد (فرع "if ")، لن يتم تشغيل فرع" else "أبدًا. ثلاثة مقتطفات من التعليمات البرمجية توضح العبارات الشرطية في بايثون، ويضم كل منها عبارة if مع شرط متبوعًا بكلمة المرور الرئيسية. تحتوي أول قصاصتين على علامات اختيار خضراء فوقهما، مما يشير إلى الاستخدام الصحيح. يتضمن المقتطف الأول عبارة if فقط، بينما يتضمن الثاني عبارة if وعبارة else مع كلمة المرور الرئيسية في كل منهما. يتكون المقتطف الثالث، المميز بصليب أحمر، من عبارة أخرى فقط مع تمرير، مما يشير إلى الاستخدام غير الصحيح، حيث يجب أن تتبع عبارة أخرى عبارة if.

إضافة حلقة واختبار المشروع

  • قبل اختبار المشروع، يجب إضافة أمر آخر. إذا كانت العبارات الأخرى ستتحقق من الشرط مرة واحدة فقط قبل الانتقال إلى الأمر التالي خارج العبارة. في الوحدة 7، تمت إضافة حلقة لا نهائية بينما إلى المشروع لتوجيه روبوت الواقع الافتراضي للتحقق بشكل متكرر من حالة مستشعر العين السفلية. لتتأكد من فحص حالة مستشعر المسافة بشكل متكرر ، اسحب أو اكتب حلقة لا نهائية while ، ثم انسخ العبارة if else داخل الحلقة اللانهائية while. يجب أن يبدو مشروعك الآن كما يلي:
    • تذكر أن تضع في اعتبارك المسافة البادئة عند نسخ الأوامر ولصقها في حلقة، بحيث يعمل المشروع على النحو المنشود عند تشغيله. 

      def main ():
      
      	while True:
      		# هل يكتشف مستشعر المسافة قلعة ؟
      	
      		إذا front_distance.found_object ():
      			# تحطم القلعة التي تم اكتشافها بواسطة مجموعة نقل الحركة لمستشعر
      			المسافة 			(للأمام)
      		
      		آخر:
      			# استدر للعثور على قلعة باستخدام مجموعة نقل الحركة لمستشعر المسافة.
      			استدر (لليمين)
      		
      		انتظر(5، مللي ثانية)
  • افتح نافذة الملعب إذا لم تكن مفتوحة بالفعل. تأكد من فتح Dynamic Castle Crasher Playground ، ثم قم بتشغيل المشروع. منظر من أعلى إلى أسفل لملعب Dynamic Castle Crasher يظهر أن بعض القلاع فقط قد تم إسقاطها. يوجد روبوت الواقع الافتراضي في أعلى يمين الملعب بعد حركته حول الملعب.
  • بمجرد أن يطرق روبوت الواقع الافتراضي قلعتين على الأقل، أعد تحميل الملعب وقم بتشغيل المشروع على تخطيط آخر لملعب كسارة القلعة الديناميكية. منظر من أعلى إلى أسفل لكسارة القلعة الديناميكية مع واجهة الملعب. يتم تمييز زر إعادة الضبط في الجزء السفلي الأيسر من واجهة الملعب بصندوق أحمر.
  • في كل جولة من المشروع، سوف يدور روبوت الواقع الافتراضي حتى يتم الكشف عن قلعة بواسطة مستشعر المسافة، ثم يتجه نحو ذلك المبنى لإسقاطه.منظر بزاوية لملعب Dynamic Castle Crasher يظهر روبوت الواقع الافتراضي وهو يدفع قطعة من القلعة فوق خط الحدود الأحمر وخارج حافة الملعب.
  • أثناء تشغيل المشروع، قد يدفع روبوت الواقع الافتراضي قطعة قلعة على طول الطريق إلى الحافة ويسقط من الملعب. يرجع ذلك إلى أن الأمر found_object لا يزال يبلغ عن وجود كائن أمام روبوت الواقع الافتراضي. عندما يقدم هذا الأمر تقريرًا صحيحًا، يتحرك روبوت الواقع الافتراضي إلى الأمام، مما يؤدي إلى سقوط روبوت الواقع الافتراضي من الملعب.

تدفق المشروع مع عبارة if else

يتم استخدام عبارة if else حتى يتمكن روبوت الواقع الافتراضي من اتخاذ قرار. إذا كان الشرط المنطقي صحيحًا، فسيتم تشغيل الأوامر داخل فرع "if". إذا كان الشرط المنطقي هو False، فسيتم تشغيل الأوامر داخل الفرع "else".

على سبيل المثال، في هذا التكرار من Dynamic Castle Crasher Playground، عندما يبدأ المشروع، يكتشف مستشعر المسافة كائنًا - حالة الأمر found_object  عن True. الآن سيتم تشغيل فرع "if" من المشروع، وسيتحرك روبوت الواقع الافتراضي للأمام. سيتخطى روبوت الواقع الافتراضي فرع "else" من المشروع.يوجد على اليسار مقتطف التعليمات البرمجية الحالي للمشروع. على اليمين يوجد المنظر من أعلى إلى أسفل لملعب Dynamic Castle Crasher مع واجهة الملعب مرئية. يقرأ قياس مستشعر المسافة على واجهة الملعب 568 مم ويتم تمييزه بصندوق أحمر. وهذا يدل على أن القلعة في منتصف الملعب تبعد 568 ملم عن روبوت الواقع الافتراضي.

  • لاحظ أنه يتم أيضًا الإبلاغ عن بيانات مستشعر المسافة في لوحة المعلومات. عند اكتشاف كائن، سيتم عرض قيمة المسافة.

ومع ذلك، في هذا التكرار من ملعب Dynamic Castle Crasher، عندما يتم بدء المشروع، لا يكتشف مستشعر المسافة أي كائن - حالة الأمر found_object تبلغ False. الآن سيتخطى روبوت الواقع الافتراضي فرع "if" من المشروع، وسيتم تشغيل فرع "else" من المشروع، لذلك سوف يستدير روبوت الواقع الافتراضي إلى اليمين.يوجد على اليسار مقتطف التعليمات البرمجية الحالي للمشروع. على اليمين يوجد المنظر من أعلى إلى أسفل لملعب Dynamic Castle Crasher مع واجهة الملعب مرئية. يقرأ قياس مستشعر المسافة على واجهة الملعب 1354 مم ويتم تمييزه بصندوق أحمر. وهذا يدل على أن القلعة في الجزء العلوي من الملعب تبعد 1354 ملم عن روبوت الواقع الافتراضي.

  • لاحظ أنه تم الإبلاغ عن قيمة مستشعر المسافة في لوحة المعلومات على أنها  > 3000 مم. يمكن لمستشعر المسافة اكتشاف الأجسام ضمن نطاق 3000 ملليمتر (مم)، لذلك عندما لا يتم اكتشاف جسم ما، يتم الإبلاغ عن القيمة على أنها أكبر من>() 3000 مم. 

Because the if else statement is inside of an infinite while loop, the project loops back to the top of the infinite while loop to check the condition of the if else statement repeatedly. ستستمر هذه الحلقة إلى الأبد، مما يأمر روبوت الواقع الافتراضي بالتحقق بشكل مستمر من الشرط if else مئات المرات في الثانية.This is the project's code snippet surrounded by an orange arrow that begins and ends on the while True: statement at the top of the code snippet. There is a note on the arrow that says Loops continuously, showing that anything nested in the while True loop will repeat forever.

  • لاحظ أن الأوامر drive و turn الموجودة داخل العبارة if else  هي أوامر غير انتظار. الأوامر غير المنتظرة لا توقف تدفق المشروع أثناء تشغيله. سيستمر السلوك  غير المنتظر الذي يتم تنفيذه في عبارة if else (مثل "القيادة للأمام إذا تم اكتشاف كائن ") أثناء التحقق من الحالة، ولن يتغير إلا عندما تتغير الحالة.

لمعلوماتك

يتم استخدام العبارة if else للتأكد من تشغيل فرع واحد فقط في المشروع عند التحقق من الشرط. يمكن أن تكون حالة أو شرط واحد فقط صحيحًا في أي وقت. وهذا يجعل المشروع أكثر كفاءة.

رمز مشروع بايثون مع الأسهم التي تشير إلى عبارات if و else. يقرأ الجزء العلوي من الأسهم التحقق من حالة مستشعر المسافة لإظهار المسافة. تم العثور على الكائن إذا تحقق البيان من الحالة. إذا تم اكتشاف الكائن، فسيتم تنفيذ الأمر الموجود تحت عبارة if، ولكن إذا لم يتم اكتشاف كائن، فسيتم تنفيذ الأمر الموجود تحت عبارة else.

قارن المشروع الحالي بالمشروع الذي تم إنشاؤه في الوحدة 7.  يستخدم مشروع الوحدة 7 أربع عبارات if

رمز المشروع من الوحدة 7 بسهم برتقالي كبير يحيط بالرمز بأكمله، يبدأ وينتهي عند عبارة while True. ملاحظة على السهم البرتقالي تقول إذا تم التحقق بشكل متكرر من العبارات الواردة في الحلقة اللانهائية أثناء التكرار. تُظهر الأسهم الخضراء داخل عبارة while True تدفق المشروع، بدءًا من عبارات if الفردية حول ما إذا كان هناك لون معين والسلوك الذي يجب القيام به وفقًا لذلك، سواء كان ذلك للقيام بسلوك أو الانتقال إلى عبارة if التالية حتى النهاية حيث يدور كل شيء مرة أخرى.

عند تشغيل مشروع يحتوي على عدة عبارات if، من الممكن أن تقوم عدة شروط بالإبلاغ عن True (أو False) أثناء تشغيل المشروع للأوامر في حلقة while اللانهائية. قد تتسبب مثل هذه التعارضات في توقف تشغيل المشروع أو تشغيله بشكل أبطأ. 

بعبارة أخرى، فإن وجود عدة عبارات و في مشروع ما يشبه السفر على طريق به عدة مخارج. اعتمادًا على المكان الذي تحاول الذهاب إليه، ستلتفت إلى أماكن مختلفة. على سبيل المثال، إذا كنت ستذهب إلى المدرسة، فستنعطف يسارًا ؛ إذا كنت ستذهب إلى المتجر، فستنعطف يمينًا. ولكن ماذا لو لم تكن ذاهباً إلى المدرسة أو المتجر ؟ سيبلغ كلا الشرطين عن خطأ، وستظل على الطريق المستقيم. أو ماذا لو كنت ستذهب إلى كل من المدرسة والمتجر ؟ سيتم الإبلاغ عن كلا الشرطين بصحيح، ولكن لا يمكنك الدوران في موقعين في نفس الوقت. رسم تخطيطي يوضح تقاطعًا رماديًا على شكل حرف T مع ثلاثة أسهم اتجاهية - أحدها يشير إلى اليسار والآخر يشير إلى الأعلى والآخر يشير إلى اليمين. في وسط التقاطع يوجد روبوت الواقع الافتراضي. يوجد على يمين الرسم البياني عبارتان مشروطتان بتنسيق الكود: إذا كنت ستذهب إلى المدرسة: انعطف يسارًا وإذا كنت ستخزن: انعطف يمينًا. تتم كتابة عبارات if باللونين الأسود والأزرق، مع إذا كانت باللون الأزرق وتعليمات الاتجاه باللون الأزرق.

 

لمتابعة القياس، فإن عبارة if else تشبه السفر إلى مفترق طرق – فهي تجبرك على اتخاذ قرار. إذا كنت ستذهب إلى المدرسة، انعطف يسارًا ؛ وإلا، انعطف يمينًا. بغض النظر عن المكان الذي ستذهب إليه، يمكنك إما الانعطاف يسارًا أو يمينًا. سيؤدي استخدام عبارة if else إلى تجنب الأخطاء مثل تلك المذكورة أعلاه، لأنها ستجبرك على اتخاذ قرار، حيث يمكن أن يكون شرط واحد فقط صحيحًا في لحظة معينة.A diagram showing a gray Y-shaped intersection with two directional paths - one leading left and one leading right. In the center of the intersection is the VR Robot. Above the diagram is code showing conditional statements in code format: if going to school: Turn left and else: Turn right. The if and else statements are written in black and blue text, with if and else in blue and the directional instructions in lighter blue.  

الأسئلة

يرجى تحديد رابط أدناه للوصول إلى اختبار الدرس.

Google Doc / .docx / .pdf