الدرس 4 من 10

حلقات التكرار

هدف الدرس

التكرار بـ for وwhile وrepeat والخروج بـ break

01

الشرح

الحلقة العددية for i = first, last, step do ... end تعدّ من first إلى last، ويدخل الطرفان كلاهما في العدّ، والخطوة اختيارية وقيمتها الافتراضية 1. وللعدّ التنازلي تحتاج إلى خطوة سالبة مثل for i = 3, 1, -1، فإذا نسيتها لم تدُر الحلقة ولا مرّة ولم يظهر أي خطأ، لأن 3 أكبر من 1 منذ البداية.

وحين لا تعرف عدد الدورات مسبقًا استعمل while cond do ... end، فهي تفحص شرطها قبل كل دورة، وقد لا تدخل الحلقة أبدًا. أما repeat ... until cond فتنفّذ ما بداخلها أوّلًا ثم تفحص الشرط، فتدور مرّة واحدة على الأقل، وتتوقّف حين يتحقّق شرطها لا حين يفشل.

وbreak تخرج من الحلقة فورًا، فتستعملها لتتوقّف عند أول قيمة تحقّق ما تبحث عنه. وليس في Lua كلمة continue، فإذا أردت تخطّي بقية الدورة فضع ما بعد ذلك داخل if.

02

المطلوب

ابنِ countdown بحلقة تنازلية حتى يصير "3 2 1 انطلق". ثم اصرف xp بـ while، فما دامت تكفي needed اطرح needed منها، وزِد level واحدًا وneeded مئة. وبـ repeat أسقط نصف enemies في كل موجة بالقسمة الصحيحة، وعدّ الموجات في waves حتى لا يبقى أحد. وأخيرًا اجعل firstLevel أول قيمة لـ lvl من 1 إلى 100 يتجاوز فيها 50 * lvl * lvl عشرة آلاف، وأوقف الحلقة عندها.

الفحوص

5 فحوص
  1. المتغيّر countdown يساوي «3 2 1 انطلق»
  2. بعد صرف الخبرة صار المستوى 5 وبقي 234
  3. سبع موجات حتى لا يبقى أحد
  4. الموجات مكتوبة بـ repeat ... until
  5. المتغيّر firstLevel يساوي 15، والحلقة توقّفت عنده
main.lua
المخرجاتLua 5.4 (wasmoon)

نحمّل بيئة Lua الآن.

–/5

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

تجد 5 فحوص في بطاقة «المطلوب».