عدة شروط

*This content is translated using AI (Beta) and may contain errors. To view this page in English, click here.

يمكن أن تحتوي هياكل التحكم على أكثر من شرط واحد. الكلمات الرئيسية else و elseif يمكن أن تخلق سيناريوهات إضافية لما يجب أن يحدث تحت عدة ظروف. التركيب يبدو كما يلي:

يظهر التركيب لـ elseif و else

if isGreen then
print("اذهب")
elseif isYellow then
print("تباطأ")
elseif isPedestrians then
print("انتظر")
else
print("توقف")
end

في هذا المشروع، يتم استخدام else و elseif لتشفير مسار باركور حيث يحصل المتسابقون على جوائز اعتمادًا على وقت انتهاءهم.

شيفرة عدة شروط

في هذا المشروع، يمكنك كتابة عبارة if فريدة لكل ميدالية لتكريم اللاعبين، لكن ذلك يستغرق الكثير من الوقت. خذ، على سبيل المثال، الشيفرة الخيالية أدناه.

جميع عبارات if

if finishTime < 5 then
-- احصل على ميدالية ذهبية
end
if finishTime >= 5 and <= 10 then
-- احصل على ميدالية فضية
end
if finishTime > 10 and <= 15 then
-- احصل على ميدالية برونزية
end

طريقة أكثر وضوحًا وكفاءة لكتابة ذلك هي استخدام عبارة if واحدة واستخدام الكلمة الرئيسية elseif لتقديم شروط بديلة لاختبار ما إذا كانت الشروط السابقة غير صحيحة.

يستخدم elseif و else

if finishTime < 5 then
-- احصل على ميدالية ذهبية
elseif finishTime >= 5 and <= 10 then
-- احصل على ميدالية فضية
elseif finishTime > 10 and <= 15 then
-- احصل على ميدالية برونزية
end

عند تشغيل عبارة if/then، ستبدأ من الأعلى وتشغل الشيفرة للشرط الأول الصحيح الذي تجده.

إعداد مسار السباق

ابدأ بوضع نقطة البداية للمسار وخط النهاية، ثم أنشئ نصًا لتوقيت اللاعب ومنح ميداليات مختلفة.

  1. أنشئ جزءًا مثبتًا باسم FinishLine. لجعل الاختبار أسرع، ضع البداية والنهاية بالقرب من بعضهما البعض. يمكنك نقل خط النهاية بعد الانتهاء من النص.

    جزء النهاية
    المسار بالكامل
  2. في FinishLine، أدرج نصًا باسم RaceManager. ثم، أضف متغيرًا واحدًا لتخزين عدد الثواني التي مرت منذ بدء السباق ومتغيرًا ثانيًا للإشارة إلى FinishLine.


    local finishLine = script.Parent
    local timePassed = 0
  3. أنشئ دالة باسم finish().


    local timePassed = 0
    local finishLine = script.Parent
    local function finish()
    end
  4. بمفردك:

    • شيفر دالة باسم partTouched() التي تشغل finish() عندما يلمسها لاعب.
    • اربط جزء خط النهاية بـ partTouched().
    • قارن شيفرتك بالمثال أدناه.

    local function finish()
    print("لمست خط النهاية")
    end
    local function partTouched(otherPart)
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    finish()
    end
    end
    finishLine.Touched:Connect(partTouched)
  5. جرب اللعب وتحقق من أن finish() يتم استدعاءه عند لمس خط النهاية.

منع تكرار finish()

الآن، كلما لمس اللاعب خط النهاية، يتم استدعاء finish() باستمرار طالما أن اللاعب يلمس الجزء.

استخدم متغيرا، وهو متغير يخزن صحيح أو خطأ، للتأكد من أن finish() يتم استدعاؤه مرة واحدة فقط.

  1. أنشئ متغيرًا جديدًا باسم raceActive واضبطه على true.


    local timePassed = 0
    local finishLine = script.Parent
    local raceActive = true
    -- يتم تشغيله في كل مرة يلمس فيها اللاعب جزء خط النهاية
    local function finish()
  2. أضف شرطًا ثانيًا إلى عبارة if للتحقق مما إذا كان raceActive صحيحًا قبل استدعاء finish().


    local function partTouched(otherPart)
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid and raceActive == true then
    finish()
    end
    end
  3. لإيقاف استدعاء finish() مرة أخرى، اضبط raceActive على false.


    local function finish()
    print("لمست خط النهاية")
    raceActive = false
    end
  4. جرب اللعب في تجربتك للتحقق من أنك ترى جملة الطباعة الاختبارية الخاصة بك مرة واحدة فقط.

تتبع الوقت

مثل عبارة if، يمكن أن تستخدم حلقة while أيضًا شرطًا لمعرفة ما إذا كان يجب تشغيلها. لتوقيت اللاعب، أنشئ مؤقتًا باستخدام حلقة while true do تعمل فقط عندما يكون المتغير raceActive صحيحًا.

  1. في أسفل النص، اكتب while raceActive == true do. اضغط على Enter لإكمالها تلقائيًا وأضف end.


    finishLine.Touched:Connect(partTouched)
    while raceActive == true do
    end
  2. لتوقيت اللاعبين، في الحلقة، أضف 1 إلى المتغير timePassed مرة واحدة كل ثانية. أضف جملة print لاختبار عملك.


    finishLine.Touched:Connect(partTouched)
    while raceActive == true do
    task.wait(1)
    timePassed += 1
    print(timePassed)
    end
  3. جرب اللعب في تجربة وتحقق من أنك ترى كل ثانية معروضة في نافذة الإخراج.

منح اللاعبين الميداليات

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

  1. لتأكيد منح كل ميدالية، استخدم جمل الطباعة.


    local function finish()
    raceActive = false
    print("أنهيت في " .. timePassed)
    end
  2. لمنح ميدالية ذهبية، شيفر عبارة if تقارن timePassed بوقت الانتهاء المطلوب. يتحقق هذا المثال مما إذا كان وقت اللاعب أقل من أو يساوي 10 ثوانٍ.


    local function finish()
    raceActive = false
    print("أنهيت في " .. timePassed)
    if timePassed <= 10 then
    print("تحصل على ميدالية ذهبية!")
    end
    end
  3. جرب اللعب وتأكد من أنه يمكن منح الميدالية الذهبية.

إضافة شروط إضافية

الآن بعد أن اختبرت الميدالية الذهبية، شيفر شروط الميداليات الأخرى باستخدام الكلمة الرئيسية elseif.

  1. للحصول على الميدالية الفضية، استخدم elseif ونطاق الوقت المطلوب التالي. في هذا المثال، يكون النطاق أكبر من 10 ثوانٍ ولكن أقل من أو يساوي 20 ثانية.


    local function finish()
    raceActive = false
    print("أنهيت في " .. timePassed)
    if timePassed <= 10 then
    print("تحصل على ميدالية ذهبية!")
    elseif timePassed > 10 and timePassed <= 20 then
    print("تحصل على ميدالية فضية!")
    end
    end
  2. استخدم نفس النمط للميدالية البرونزية. تحقق من شيفرتك مع المثال أدناه.


    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("تحصل على ميدالية برونزية!")
    end
    end
  3. جرب اللعب للحصول على الميداليات الفضية والبرونزية.

نصائح لحل المشكلات

إذا لم تر الميداليات الفضية والبرونزية تظهر، حاول أحد هذه الأمور.

  • يجب أن تحتوي كل elseif على then بعد شرطها.
  • في partTouched()، تأكد من أن الشرط الثاني لعبارة if يستخدم ==، مثل في raceActive == true.
  • تحقق من أن كل elseif في نطاق. يجب أن تكون كل حالة elseif بين السطر الأول من عبارة if/then وآخر end.

إضافة شرط else

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

  1. أسفل آخر elseif وفوق end، ابدأ سطرًا جديدًا واكتب else. لا تضف then. تحت else، استخدم جملة print لتحفزهم على المحاولة مرة أخرى.


    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
  2. جرب اللعب لرؤية رسالة 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
©2026 شركة Roblox Corporation. تُعد منصّة Roblox، وشعار Roblox وشعار "توسيع حدود المخيلة"، من ضمن علاماتنا التجارية المسجّلة وغير المسجّلة في الولايات المتحدة وبلدان أخرى.