Menu
CoddyTech

Sözlükleri Kopyalama

Coddy'nin GDScript Journey'sinin Mantık ve Akış bölümünün bir parçası. Ders 22 / 78.

Bir sözlüğü başka bir değişkene atamak onu kopyalamaz. Her iki değişken de aynı sözlüğü gösterir; bu nedenle birindeki değişiklik diğerinde de görünür:

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

duplicate() aynı çiftlere sahip yeni bir sözlük oluşturur. Kopyayı değiştirmek özgün sözlüğü etkilemez:

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

duplicate() bir sığ kopya oluşturur: kopyanın kendine ait çiftleri vardır, ancak dizi veya sözlük olan bir değer iki kopya arasında paylaşılmaya devam eder:

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"] }

Derin kopya için true değerini geçir: duplicate(true), içindeki her diziyi ve sözlüğü de kopyalar; böylece ikisi hiçbir şeyi paylaşmaz:

var twin := hero.duplicate(true)
twin["stats"]["hp"] = 50
print(hero["stats"]["hp"]) # 1

Her değer bir sayı, dize veya boole değeri olduğunda sığ bir kopya yeterlidir. Bir değer dizi veya sözlük olduğu anda duplicate(true) kullanın. Diziler de aynı şekilde çalışır: grid.duplicate(true), 2B bir diziyi satırlarıyla birlikte kopyalar.

challenge icon

Görev

Kolay

Bir şablondan bir düşman dalgası oluştur. template sözlüğü verilmiştir. Program, her satırda bir tane olacak şekilde iki tam sayı okur: oluşturulacak düşman sayısı (n) ve bir hp bonusu.

1 ile n arasındaki her i numaralı düşman için:

  1. template'in onunla hiçbir şeyi paylaşmayan bir kopyasını oluştur.
  2. i değeriyle "id" anahtarını ekle.
  3. "stats" içindeki "hp" değerine bonus * i ekle.
  4. Son düşmansa, "loot" listesine "crown" ekle.
  5. Düşmanı yazdır.

Son olarak, şablonun değişmeden kalması gereken hâlini, önüne Template: ekleyerek yazdır. 2 ve 10 girdileri için çıktı şöyledir:

{ "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"] }

Kendin dene

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 düşmanı oluştur ve yazdır

	# Şablonu yazdır
	pass
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Mantık ve Akış bölümündeki tüm dersler

Kendi başına pratik yap: Online GDScript derleyicisi