سؤال تدريب 6: شغّل المقطع البرمجي وصف وظيفته. player = game.create_sprite(0, 0) for i in range(5): for j in range(5): player.set(LedSpriteProperty.Y, i) player.set(LedSpriteProperty.X, j) basic.pause(400)
الإجابة: س6: ينشئ كائناً (Sprite) عند الإحداثيات (0,0)، ثم يحركه على شبكة مصابيح Micro:bit عبر جميع الإحداثيات من (0,0) إلى (4,4)؛ حيث ينتقل في كل صف من اليسار إلى اليمين (X من 0 إلى 4)، ثم ينزل للصف التالي (Y يزيد من 0 إلى 4)، مع توقف مقداره 400 ملي ثانية بين كل حركة.
خطوات الحل:
- **الشرح:** لنفهم هذا المقطع البرمجي. نبدأ بقراءة السطر الأول: `player = game.create_sprite(0, 0)`. هذا السطر ينشئ كائنًا (Sprite) جديدًا في اللعبة ويضعه في موضع البداية على الإحداثيات (0,0) على شاشة Micro:bit. ثم نرى حلقتين `for` متداخلتين. الحلقة الخارجية `for i in range(5):` تعني أن المتغير `i` سيأخذ القيم من 0 إلى 4 (خمس مرات). الحلقة الداخلية `for j in range(5):` تعني أن المتغير `j` سيأخذ القيم من 0 إلى 4 أيضًا. داخل الحلقات، نجد أمرين: 1. `player.set(LedSpriteProperty.Y, i)` يغير الإحداثي الرأسي (Y) للكائن ليكون مساويًا لقيمة `i`. 2. `player.set(LedSpriteProperty.X, j)` يغير الإحداثي الأفقي (X) للكائن ليكون مساويًا لقيمة `j`. بعد كل تغيير للإحداثيات، يأتي الأمر `basic.pause(400)` الذي يجعل البرنامج ينتظر 400 مللي ثانية (أو 0.4 ثانية) قبل الانتقال للخطوة التالية. إذن، طريقة عمل البرنامج هي: يبدأ الكائن عند (0,0). ثم يتحرك أولاً عبر جميع الأعمدة في الصف الأول (حيث Y=0 و X من 0 إلى 4). بعد انتهاء الصف الأول، تزيد قيمة `i` إلى 1، فينتقل الكائن للصف الثاني (Y=1) ويتحرك عبر جميع أعمدة ذلك الصف (X من 0 إلى 4 مرة أخرى). يستمر هذا النمط حتى يغطي جميع الإحداثيات من (0,0) إلى (4,4). لذلك، وظيفة هذا المقطع البرمجي هي: **ينشئ كائنًا عند الإحداثيات (0,0)، ثم يحركه عبر جميع نقاط شبكة مصابيح Micro:bit من (0,0) إلى (4,4)؛ حيث ينتقل في كل صف من اليسار إلى اليمين (X من 0 إلى 4)، ثم ينزل للصف التالي (Y يزيد من 0 إلى 4)، مع توقف مقداره 400 ملي ثانية بين كل حركة.**