الدرس 8 من 10
البنى
- 13 دقيقة
- 5 معايير للتصحيح
- 3 تلميحات
- إلى المطلوب
هدف الدرس
struct بحقول ودوال أعضاء
الشرح
struct تجمع بيانات مترابطة تحت اسم واحد: للاعب اسم وصحة، فبدل متغيّرين منفصلين لكل لاعب تكتب struct Player { std::string name; int hp = 100; };، ولا تنسَ الفاصلة المنقوطة بعد القوس الأخير. وتُنشئ لاعبًا بالقيم بترتيب الحقول: Player hero{"ليان", 80};، والحقل الذي لا تذكره يأخذ قيمته الافتراضية: Player hero{"ليان"}; صحته 100. وتصل إلى الحقول بالنقطة: hero.hp -= 10;.
والدوال الأعضاء دوال داخل البنية تعمل على حقولها مباشرة: داخل takeDamage تعني hp صحة هذا اللاعب بعينه، وتستدعيها بالنقطة: hero.takeDamage(30);. وconst بعد القوسين في bool alive() const وعد بأن الدالة لا تغيّر الكائن، ولا يُستدعى على const Player& إلا ما كان كذلك؛ فدالة تقرأ الفريق بـ const std::vector<Player>& لا تستطيع أن تسأل alive() إن غابت عنها const.
وفائدة ذلك أن القاعدة تعيش مع البيانات: الصحة لا تنزل تحت الصفر لأن الضرر يمرّ بـ takeDamage التي تحرسها. لكن حقول struct مكشوفة، ولا شيء يمنع hero.hp = -50; من الخارج. الدرس القادم يغلقها.
المطلوب
أكمل Player: صحته تبدأ من 100 إن لم تُذكر. وvoid takeDamage(int amount) تُنقص الصحة ولا تنزل بها تحت الصفر، والضرر السالب لا يشفي: تجاهله. وbool alive() const تُرجع true ما دامت الصحة فوق الصفر. ثم أكمل int aliveCount(const std::vector<Player>& team): عدد الأحياء في الفريق.
معايير التصحيح
5 معايير- Player يُنشأ بالاسم، وصحته 100 إن لم تُذكر
- takeDamage تُنقص الصحة
- takeDamage لا تنزل تحت الصفر، والضرر السالب لا يشفي
- alive: حيّ ما دامت الصحة فوق الصفر
- aliveCount تعدّ الأحياء في الفريق