الدرس 2 من 10

الكيانات والمكوّنات

هدف الدرس

حلقة تحديث تحذف الموتى بأمان

01

الشرح

كل ما في عالم اللعبة كيان: لاعب، أو وحش، أو سهم، أو صخرة. وفي Lua يكون الكيان جدولًا يجمع مكوّناته: pos للموضع، وhp للصحّة، وspeed للسرعة. ولا يحمل كل كيان كل المكوّنات: الصخرة لها موضع بلا سرعة، والسهم يطير بلا صحّة. فالسلوك يتبع المكوّن الموجود، لا نوع الكيان.

وحلقة update(entities, dt) تُنادى في كل إطار، كما تُنادى love.update(dt) في LÖVE. وdt الزمن المنقضي منذ الإطار السابق بالثواني، تُضرب فيه السرعة فيتحرّك الكيان بالمعدّل نفسه على جهاز سريع وجهاز بطيء.

والفخّ في حذف الموتى: table.remove(entities, i) يزيح كل ما بعد i خانةً إلى الوراء. فإن كنت تمشي إلى الأمام قفزت الحلقة فوق الكيان الذي انزاح إلى مكان المحذوف، ونجا ميّت من الحذف. شغّل الكود وانظر إلى الذئب. والحلّ أن تمشي من الآخر، for i = #entities, 1, -1، فلا تمسّ الإزاحة إلا ما مررت به.

02

المطلوب

أصلح update(entities, dt): تزيد pos.x لكل كيان له speed بمقدار speed * dt، وتحذف من القائمة نفسها كل كيان صحّته hp صفر أو أقلّ، ويبقى الباقون بترتيبهم. والكيان بلا speed لا يتحرّك، والكيان بلا hp لا يُحذف.

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

6 معايير
  1. الكيان يتقدّم بمقدار speed * dt
  2. الكيان بلا speed يبقى مكانه
  3. الميّت يُحذف من القائمة نفسها
  4. ميّتان متجاوران لا يفلت أحدهما
  5. الباقون يحتفظون بترتيبهم
  6. الكيان بلا hp لا يُحذف
main.lua
المخرجاتLua 5.4 · wasmoon

جارٍ تحميل Lua…

–/6

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

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