Menu
CoddyTech

סיכום – מערכת בריאות

חלק מהיחידה תכנות מונחה עצמים במסלול ה-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 אונליין