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

نسخ القواميس

جزء من قسم المنطق وتدفّق التنفيذ في رحلة GDScript على Coddy. الدرس 22 من 78.

إن إسناد قاموس إلى متغير آخر لا ينسخه. يشير كلا المتغيرين إلى القاموس نفسه، لذا يظهر التغيير الذي يُجرى عبر أحدهما في الآخر:

var template := {"type": "slime", "hp": 30}
var enemy := template
enemy["hp"] = 10
print(template["hp"]) # 10

تنشئ duplicate() قاموسًا جديدًا يحتوي على الأزواج نفسها. تغيير النسخة لا يؤثر في الأصل:

var original := {"type": "slime", "hp": 30}
var copy := original.duplicate()
copy["hp"] = 99
print(original["hp"]) # 30

تنشئ duplicate() نسخة سطحية: للنسخة أزواجها الخاصة، لكن تظل القيمة التي تكون مصفوفة أو قاموسًا مشتركة بين النسختين:

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) مصفوفة ثنائية الأبعاد مع صفوفها.

challenge icon

التحدي

سهل

أنشئ موجة من الأعداء انطلاقًا من قالب. القاموس template معطى. يقرأ البرنامج عددين صحيحين، واحدًا في كل سطر: عدد الأعداء المطلوب إنشاؤهم (n) ومكافأة hp.

لكل عدو رقمه i من 1 إلى n:

  1. أنشئ نسخة من template لا تشاركها أي شيء.
  2. أضف المفتاح "id" بالقيمة i.
  3. أضف bonus * i إلى "hp" داخل "stats".
  4. إذا كان العدو الأخير، فأضف "crown" إلى "loot" الخاصة به.
  5. اطبع العدو.

أخيرًا، اطبع 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
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس المنطق وتدفّق التنفيذ

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