โครงสร้างการควบคุมสามารถมีเงื่อนไขมากกว่าหนึ่งเงื่อนไข คำสำคัญ else และ elseif สามารถสร้างสถานการณ์เพิ่มเติมสำหรับสิ่งที่จะเกิดขึ้นภายใต้เงื่อนไขหลายประการ ไวยากรณ์มีลักษณะดังนี้:
แสดงไวยากรณ์สำหรับ elseif และ elseif isGreen thenprint("ไป")elseif isYellow thenprint("ช้า")elseif isPedestrians thenprint("รอ")elseprint("หยุด")end
ในโครงการนี้ else และ elseif ถูกใช้เพื่อเขียนหลักสูตรปาร์กัวร์ที่นักวิ่งได้รับรางวัลขึ้นอยู่กับเวลาในการเสร็จสิ้นของพวกเขา

รหัสเงื่อนไขหลายประการ
สำหรับโครงการนี้ คุณสามารถเขียนคำสั่ง if ที่ไม่ซ้ำกันสำหรับเหรียญแต่ละเหรียญที่จะมอบให้ผู้เล่น แต่การทำเช่นนั้นใช้เวลานานมาก ลองพิจารณารหัสสมมุติด้านล่างนี้
คำสั่ง if ทั้งหมดif 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() จะถูกเรียกซ้ำไปเรื่อยๆ ตราบใดที่ผู้เล่นสัมผัสส่วนนี้
ใช้ boolean ซึ่งเป็นตัวแปรที่เก็บค่าจริงหรือเท็จ เพื่อให้แน่ใจว่า 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ทดสอบเล่นประสบการณ์และตรวจสอบว่าคุณเห็นแต่ละวินาทีที่แสดงในหน้าต่าง Output
มอบเหรียญรางวัลให้ผู้เล่น
เพื่อให้เสร็จสิ้น ให้ใช้คำสั่ง 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 เพื่อระบุสิ่งที่จะเกิดขึ้นหากเงื่อนไขทั้งหมดเป็นเท็จ
เริ่มต้นจากด้านบน ทุกเงื่อนไขจะถูกตรวจสอบ และเฉพาะเงื่อนไขที่เป็นจริงในลำดับแรกจะทำงานโค้ด เงื่อนไขที่เหลือจะไม่ได้รับการตรวจสอบ หรือรหัสของพวกเขาจะไม่ทำงาน
หลังจากเสร็จสิ้นโปรเจ็กต์ คุณสามารถขยายสคริปต์เพื่อเพิ่มองค์ประกอบใหม่ในหลายวิธีเพิ่มเติม
- เพิ่มโค้ดเพื่อให้ผู้เล่นสามารถทำการแข่งขันซ้ำได้โดยการสัมผัสเส้นเริ่มต้นเมื่อพวกเขาเสร็จสิ้น
- ออกแบบวิธีในการแสดงเวลาในระหว่างการแข่งขัน คุณสามารถแสดงเวลาในองค์ประกอบโดยใช้ Surface GUI เช่นใน สร้างสะพานตามเวลา
สคริปต์ที่เสร็จสมบูรณ์
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