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

الخصائص

جزء من قسم البرمجة كائنية التوجّه في رحلة 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 عبر الإنترنت