الدرس 7 من 10
صنف من جدول
- 14 دقيقة
- 6 معايير للتصحيح
- 3 تلميحات
- إلى المطلوب
هدف الدرس
الطرق و self والنقطتان
الشرح
لا class في Lua؛ الصنف جدول يحمل الطرق. وPlayer.__index = Player يجعله يصلح جدولًا وصفيًّا لكائناته: كل لاعب جدول فيه بياناته وحدها، وما لا يجده فيه، أي الطرق، يبحث عنه في Player. وPlayer.new تصنع الجدول وتربطه بالصنف: setmetatable({}, Player).
والنقطتان : اختصار لمعامل خفيّ اسمه self. function Player:heal(amount) تعني function Player.heal(self, amount)، وhero:heal(10) تعني hero.heal(hero, 10). فالطريقة الواحدة تخدم كل اللاعبين، وتعرف بـ self أيّهم نادها.
والفخّ الأشهر: hero.takeDamage(30) بنقطة واحدة. لا يُمرَّر hero، فيصير self هو 30 وamount هو nil، ويظهر الخطأ attempt to index a number value (local 'self') داخل الطريقة، بعيدًا عن السطر المخطئ.
المطلوب
اكتب Player.new(name, hp) يحفظ name وhp وmaxHp مساويًا لـ hp، والطريقتين heal(amount) التي لا تتجاوز maxHp وisAlive() التي تُرجع true أو false، ثم أصلح استدعاء takeDamage في المثال.
معايير التصحيح
6 معايير- Player.new تصنع لاعبًا بقيمه
- لكل لاعب hp خاصّ به
- طرق الصنف يراها كل لاعب
- heal تزيد ولا تتجاوز maxHp
- isAlive تعرف الحيّ من الميّت
- المثال يعمل ويطبع اللاعب