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

برمجة شروط متعددة
لهذا المشروع، يمكنك كتابة عبارة if فريدة لكل ميدالية لتكريم اللاعبين، لكن ذلك يستغرق الكثير من الوقت. خذ، على سبيل المثال، الكود الخيالي أدناه.
if finishTime < 5 then
-- احصل على ميدالية ذهبية
end
if finishTime >= 5 and <= 10 then
-- احصل على ميدالية فضية
end
if finishTime > 10 and <= 15 then
-- احصل على ميدالية برونزية
endطريقة أكثر وضوحًا وكفاءة لبرمجة هذا هي استخدام عبارة if واحدة واستخدام الكلمة الرئيسية elseif لتوفير شروط بديلة لاختبار ما إذا كانت الشروط السابقة غير صحيحة.
if 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() باستمرار طالما أن اللاعب يلمس الجزء.
استخدم boolean، وهو متغير يخزن true أو false، لضمان استدعاء 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 تعمل فقط عندما يكون boolean raceActive صحيحًا.
في أسفل السكربت، اكتب while raceActive == true do. اضغط Enter لإكمال تلقائيًا وأضف end.
finishLine.Touched:Connect(partTouched)while raceActive == true doendلتوقيت اللاعبين، في الحلقة، أضف 1 إلى متغير timePassed مرة كل ثانية. أضف عبارة طباعة لاختبار عملك.
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، استخدم عبارة طباعة لتحفيزهم على المحاولة مرة أخرى.
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