الدرس 8 من 10
الأصناف والخصائص
- 14 دقيقة
- 6 معايير للتصحيح
- 3 تلميحات
- إلى المطلوب
هدف الدرس
مُنشئ و private set وتغليف
الشرح
الصنف قالب، والكائن نسخة منه لها بياناتها: var hero = new Player("ليان", 100);. وnew تستدعي المُنشئ: دالة باسم الصنف نفسه بلا نوع إرجاع، تجهّز الكائن الجديد. وأعضاء الصنف خاصّة (private) ما لم تقل غير ذلك، فكل ما يُستعمل من خارجه يُعلَن public.
والحقل العامّ public int Hp; يسمح لأي كود أن يكتب hero.Hp = 9999. أما الخاصيّة public int Hp { get; private set; } فتُقرأ من كل مكان ولا تُكتب إلا من داخل الصنف، فتمرّ كل التغييرات عبر دواله، وهي التي تفرض قواعد اللعبة: الضرر لا ينزل بالصحّة تحت الصفر، والشفاء لا يتجاوز الحدّ. وهذا هو التغليف.
والخاصيّة المحسوبة تُكتب بسهم: public bool IsAlive => Hp > 0;. لا تُخزَّن، بل تُحسب من Hp في كل قراءة، فلا تخرج عن التوافق معها أبدًا.
المطلوب
حوّل حقول Player الثلاثة Name وMaxHp وHp إلى خصائص { get; private set; }، واجعل المُنشئ يحفظ الاسم والصحّة القصوى ويبدأ بصحّة كاملة. وIsAlive صحيحة ما دامت Hp أكبر من صفر. وTakeDamage(amount) تُنقص Hp دون أن تنزل تحت الصفر، وHeal(amount) تزيدها دون أن تتجاوز MaxHp، ولا تشفي لاعبًا سقط.
معايير التصحيح
6 معايير- المُنشئ يحفظ الاسم ويبدأ بصحّة كاملة
- TakeDamage تُنقص الصحّة
- الصحّة لا تنزل تحت الصفر، و IsAlive تصير false
- Heal تزيد الصحّة ولا تتجاوز MaxHp
- لا شفاء لمن سقط
- Name و MaxHp و Hp خصائص تُقرأ من الخارج ولا تُكتب