الدرس 8 من 10

البنى

هدف الدرس

struct بحقول ودوال أعضاء

01

الشرح

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; من الخارج. الدرس القادم يغلقها.

02

المطلوب

أكمل Player: صحته تبدأ من 100 إن لم تُذكر. وvoid takeDamage(int amount) تُنقص الصحة ولا تنزل بها تحت الصفر، والضرر السالب لا يشفي: تجاهله. وbool alive() const تُرجع true ما دامت الصحة فوق الصفر. ثم أكمل int aliveCount(const std::vector<Player>& team): عدد الأحياء في الفريق.

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

5 معايير
  1. Player يُنشأ بالاسم، وصحته 100 إن لم تُذكر
  2. takeDamage تُنقص الصحة
  3. takeDamage لا تنزل تحت الصفر، والضرر السالب لا يشفي
  4. alive: حيّ ما دامت الصحة فوق الصفر
  5. aliveCount تعدّ الأحياء في الفريق
main.cpp
المخرجاتC++17 · GCC 9 · Judge0

يُترجَم الكود ويعمل على السيرفر…

–/5

يُترجَم الكود ويعمل على السيرفر…

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