القواميس هي جداول تربط الأسماء أو المفاتيح بقيمة بدلاً من فهرس.
مثال:
local pet = {
Name = "Bobbie",
Type = "Dog",
}استخدم القواميس عندما تحتاج إلى تسمية القيم، وليس فقط سردها بترتيب كما تفعل المصفوفة. مارس استخدام القواميس في هذا البرنامج التعليمي من خلال التلاعب بالقيم المرتبطة باللاعب.
صياغة القاموس
مثل المصفوفات، يتم تعيين القواميس إلى متغير باستخدام الأقواس المعقوفة {}. يتم تخزين أزواج المفتاح والقيمة في أسطر منفصلة تليها فاصلة. يمكن أن تكون المفاتيح والقيم من أي نوع بيانات، بما في ذلك السلاسل النصية، الأرقام، وأسماء المتغيرات.
local playerNames = {
player1 = "Zap",
player2 = "Kel",
}
print(playerNames["player1"])لإشارة إلى الأجزاء أو الكائنات الأخرى كالمفاتيح، استخدم الأقواس.
local greenPart = workspace.GreenPart
local redPart = workspace.RedPart
local partList = {
[greenPart] = true,
[redPart] = false,
}
print(partList[redPart])إنشاء قاموس
استخدام شائع للقواميس هو تنظيم معلومات اللاعب أو الشخصية. تستكشف هذه الخطوات كيفية تخزين معلومات شخصية عدو نظرية والوصول إليها.
في نص برمجي جديد، أنشئ قاموسًا باسم enemy.
local enemy = {}المفتاح الأول في القاموس سيتتبع اسم العدو باستخدام متغير يسمى Name.
local enemy = {Name}عيّن اسم العدو إلى المفتاح، متبوعًا بفاصلة.
local enemy = {Name = "Spike",}أضف زوج مفتاح-قيمة ثانٍ لمدى صحة العدو. تذكر، يجب أن تستخدم المفاتيح دائمًا نفس نوع البيانات، لكن القيم لا تحتاج إلى ذلك.
local enemy = {Name = "Spike",Health = 1000,}
استخدام قيم القاموس
هناك طريقتان للوصول إلى قيم القاموس:
- tableName["keyName"] (من المهم ملاحظة الاقتباسات)
- tableName.keyName
local enemy = {
Name = "Spike",
Health = 1000,
}
print("الشرير " .. enemy["Name"] .. " يقترب!")
print("الشرير " .. enemy.Name .. " يقترب!")أي نمط يجب استخدامه يعتمد عادةً على غرض الجدول. بالنسبة للجداول التي تحتوي على مجموعة من القيم مثل قائمة اللاعبين في خادم، سيستخدم المبرمجون عادةً tableName["keyName"]. بالنسبة لقاموس يستخدم لوصف كائن، من المرجح أن يستخدم المبرمجون tableName.keyName.
تغيير قيمة القاموس
تغيير قيمة المفتاح هو نفسه مثل أي متغير آخر؛ استخدم عامل المساواة =.
تحت جدول enemy، قم بتعيين اسم العدو إلى شيء آخر.
local enemy = {Name = "Spike",Health = 1000,}enemy.Name = "Rana"print("اسم العدو هو " .. enemy.Name)اختبر اللعبة وتحقق من نافذة الإخراج.
المتغيرات الموجودة مسبقًا كمفاتيح
يمكن أن تتفاعل القواميس مع المتغيرات الموجودة مسبقًا المعلنة في أجزاء أخرى من النص البرمجي. يستخدم المثال البرمجي التالي متغيرًا لإضافة اسم اللاعب كمفتاح عند انضمامهم إلى اللعبة ثم يعيّن قيمة نقاطهم إلى 0.
في ServerScriptService، أنشئ نصًا برمجيًا جديدًا باسم PlayerPoints. في النص، احصل على خدمة اللاعبين وأنشئ قاموسًا فارغًا باسم playerPoints.
local Players = game:GetService("Players")local playerPoints = {}اكتب دالة محلية لتعيين نقاط اللاعب مع معلمة لمتغير لاعب جديد. اربط الدالة بحدث Players.PlayerAdded.
local playerPoints = {}local function setPoints(newPlayer)endPlayers.PlayerAdded:Connect(setPoints)في الدالة، أضف متغيرًا للحصول على Name اللاعب، وهي خاصية في كل كائن Player، وعبارة طباعة للاختبار.
local function setPoints(newPlayer)local name = newPlayer.Nameprint("مرحبًا " .. name)endأدخل name في قاموس playerPoints كمفتاح، واضبط القيمة، نقاط اللاعب، إلى 0.
local function setPoints(newPlayer)local name = newPlayer.Nameprint("مرحبًا " .. name)playerPoints[name] = 0endاستخدم name لطباعة اسم اللاعب وplayerPoints[name] لطباعة قيمة المفتاح المطابقة للمتغير.
local function setPoints(newPlayer)local name = newPlayer.Nameprint("مرحبًا " .. name)playerPoints[name] = 0print(name .. " لديه " .. playerPoints[name] .. " نقاط.")endقم بتشغيل المشروع وراقب الإخراج.
local Players = game:GetService("Players")
local playerPoints = {
}
local function setPoints(newPlayer)
local name = newPlayer.Name
print("مرحبًا " .. name)
playerPoints[name] = 0
print(name .. " لديه " .. playerPoints[name] .. " نقاط.")
end
Players.PlayerAdded:Connect(setPoints)تحديات اختيارية
فيما يلي بعض التحديات التي تنطبق على استخدام القواميس بطرق مختلفة. تحقق مما إذا كنت تستطيع بناء الكود لهذه.
- أنشئ جزء فخ يسبب ضررًا بمرور الوقت للاعب. بمجرد أن يلمس اللاعب الفخ، أضره، انتظر، ثم اسمح له بالتعرض للضرر مرة أخرى.
- أنشئ دالة تتحقق من أي من لاعبين لديه أكبر عدد من النقاط من خلال الوصول إلى قاموس.
- أنشئ شيفرة، نظام لتبديل سلسلة نصية بأخرى لإنشاء "رمز سري". على سبيل المثال، يمكن تبديل الحرف "A" بـ "G"، أو يمكن تبديل الكلمة "apple" بـ "orange".
القواميس و pairs()
pairs() هي دالة تُستخدم غالبًا للتكرار عبر القواميس. يظهر مثال أدناه.
local myDictionary = {
["اللاعب الأزرق"] = "آنا",
["اللاعب الذهبي"] = "بين",
["اللاعب الأحمر"] = "كاتي",
}
for key, value in pairs(myDictionary) do
print(key .. " هو " .. value)
endيمكن استخدام pairs() للعمل مع مفتاح عنصر القاموس، القيمة، أو كليهما. في حلقة for أدناه، المتغير الأول هو المفتاح. المتغير الثاني هو القيمة. يتم تمرير القاموس الذي تريد العمل معه إلى pairs().
local inventory = {
["الطوب الذهبي"] = 43,
الجزر = 3,
المشاعل = 2,
}
print("لديك:")
for itemName, itemValue in pairs(inventory) do
print(itemValue, itemName)
endعند التنفيذ، سيطبع الكود ما يلي:
لديك:
43 الطوب الذهبي
3 الجزر
2 المشاعلملخص
القواميس هي جداول تستخدم أزواج المفتاح والقيمة بدلاً من القيم المفهرسة. تبدأ القواميس والمصفوفات بشكل مشابه من خلال تعيين الأقواس المعقوفة إلى متغير. احتفظ بالإدخالات مفصولة بفواصل.
يجب أن تستخدم جميع المفاتيح داخل القاموس نفس نوع البيانات، لكن القيم يمكن أن تختلط بين أنواع البيانات دون مشكلة.
يمكن أن تعبر الطريقة التي يتم بها الوصول إلى القاموس عن غرضه. من المحتمل أن يتم الوصول إلى قاموس خصائص العدو باستخدام عامل النقطة، بينما من المحتمل أن تستخدم قائمة الأسماء tableName[keyName].
عند استخدام الأقواس، كن حذرًا؛ يجب التعامل مع أسماء المفاتيح التي تم إنشاؤها داخل الجدول كسلاسل نصية: tableName["keyName"]. ومع ذلك، عند الإشارة إلى كائنات مثل الأجزاء، لا تحتاج إلى الاقتباسات: tableName[keyName].
تحتاج العديد من النصوص البرمجية إلى المرور عبر القواميس أو المصفوفات، لكن قد لا تعرف دائمًا بداية ونهاية هذه الهياكل البيانية. على سبيل المثال، قد يتغير قاموس اللاعبين، أو قد يكون لدى اللاعبين مصفوفة جرد بأحجام متغيرة.
في هذه الحالات، يمكنك استخدام pairs() و ipairs() في حلقة for للمرور عبر كل عنصر دون نقاط بداية ونهاية معروفة. يمكنك أيضًا استخدام التكرار العام من خلال الكلمة in للتكرار عبر العناصر دون الحاجة إلى pairs() أو ipairs().