هياكل البيانات هي الطريقة التي يحتفظ بها المبرمجون وينظمون بها مجموعات كاملة من البيانات. في لواو، يتم إنشاء هياكل البيانات باستخدام الجداول. الجداول يمكن أن تحتوي على أي عدد من القيم.
تناقش هذه المقالة استخدام المصفوفات، وهو نوع محدد من الجداول، لإنشاء شخصية تتحدث.

الجداول
الجداول هي أنواع بيانات يمكن أن تحتوي على قيم متعددة. على عكس أنواع البيانات الأخرى التي تخزن قيمة واحدة، فإن الجداول ليس لها حجم ثابت ويمكنها أن تحتوي على مزيج من أنواع القيم المختلفة. باستخدام الجداول، يمكنك تخزين العناصر في مخزون اللاعب أو إنشاء قائمة بأسماء آلاف اللاعبين.
المصفوفات
هناك أنواع مختلفة من الجداول. أحد الأنواع هو المصفوفة، التي تخزن قوائم من القيم بترتيب محدد. لإنشاء مصفوفة، قم بإنشاء متغير وأعطه أقواسًا معقوفة { }. افصل القيم داخل الأقواس بفواصل كما هو موضح أدناه:
local myArray = {"item1", "item2", 10, workspace.Part, myVariable}
إنشاء شخصية تتحدث
لاستكشاف المصفوفات، ستعمل مع شخصية غير قابلة للعب (NPC) التي، عند النقر عليها، تظهر خطًا مختلفًا من الحوار.
سوف يستخدم هذا المشروع نموذج NPC مُعد مسبقًا، والذي يتضمن جزءًا نصيًا جزئيًا وكاشف الطلب، ولكنه يفتقر إلى الحوار.
في مستكشف الروابط، قم باستيراد NPC عن طريق النقر بزر الماوس الأيمن على Workspace ⟩ إدراج من ملف واختر الملف الذي قمت بتنزيله.
برمجة مصفوفة الحوار
تستخدم هذه الخطوات مصفوفة لتخزين عبارات مختلفة ليقولها NPC عندما يتفاعل اللاعبون معه.
في مستكشف الروابط، انتقل إلى NPC ⟩ ProximityPrompt ⟩ ChatManager.
في ChatManager، حيث تم وضع علامة في النص البرمجي، أنشئ مصفوفة فارغة لتخزين خيارات الحوار.
-- يدور عبر حوار الدردشة عند استخدام الطلبlocal Chat = game:GetService("Chat")local prompt = script.Parentlocal npc = prompt.Parentlocal characterParts = npc.CharacterPartslocal head = characterParts.Head-- أضف المصفوفة هناlocal dialogueArray = {}local function speak()local dialogue = "لدي شيء واحد لأقوله!"Chat:Chat(head, dialogue)endprompt.Triggered:Connect(speak)داخل الأقواس {} للمصفوفة التي تم إنشاؤها للتو، اكتب ثلاثة عبارات على الأقل، مفصولة بفواصل.
local dialogueArray = {"مرحبًا!", "هل أعرفك؟", "وداعًا!"}
استخدام فهارس المصفوفة
كل قيمة في المصفوفة تُخصص برقم index. تُخصص الفهارس للقيم بترتيب القيم المخزنة. القيمة الأولى تكون في الفهرس 1، والثانية في الفهرس 2، وهكذا.
تبدأ بعض لغات البرمجة، مثل Java، الفهارس من 0.
في المصفوفة التي تم إنشاؤها للتو، "مرحبًا" في الفهرس 1، و"وداعًا!" في الفهرس 3.
| الفهرس | القيمة |
|---|---|
| 1 | مرحبًا |
| 2 | اليوم يوم رائع! |
| 3 | وداعًا! |
استخدام قيم الفهارس المحددة
استخدم قيم الفهارس لتعيين قطع معينة من الحوار إلى NPC. لاستخدام قيمة في فهرس محدد، أضف الفهرس في الأقواس مباشرة بعد اسم المصفوفة، مثل dialogueArray[1].
استبدل القيمة الافتراضية لسلسلة المتغير dialogue بالفهرس 2.
local dialogueArray = {"مرحبًا!", "هل أعرفك؟", "وداعًا!"}local function speak()local dialogue = dialogueArray[2]Chat:Chat(head, dialogue)endاختبر اللعبة وانقر على NPC. يجب أن تظهر قيمة المصفوفة الثانية في فقاعة الدردشة. حاول تغيير الشيفرة لاختبار كل قيمة في الجدول.

تغيير خطوط الحوار
عندما يتفاعل اللاعب مع NPC، ستقول NPC دائمًا نفس السطر. هذا ممل. بدلاً من ذلك، استخدم متغيرًا لتحديث أي فهرس تستخدمه.
كلما تفاعل لاعب مع NPC، قم بزيادة قيمة المتغير بمقدار 1 لعرض السطر التالي من الحوار.
للاحتفاظ بسجل الفهرس الحالي، أضف متغيرًا جديدًا باسم dialogueIndex. اضبط المتغير على 1 لتبدأ من بداية المصفوفة.
local dialogueArray = {"مرحبًا!", "هل أعرفك؟", "وداعًا!"}local dialogueIndex = 1في speak(), استبدل رقم الفهرس في dialogueArray[2] بالمتغير الذي قمت بإنشائه للتو.
local function speak()local dialogue = dialogueArray[dialogueIndex]Chat:Chat(head, dialogue)endفي أسفل الدالة، أضف 1 إلى dialogueIndex. في المرة التالية التي يتم فيها استدعاء speak()، سيتم عرض الحوار التالي.
local function speak()local dialogue = dialogueArray[dialogueIndex]Chat:Chat(head, dialogue)dialogueIndex += 1endاختبر اللعبة وانقر على NPC لرؤية كل سلسلة حوار من المصفوفة.
لاحظ أن هناك خطأ في نافذة المخرجات بمجرد أن تصل الشيفرة إلى نهاية المصفوفة.
ستعمل على إصلاح ذلك في القسم التالي حتى يتم إعادة تشغيل الحوار من البداية بعد عرض السلسلة الأخيرة.
أحجام المصفوفات
يمكنك استخدام حجم المصفوفة لمعرفة متى يجب إعادة تعيين الفهرس المطلوب إلى 1. ابحث عن الحجم لمصفوفة بكتابة #، بدون مسافات، قبل اسم المصفوفة.
على سبيل المثال: #dialogueArray
تحقق من حجم المصفوفة مقابل القيمة الحالية للمتغير لمعرفة متى يحين الوقت للبدء من البداية.
إعادة تشغيل الحوار
استخدم حجم المصفوفة للتحقق من متى يحين الوقت للدوران إلى أول قطعة من الحوار.
أضف عبارة if وتحقق مما إذا كان dialogueIndex يساوي #dialogueArray، الحجم الإجمالي لهذه المصفوفة. إذا كان الأمر كذلك، قم بتعيين dialogueIndex إلى 1.
local function speak()local dialogue = dialogueArray[dialogueIndex]Chat:Chat(head, dialogue)if dialogueIndex == #dialogueArray thendialogueIndex = 1enddialogueIndex += 1endإذا لم يكن dialogueIndex في النهاية، يجب أن تضيف 1 إلى dialogueIndex. انقل dialogueIndex += 1 تحت عبارة else.
local function speak()local dialogue = dialogueArray[dialogueIndex]Chat:Chat(head, dialogue)dialogueIndex = if dialogueIndex == #dialogueArray then 1 else dialogueIndex + 1endقم بالتشغيل وتحقق من أنه يمكنك الدروان وإعادة تشغيل الحوار.
الملخص
تعتبر هياكل البيانات هي الطريقة التي يتم بها تخزين مجموعات البيانات. تستخدم لواو الجداول لإنشاء هياكل البيانات. تعتبر المصفوفات نوعًا من الجدول يمكن أن يحتوي على قوائم مرتبة من المعلومات. يتم تخصيص رقم فهرس لكل قيمة داخل المصفوفة، بدءًا من الفهرس 1.
استخدمت هذه الشيفرة مصفوفة لإنشاء قائمة بخطوط الحوار الممكنة لشخصية غير قابلة للعب (NPC).
الشيفرة المكتملة
-- يدور عبر حوار الدردشة عند استخدام الطلب
local Chat = game:GetService("Chat")
local prompt = script.Parent
local npc = prompt.Parent
local characterParts = npc.CharacterParts
local head = characterParts.Head
-- أضف المصفوفة هنا
local dialogueArray = {"مرحبًا!", "هل أعرفك؟", "وداعًا!"}
local dialogueIndex = 1
local function speak()
local dialogue = dialogueArray[dialogueIndex]
Chat:Chat(head, dialogue)
dialogueIndex = if dialogueIndex == #dialogueArray then 1 else dialogueIndex + 1
end
prompt.Triggered:Connect(speak)
نصائح لاستكشاف الأخطاء
إذا لم تنتقل الشخصية عبر المصفوفة من الحوار، جرب نصائح استكشاف الأخطاء التالية.
- تحقق من عبارة if التي يتم فيها إعادة تعيين dialogueIndex إلى 1. في عبارة else، تحقق من أن dialogueIndex تم إضافة 1 إلى نفسه.
- عند الحصول على حجم المصفوفة، تأكد من عدم وجود مسافات بعد # في #dialogueArray.
تحديات اختيارية
جرب واحدة من التحديات الاختيارية أدناه.
- شفِّر الشيفرة بحيث يتراجع حوار NPC عبر المصفوفة. يجب أن يبدأ فهرس الحوار في طول المصفوفة ويطرح في كل مرة بدلاً من الإضافة.
- بدلاً من عرض الحوار بترتيب معين، اجعل NPC يظهر سطرًا عشوائيًا من الحوار في كل مرة باستخدام Random.new(). تم تضمين نموذج شيفرة للإشارة أدناه
local randomGenerator = Random.new()
-- يظهر حوار جديد كلما تم النقر على NPC
local function speak()
local randomIndex = randomGenerator:NextInteger(1, #dialogueArray)
local dialogue = dialogueArray[randomIndex]
Chat:Chat(head, dialogue)
end