يمكن أن تحتوي هياكل التحكم على أكثر من شرط واحد. الكلمات الرئيسية else و elseif يمكن أن تخلق سيناريوهات إضافية لما يجب أن يحدث تحت عدة ظروف. التركيب يبدو كما يلي:
يظهر التركيب لـ elseif و elseif isGreen thenprint("اذهب")elseif isYellow thenprint("تباطأ")elseif isPedestrians thenprint("انتظر")elseprint("توقف")end
في هذا المشروع، يتم استخدام else و elseif لتشفير مسار باركور حيث يحصل المتسابقون على جوائز اعتمادًا على وقت انتهاءهم.

شيفرة عدة شروط
في هذا المشروع، يمكنك كتابة عبارة if فريدة لكل ميدالية لتكريم اللاعبين، لكن ذلك يستغرق الكثير من الوقت. خذ، على سبيل المثال، الشيفرة الخيالية أدناه.
جميع عبارات ifif finishTime < 5 then-- احصل على ميدالية ذهبيةendif finishTime >= 5 and <= 10 then-- احصل على ميدالية فضيةendif finishTime > 10 and <= 15 then-- احصل على ميدالية برونزيةend
طريقة أكثر وضوحًا وكفاءة لكتابة ذلك هي استخدام عبارة if واحدة واستخدام الكلمة الرئيسية elseif لتقديم شروط بديلة لاختبار ما إذا كانت الشروط السابقة غير صحيحة.
يستخدم elseif و elseif finishTime < 5 then-- احصل على ميدالية ذهبيةelseif finishTime >= 5 and <= 10 then-- احصل على ميدالية فضيةelseif finishTime > 10 and <= 15 then-- احصل على ميدالية برونزيةend
عند تشغيل عبارة if/then، ستبدأ من الأعلى وتشغل الشيفرة للشرط الأول الصحيح الذي تجده.
إعداد مسار السباق
ابدأ بوضع نقطة البداية للمسار وخط النهاية، ثم أنشئ نصًا لتوقيت اللاعب ومنح ميداليات مختلفة.
أنشئ جزءًا مثبتًا باسم FinishLine. لجعل الاختبار أسرع، ضع البداية والنهاية بالقرب من بعضهما البعض. يمكنك نقل خط النهاية بعد الانتهاء من النص.

جزء النهاية 
المسار بالكامل في FinishLine، أدرج نصًا باسم RaceManager. ثم، أضف متغيرًا واحدًا لتخزين عدد الثواني التي مرت منذ بدء السباق ومتغيرًا ثانيًا للإشارة إلى FinishLine.
local finishLine = script.Parentlocal timePassed = 0أنشئ دالة باسم finish().
local timePassed = 0local finishLine = script.Parentlocal function finish()endبمفردك:
- شيفر دالة باسم partTouched() التي تشغل finish() عندما يلمسها لاعب.
- اربط جزء خط النهاية بـ partTouched().
- قارن شيفرتك بالمثال أدناه.
local function finish()print("لمست خط النهاية")endlocal function partTouched(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenfinish()endendfinishLine.Touched:Connect(partTouched)جرب اللعب وتحقق من أن finish() يتم استدعاءه عند لمس خط النهاية.
منع تكرار finish()
الآن، كلما لمس اللاعب خط النهاية، يتم استدعاء finish() باستمرار طالما أن اللاعب يلمس الجزء.
استخدم متغيرا، وهو متغير يخزن صحيح أو خطأ، للتأكد من أن finish() يتم استدعاؤه مرة واحدة فقط.
أنشئ متغيرًا جديدًا باسم raceActive واضبطه على true.
local timePassed = 0local finishLine = script.Parentlocal raceActive = true-- يتم تشغيله في كل مرة يلمس فيها اللاعب جزء خط النهايةlocal function finish()أضف شرطًا ثانيًا إلى عبارة if للتحقق مما إذا كان raceActive صحيحًا قبل استدعاء finish().
local function partTouched(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid and raceActive == true thenfinish()endendلإيقاف استدعاء finish() مرة أخرى، اضبط raceActive على false.
local function finish()print("لمست خط النهاية")raceActive = falseendجرب اللعب في تجربتك للتحقق من أنك ترى جملة الطباعة الاختبارية الخاصة بك مرة واحدة فقط.
تتبع الوقت
مثل عبارة if، يمكن أن تستخدم حلقة while أيضًا شرطًا لمعرفة ما إذا كان يجب تشغيلها. لتوقيت اللاعب، أنشئ مؤقتًا باستخدام حلقة while true do تعمل فقط عندما يكون المتغير raceActive صحيحًا.
في أسفل النص، اكتب while raceActive == true do. اضغط على Enter لإكمالها تلقائيًا وأضف end.
finishLine.Touched:Connect(partTouched)while raceActive == true doendلتوقيت اللاعبين، في الحلقة، أضف 1 إلى المتغير timePassed مرة واحدة كل ثانية. أضف جملة print لاختبار عملك.
finishLine.Touched:Connect(partTouched)while raceActive == true dotask.wait(1)timePassed += 1print(timePassed)endجرب اللعب في تجربة وتحقق من أنك ترى كل ثانية معروضة في نافذة الإخراج.
منح اللاعبين الميداليات
لإنهاء ذلك، استخدم عبارة if مع عدة شروط لمنح اللاعبين ميدالية مختلفة بناءً على أدائهم. استخدم عبارة if وعبارات elseif للتحقق من وقت إنهاء اللاعب ومنحهم الميدالية الصحيحة.
لتأكيد منح كل ميدالية، استخدم جمل الطباعة.
local function finish()raceActive = falseprint("أنهيت في " .. timePassed)endلمنح ميدالية ذهبية، شيفر عبارة if تقارن timePassed بوقت الانتهاء المطلوب. يتحقق هذا المثال مما إذا كان وقت اللاعب أقل من أو يساوي 10 ثوانٍ.
local function finish()raceActive = falseprint("أنهيت في " .. timePassed)if timePassed <= 10 thenprint("تحصل على ميدالية ذهبية!")endendجرب اللعب وتأكد من أنه يمكن منح الميدالية الذهبية.
إضافة شروط إضافية
الآن بعد أن اختبرت الميدالية الذهبية، شيفر شروط الميداليات الأخرى باستخدام الكلمة الرئيسية elseif.
للحصول على الميدالية الفضية، استخدم elseif ونطاق الوقت المطلوب التالي. في هذا المثال، يكون النطاق أكبر من 10 ثوانٍ ولكن أقل من أو يساوي 20 ثانية.
local function finish()raceActive = falseprint("أنهيت في " .. timePassed)if timePassed <= 10 thenprint("تحصل على ميدالية ذهبية!")elseif timePassed > 10 and timePassed <= 20 thenprint("تحصل على ميدالية فضية!")endendاستخدم نفس النمط للميدالية البرونزية. تحقق من شيفرتك مع المثال أدناه.
local function finish()raceActive = falseprint("أنهيت في " .. timePassed)if timePassed <= 10 thenprint("تحصل على ميدالية ذهبية!")elseif timePassed > 10 and timePassed <= 20 thenprint("تحصل على ميدالية فضية!")elseif timePassed > 20 and timePassed <= 30 thenprint("تحصل على ميدالية برونزية!")endendجرب اللعب للحصول على الميداليات الفضية والبرونزية.
نصائح لحل المشكلات
إذا لم تر الميداليات الفضية والبرونزية تظهر، حاول أحد هذه الأمور.
- يجب أن تحتوي كل elseif على then بعد شرطها.
- في partTouched()، تأكد من أن الشرط الثاني لعبارة if يستخدم ==، مثل في raceActive == true.
- تحقق من أن كل elseif في نطاق. يجب أن تكون كل حالة elseif بين السطر الأول من عبارة if/then وآخر end.
إضافة شرط else
إذا لم يحصل اللاعب على أي من الميداليات، يجب عليك تشجيعهم على المحاولة مرة أخرى. في هذه الحالة، يمكنك استخدام عبارة else، التي تعمل إذا كانت لا توجد شروط أخرى صحيحة، لعرض رسالة لهم.
أسفل آخر elseif وفوق end، ابدأ سطرًا جديدًا واكتب else. لا تضف then. تحت else، استخدم جملة print لتحفزهم على المحاولة مرة أخرى.
local function finish()raceActive = falseprint("أنهيت في " .. timePassed)if timePassed <= 10 thenprint("تحصل على ميدالية ذهبية!")elseif timePassed > 10 and timePassed <= 20 thenprint("تحصل على ميدالية فضية!")elseif timePassed > 20 and timePassed <= 30 thenprint("تحصل على ميدالية برونزية!")elseprint("حاول مرة أخرى!")endendجرب اللعب لرؤية رسالة else.
ملخص
يمكن أن تحتوي هياكل التحكم على أكثر من سيناريو واحد. استخدم عبارات if لإعداد العبارة الأولية للتحقق، ثم أضف عددًا لا نهائي من شروط elseif حسب الضرورة. أخيرًا، استخدم else لتوضيح ما يجب أن يحدث إذا كانت جميع الشروط المعطاة خاطئة.
بدءًا من الأعلى، سيتم مراجعة جميع الشروط، وستشغل الشيفرة الشرط الصحيح الأول فقط. لن يتم مراجعة الشروط المتبقية، ولن تعمل شيفرتها.
بعد الانتهاء من المشروع، يمكنك توسيع النص لإضافة عناصر جديدة بطرق إضافية قليلة.
- أضف شيفرة حتى يمكن للاعبين تكرار السباق عن طريق لمس خط البداية عند الانتهاء.
- صمم طريقة لعرض الوقت أثناء السباق. يمكنك عرض الوقت على جزء باستخدام واجهة مستخدم السطح، مثلما هو الحال في إنشاء جسر مؤقت.
الشيفرة المكتملة
local timePassed = 0
local finishLine = script.Parent
-- تستخدم لمنع finish() والموقت من التكرار عندما ينتهي السباق
local raceActive = true
-- يتم التشغيل عندما يلمس اللاعب خط النهاية ويظهر له جائزة
local function finish()
raceActive = false
print("أنهيت في " .. timePassed)
if timePassed <= 10 then
print("تحصل على ميدالية ذهبية!")
elseif timePassed > 10 and timePassed <= 20 then
print("تحصل على ميدالية فضية!")
elseif timePassed > 20 and timePassed <= 30 then
print("تحصل على ميدالية برونزية!")
else
print("حاول مرة أخرى!")
end
end
-- يتحقق إذا لمس اللاعب الجزء عندما يكون السباق نشطًا
local function partTouched(otherPart)
local character = otherPart.Parent
local humanoid = character:FindFirstChildWhichIsA("Humanoid")
if humanoid and raceActive == true then
finish()
end
end
finishLine.Touched:Connect(partTouched)
-- يتتبع وقت السباق بينما يكون السباق نشطًا. يحتاج أن يكون في أسفل النص.
while raceActive == true do
task.wait(1)
timePassed += 1
print(timePassed)
end