โครงสร้างการควบคุมสามารถมีเงื่อนไขมากกว่าหนึ่งเงื่อนไข คำสำคัญ 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 ทุก ๆ วินาที รวมถึงคำสั่ง print เพื่อตรวจสอบการทำงานของคุณ
finishLine.Touched:Connect(partTouched)while raceActive == true dotask.wait(1)timePassed += 1print(timePassed)endทดสอบการเล่นเกมและตรวจสอบว่าคุณเห็นแต่ละวินาทีแสดงในหน้าต่าง Output
มอบเหรียญรางวัลให้ผู้เล่น
เพื่อให้เสร็จสิ้น ใช้คำสั่ง if พร้อมเงื่อนไขหลายประการเพื่อมอบเหรียญรางวัลที่แตกต่างกันให้กับผู้เล่นตามผลงานของพวกเขา ใช้คำสั่ง if และสองคำสั่ง elseif เพื่อตรวจสอบเวลาที่ผู้เล่นใช้ในการเสร็จสิ้นและมอบเหรียญรางวัลที่ถูกต้องให้กับพวกเขา
เพื่อยืนยันว่าเหรียญแต่ละเหรียญสามารถมอบให้ได้ ให้ใช้คำสั่ง print.
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 เพื่อระบุสิ่งที่จะเกิดขึ้นหากเงื่อนไขทั้งหมดที่กำหนดเป็นเท็จ
เริ่มจากด้านบน เงื่อนไขทั้งหมดจะถูกตรวจสอบ และเฉพาะเงื่อนไขที่เป็นจริง แรก เท่านั้นที่จะทำงานโค้ด เงื่อนไขที่เหลือจะไม่ถูกตรวจสอบ และโค้ดของพวกเขาจะไม่ทำงาน
หลังจากเสร็จสิ้นโปรเจกต์ คุณสามารถขยายสคริปต์เพื่อเพิ่มองค์ประกอบใหม่ในหลายวิธีเพิ่มเติม
- เพิ่มโค้ดเพื่อให้ผู้เล่นสามารถทำการแข่งขันซ้ำได้โดยการสัมผัสเส้นเริ่มต้นเมื่อพวกเขาเสร็จสิ้น
- ออกแบบวิธีการแสดงเวลาในระหว่างการแข่งขัน คุณสามารถแสดงเวลาในส่วนโดยใช้ 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