Menu
CoddyTech
flag Ar iconالعربيةdown icon

مراجعة - نظام الصحة

جزء من قسم البرمجة كائنية التوجّه في رحلة GDScript على Coddy. الدرس 39 من 65.

challenge icon

التحدي

سهل

أنشئ نظام صحة يُصدر فيه مكوّن الصحة إشعارًا عند كل تغيير، ويستجيب له شريط الصحة.

يخزّن Health (health.gd) القيمتين max_hp وhp (وتبدأ كلتاهما بالقيمة المعطاة للباني)، ويعرّف ثلاث إشارات: damaged(amount, hp) وhealed(amount, hp) وdied.

  • تُخفّض take_damage(amount) قيمة hp، من دون أن تقل عن 0، وتُصدر damaged بقيمة نقاط الصحة المفقودة فعليًا وقيمة hp الجديدة. وعندما تصل hp إلى 0، تُصدر أيضًا died.
  • ترفع heal(amount) قيمة hp، من دون أن تتجاوز max_hp، وتُصدر healed بقيمة نقاط الصحة المستعادة فعليًا وقيمة hp الجديدة. لا يصدر أي شيء عند الشفاء مع اكتمال الصحة.
  • بمجرد أن تصبح hp مساويةً لـ 0، لا تفعل أي من الدالتين شيئًا.

يحتوي HealthBar (health_bar.gd) على watch(health)، التي تربط الإشارات الثلاث جميعها بدواله الخاصة. وتطبع هذه الدوال -8 HP [12/20] و+5 HP [17/20] وGame over. يخزّن الشريط الحد الأقصى لنقاط الصحة التي يحتاجها كرقم؛ لا تحتفظ بمرجع إلى كائن Health.

يقرأ الكود المرفق الحد الأقصى لنقاط الصحة وعدد الأوامر التالية (damage 8، heal 5)، ثم يطبع نقاط الصحة النهائية. عند حد أقصى قدره 20، ومع الأوامر damage 8، heal 5، heal 10، damage 30، heal 5، تكون النتيجة:

-8 HP [12/20]
+5 HP [17/20]
+3 HP [20/20]
-20 HP [0/20]
Game over
Final HP: 0

ضع الكود الخاص بك في health.gd وhealth_bar.gd. يحتوي main.gd على كود الإدخال والإخراج المرفق، ولا يمكن تعديله.

جرّب بنفسك

extends Node

func _ready():
	# كود الإدخال والإخراج المُقدَّم: اتركه كما هو
	var health := Health.new(int(OS.read_string_from_stdin()))
	var bar := HealthBar.new()
	bar.watch(health)
	var count := int(OS.read_string_from_stdin())
	for i in count:
		var parts := OS.read_string_from_stdin().split(" ")
		if parts[0] == "damage":
			health.take_damage(int(parts[1]))
		elif parts[0] == "heal":
			health.heal(int(parts[1]))
	print("Final HP: ", health.hp)

جميع دروس البرمجة كائنية التوجّه

تدرّب بنفسك: مترجم GDScript عبر الإنترنت