الدرس 6 من 10

مجدول الكوروتينات

هدف الدرس

yield يوقف و resume يُكمل

01

الشرح

المشهد في اللعبة خطوات بينها انتظار: الحارس يتكلّم، وبعد ثانيتين يتكلّم مرّة أخرى، ثم يُفتح الباب. وبالمؤقّتات يتقطّع هذا إلى دوال متفرّقة وحالة تحفظ «أين وصلنا». أمّا الكوروتين فدالة تتوقّف في منتصفها بـcoroutine.yield وتُكمل لاحقًا من السطر نفسه بـcoroutine.resume، فيُكتب المشهد من أعلى إلى أسفل كما يُقرأ.

ويلزمها من يوقظها. المجدول يحفظ لكل مهمّة متى تستيقظ، ويستأنف في كل إطار ما حان وقته، ويحذف ما صارت حالته "dead" في coroutine.status. وعلى هذا تقوم Citizen.Wait في FiveM وtask.wait في Roblox.

والفخّ أن coroutine.resume لا يرمي الخطأ الذي يقع داخل الكوروتين، بل يُرجع false ومعه الرسالة. ومن يتجاهل القيمة الأولى يرى المشهد يتوقّف في منتصفه بلا أي رسالة، ولا يعرف أين يبحث.

02

المطلوب

أكمل wait(seconds) لتعطي المجدول مدّة التوقّف عبر coroutine.yield، وScheduler:spawn(fn) لتضيف إلى tasks مهمّة تبدأ مع أول update لا قبله، وScheduler:update(now) لتستأنف كل مهمّة حان وقتها وتحفظ متى تستيقظ وتحذف المنتهية. والمهمّة التي ترمي خطأً تُطبع رسالته بـprint وتُحذف، وتُكمل الباقيات.

معايير التصحيح

6 معايير
  1. المهمّة تبدأ مع أول update لا قبله
  2. wait يوقفها حتى يحين وقتها
  3. المهمّة المنتهية تُحذف
  4. مهمّتان تتقدّمان كلٌّ بوقتها
  5. خطأ مهمّة لا يوقف الأخريات
  6. الخطأ يُطبع ولا يُبتلع
main.lua
المخرجاتLua 5.4 · wasmoon

جارٍ تحميل Lua…

–/6

يبدأ الفحص حين تجهز البيئة.

6 معايير في بطاقة «المطلوب».