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

الجداول
الجداول هي أنواع بيانات يمكن أن تحتوي على قيم متعددة. على عكس أنواع البيانات الأخرى التي تخزن قيمة واحدة، فإن الجداول ليس لها حجم ثابت ويمكن أن تحتوي على مزيج من أنواع القيم المختلفة. باستخدام الجداول، يمكنك تخزين العناصر في جرد اللاعب أو إنشاء قائمة بأسماء آلاف اللاعبين.
المصفوفات
هناك أنواع مختلفة من الجداول. أحد الأنواع هو المصفوفة، التي تخزن قوائم من القيم بترتيب محدد. لإنشاء مصفوفة، قم بإنشاء متغير وخصص له أقواس معقوفة { }. افصل القيم داخل الأقواس بفواصل كما هو موضح أدناه:
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العب وتأكد من أنه يمكنك التنقل وإعادة تشغيل الحوار.
ملخص
الهياكل البيانية هي الطريقة التي يتم بها تخزين مجموعات البيانات. يستخدم Luau الجداول لإنشاء الهياكل البيانية. المصفوفات هي نوع من الجداول التي يمكن أن تحتوي على قوائم مرتبة من المعلومات. يتم تعيين رقم فهرس لكل قيمة داخل المصفوفة، بدءًا من الفهرس 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