الدرس 9 من 10

حساب الضرر

هدف الدرس

درع وضربة حرجة وموت واحد

01

الشرح

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

والحظّ لا يُقرأ من math.random داخل الدالة، بل يصل معاملًا rng. في اللعبة تمرّر math.random نفسها، وفي الفحص دالة تُرجع ما تختاره، فتختبر الحرجة وغيرها بنتيجة لا تتغيّر. والحرجة تقع حين rng() < critChance، فاحتمال 0 لا يحرج أبدًا، واحتمال 1 يحرج دائمًا.

والفخّ في الموت: if target.hp <= 0 then onDeath(target) end يُطلق الموت مع كل ضربة تصيب الجثّة، فتسقط الغنيمة مرّتين ويُحسب القتل مرّتين. شغّل الكود وانظر. الموت انتقال من حيّ إلى ميّت، يُطلق مرّة واحدة. والصحّة محصورة بين 0 وmaxHp: لا تنزل تحت الصفر، ولا يرفعها العلاج فوق الحدّ.

02

المطلوب

أصلح rollDamage(attacker, target, rng) لتُرجع الضرر ومعه true أو false للحرجة: الحرجة تضاعف power قبل طرح armor، والضرر لا يقلّ عن صفر. وأصلح changeHp(target, delta, onDeath): تضيف delta (سالبًا للضرر) وتحصر الصحّة بين 0 وmaxHp، وتنادي onDeath(target) مرّة واحدة حين تنتقل الصحّة من موجبة إلى صفر.

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

6 معايير
  1. الدرع يُطرح من القوّة
  2. الحرجة تضاعف القوّة قبل الدرع
  3. احتمال 0 لا يحرج واحتمال 1 يحرج دائمًا
  4. درع أكبر من القوّة لا يعطي ضررًا سالبًا
  5. الصحّة تبقى بين 0 و maxHp
  6. الموت يُطلق مرّة واحدة فقط
main.lua
المخرجاتLua 5.4 · wasmoon

جارٍ تحميل Lua…

–/6

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

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