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

التعدادات في الأصناف

جزء من قسم البرمجة كائنية التوجّه في رحلة GDScript على Coddy. الدرس 44 من 65.

يمكن التصريح بتعداد داخل فئة، بجانب متغيراتها. عندئذٍ تنتمي الخيارات إلى تلك الفئة:

# weapon.gd
class_name Weapon
extends RefCounted

enum Kind { SWORD, BOW, STAFF }

var kind: Kind

func _init(weapon_kind: Kind) -> void:
	kind = weapon_kind

func is_ranged() -> bool:
	return kind == Kind.BOW or kind == Kind.STAFF

داخل weapon.gd، التعداد هو Kind. تكتب كل الملفات الأخرى اسم الصنف أولًا، Weapon.Kind.BOW، في القيم وتعليقات الأنواع وأنماط match:

# blacksmith.gd
class_name Blacksmith
extends RefCounted

static func repair_cost(kind: Weapon.Kind) -> int:
	match kind:
		Weapon.Kind.SWORD:
			return 20
		Weapon.Kind.BOW:
			return 15
	return 30

تظل الخيارات أرقامًا: تطبع Weapon.new(Weapon.Kind.BOW).kind القيمة 1. يعمل التعداد نفسه مثل قاموس يربط الأسماء بالأرقام:

print(Weapon.Kind.keys())       # ["SWORD", "BOW", "STAFF"]
print(Weapon.Kind.find_key(1))  # BOW
print(Weapon.Kind["STAFF"])     # 2
print(Weapon.Kind.size())       # 3
for kind in Weapon.Kind.values():
	print(Weapon.Kind.find_key(kind), ": ", Blacksmith.repair_cost(kind))

تطبع الحلقة SWORD: 20 وBOW: 15 وSTAFF: 30. لا يتحقق GDScript من أن الرقم أحد الخيارات: ينشئ Weapon.new(7) سلاحًا تكون قيمة kind فيه 7. مرّر الخيارات المُسمّاة وسيظل الكود صحيحًا.

يجب أن يكون التعداد الذي يصف فئةً ما داخل تلك الفئة، حتى يرى القارئ مصدر Kind في Weapon.Kind.BOW.

challenge icon

التحدي

سهل

رتّب الجرعات باستخدام تعداد يعيش داخل الفئة Potion.

  • في potion.gd، صرّح عن enum Kind { HEAL, MANA, POISON } واجعل نوع kind هو Kind.
  • Potion.from_text(text, strength) دالة ثابتة تحوّل "MANA" إلى Kind.MANA وتعيد جرعة جديدة.
  • تعيد describe() القيمة HEAL potion: +20 HP أو MANA potion: +15 MP أو POISON potion: -5 HP، باستخدام اسم النوع وقوته.
  • في belt.gd، تعيد summary() سطرًا واحدًا لكل نوع، وفق ترتيب التعداد: HEAL: 2 (35 total)، مع عدد الجرعات من ذلك النوع ومجموع قوتها بين قوسين. تظهر الأنواع التي لا تحتوي على جرعات في سطر أيضًا.

يقرأ الكود المرفق عدد الجرعات التالية (HEAL 20)، ويضيف كل جرعة إلى الحزام، ويطبع وصفها ثم الملخص. بالنسبة إلى HEAL 20 وPOISON 5 وHEAL 15، يطبع:

Added HEAL potion: +20 HP
Added POISON potion: -5 HP
Added HEAL potion: +15 HP
HEAL: 2 (35 total)
MANA: 0 (0 total)
POISON: 1 (5 total)

ضع الكود الخاص بك في potion.gd وbelt.gd. يحتوي main.gd على كود الإدخال/الإخراج المرفق، ولا يمكن تعديله.

جرّب بنفسك

extends Node

func _ready():
	# كود الإدخال والإخراج المقدَّم: أبقه كما هو
	var belt := Belt.new()
	var count := int(OS.read_string_from_stdin())
	for i in count:
		var parts := OS.read_string_from_stdin().split(" ")
		var potion := Potion.from_text(parts[0], int(parts[1]))
		belt.add(potion)
		print("Added ", potion.describe())
	for line in belt.summary():
		print(line)
quiz iconاختبر نفسك

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

جميع دروس البرمجة كائنية التوجّه

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