מאפיינים
חלק מהיחידה תכנות מונחה עצמים במסלול ה-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.
אתגר
קלהשלימו את המחלקה Player בקובץ player.gd. הצהירו על המאפיינים הבאים:
player_name, מסוגString, שמתחיל בערך"Hero"level, מסוגint, שמתחיל בערך1hp, מסוגint, שמתחיל בערך100inventory, מסוג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())
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה תכנות מונחה עצמים
1יסודות התכנות מונחה העצמים
קבצים חיצונייםמבוא ל-OOPמחלקות לעומת אובייקטיםמילת המפתח selfמתודותמאפייניםבנאי (_init)חזרה – מחשבון פשוט2מאפייני מחלקה
משתני מופע לעומת משתנים סטטייםפונקציות סטטיותקובעי מאפייניםמאחזרי מאפייניםפרטיים לפי מוסכמהסיכום – מנהל חשבון בנק5כימוס
איברים ציבוריים ופרטייםאימות באמצעות Settersהסתרת מידעמאפיינים לקריאה בלבדסיכום – מערכת לניהול רשומות תלמידיםתרגלו בעצמכם: קומפיילר GDScript אונליין