Menu
CoddyTech

מאפיינים

חלק מהיחידה תכנות מונחה עצמים במסלול ה-GDScript של Coddy. שיעור 6 מתוך 65.

המשתנים שמחלקה מצהירה עליהם הם המאפיינים שלה (שנקראים גם משתני חבר): הנתונים שכל אובייקט נושא. הצהר עליהם בראש המחלקה, כל אחד עם טיפוס וערך התחלתי:

# player.gd
class_name Player
extends RefCounted

var player_name: String = "Hero"
var level: int = 1
var hp: float = 100.0
var inventory: Array[String] = []

מאפיין שהוצהר ללא ערך מתחיל בערך ברירת המחדל של הטיפוס שלו: 0 עבור int, "" עבור String, false עבור bool ומערך ריק עבור Array[String].

מחוץ למחלקה קוראים ומשנים מאפיין באמצעות נקודה. בתוך המתודות של המחלקה משתמשים בשם שלו:

var p := Player.new()
p.level += 1
p.inventory.append("sword")
print(p.level) # 2
print(p.inventory) # ["sword"]

כל אובייקט מקבל עותק משלו של כל מאפיין, כולל מערכים: [] יוצר מערך ריק חדש עבור כל שחקן, כך שהמלאי של שחקן אחר נשאר ריק.

הטיפוס נבדק: p.level = "max" היא שגיאה שמדווחת לפני שהתוכנית רצה, כי level מכיל int.

challenge icon

אתגר

קל

השלימו את המחלקה Player בקובץ player.gd. הצהירו על המאפיינים הבאים:

  • player_name, מסוג String, שמתחיל בערך "Hero"
  • level, מסוג int, שמתחיל בערך 1
  • hp, מסוג int, שמתחיל בערך 100
  • inventory, מסוג Array[String], שמתחיל ריק

לאחר מכן השלימו את המתודה describe(). היא מחזירה NAME (level LEVEL, HP hp): ITEMS, כאשר ITEMS הוא תוכן המלאי כשהפריטים מחוברים באמצעות ", ", או no items כשהמלאי ריק.

הקוד שסופק קורא שם של שחקן אחד, ואז את מספר הפקודות הבאות, ואז את הפקודות: hit AMOUNT, item NAME או level. הוא משנה ישירות את המאפיינים של השחקן ולבסוף מדפיס את describe() עבור אותו שחקן ועבור שחקן שני שלא שינה. עבור Ada והפקודות hit 30, item sword, level ו-item shield יודפס:

Ada (level 2, 70 hp): sword, shield
Hero (level 1, 100 hp): no items

כתבו את הקוד שלכם בקובץ player.gd. הקובץ main.gd מכיל את קוד הקלט/פלט שסופק ואי אפשר לערוך אותו.

נסו בעצמכם

extends Node

func _ready():
	# קוד הקלט/פלט שסופק: יש להשאיר אותו כפי שהוא
	var hero := Player.new()
	hero.player_name = OS.read_string_from_stdin()
	var guest := Player.new()
	var count := int(OS.read_string_from_stdin())
	for i in count:
		var parts := OS.read_string_from_stdin().split(" ")
		match parts[0]:
			"hit":
				hero.hp -= int(parts[1])
			"item":
				hero.inventory.append(parts[1])
			"level":
				hero.level += 1
	print(hero.describe())
	print(guest.describe())
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה תכנות מונחה עצמים

תרגלו בעצמכם: קומפיילר GDScript אונליין