העתקת מילונים
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-GDScript של Coddy. שיעור 22 מתוך 78.
הקצאת מילון למשתנה אחר אינה מעתיקה אותו. שני המשתנים מפנים לאותו מילון, ולכן שינוי דרך אחד מהם מופיע גם דרך השני:
var template := {"type": "slime", "hp": 30}
var enemy := template
enemy["hp"] = 10
print(template["hp"]) # 10duplicate() יוצרת מילון חדש עם אותם זוגות. שינוי העותק אינו משפיע על המקור:
var original := {"type": "slime", "hp": 30}
var copy := original.duplicate()
copy["hp"] = 99
print(original["hp"]) # 30duplicate() יוצרת העתקה שטחית: להעתקה יש זוגות משלה, אבל ערך שהוא מערך או מילון עדיין משותף לשניהם:
var hero := {"stats": {"hp": 100}, "items": ["sword"]}
var clone := hero.duplicate()
clone["stats"]["hp"] = 1
clone["items"].append("shield")
print(hero){ "stats": { "hp": 1 }, "items": ["sword", "shield"] }העבירו true כדי ליצור עותק עמוק: duplicate(true) מעתיקה גם כל מערך ומילון שבתוכה, כך שאין ביניהם שום דבר משותף:
var twin := hero.duplicate(true)
twin["stats"]["hp"] = 50
print(hero["stats"]["hp"]) # 1עותק שטחי מספיק כשכל הערכים הם מספר, מחרוזת או ערך בוליאני. ברגע שערך הוא מערך או מילון, השתמשו ב־duplicate(true). מערכים פועלים באותו אופן: grid.duplicate(true) מעתיק מערך דו־ממדי יחד עם השורות שלו.
אתגר
קליוצרים גל אויבים מתבנית. המילון template נתון. התוכנית קוראת שני מספרים שלמים, אחד בכל שורה: כמה אויבים ליצור (n) ובונוס hp.
עבור כל מספר אויב i מ־1 עד n:
- יוצרים עותק של
templateשאינו חולק איתו דבר. - מוסיפים את המפתח
"id"עם הערךi. - מוסיפים
bonus * iלערך"hp"שבתוך"stats". - אם זה האויב האחרון, מוסיפים לסוף
"crown"בתוך"loot"שלו. - מדפיסים את האויב.
לבסוף, מדפיסים את Template: ואחריו את התבנית, שחייבת להישאר ללא שינוי. עבור הקלטים 2 ו־10, הפלט הוא:
{ "type": "slime", "stats": { "hp": 40, "speed": 2 }, "loot": ["gel"], "id": 1 }
{ "type": "slime", "stats": { "hp": 50, "speed": 2 }, "loot": ["gel", "crown"], "id": 2 }
Template: { "type": "slime", "stats": { "hp": 30, "speed": 2 }, "loot": ["gel"] }נסו בעצמכם
extends Node
func _ready():
var template := {"type": "slime", "stats": {"hp": 30, "speed": 2}, "loot": ["gel"]}
var n := int(OS.read_string_from_stdin())
var bonus := int(OS.read_string_from_stdin())
# צור והדפס את n האויבים
# הדפס את התבנית
pass
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
2קבלת החלטות מתקדמת
התאמה עם משתניםתנאי סף להתאמהתבניות מערכיםתבניות מילוניםבדיקות חברותסיכום – מנתח פקודות5אפליקציית ספר אנשי קשר
הצגת התפריטהוספת איש קשר8מנהל רשומות תלמידים
סקירת הפרויקטהוספת תלמידתרגלו בעצמכם: קומפיילר GDScript אונליין