الدرس 6 من 10
مولّد الأعداء
- 14 دقيقة
- 6 معايير للتصحيح
- 3 تلميحات
- إلى المطلوب
هدف الدرس
مجمّع زمن، وسقف للعدد
الشرح
الأعداء في أغلب الألعاب يأتون من مؤقّت: كل interval ثانية عدوّ جديد. والطريقة الساذجة — if (timer >= interval) { spawn(); timer = 0; } — تربط الإيقاع بسرعة الجهاز دون أن يظهر ذلك.
فالتصفير يرمي ما زاد على الفترة، وهو يختلف من إطار لآخر، فيتباطأ المعدّل كلما طالت الإطارات. والصحيح مجمّع زمن: أضف dt، ثم اطرح interval — لا تصفّر — ما دام timer >= interval. وwhile لا if: إطار طويل بعد العودة إلى تبويب مخفي قد يحمل ثلاث فترات، فيولد ثلاثة أعداء.
ولا بد من سقف: max عدوّ في آن واحد. والزمن الذي يمرّ والعدد ممتلئ يُستهلك ولا يُدّخر، وإلا انفجر المولّد بدفعة أعداء لحظة يخلو مكان.
المطلوب
اكتب updateSpawner(spawner, enemies, dt, rng) لمولّد { timer, interval, max }: كل عدوّ جديد تصنعه makeEnemy(rng) الجاهزة بالـ rng الممرَّرة، ويُضاف إلى enemies.
معايير التصحيح
6 معايير- عدوّ عند اكتمال الفترة لا قبلها
- الزمن الزائد لا يضيع
- إطار طويل يولّد كل ما فات
- لا يتجاوز max
- الامتلاء لا يدّخر أعداء لما بعده
- العدوّ من makeEnemy بالـ rng الممرَّرة