Các cấu trúc điều khiển có thể có nhiều hơn một điều kiện. Các từ khóa else và elseif có thể tạo ra các kịch bản bổ sung cho những gì sẽ xảy ra dưới nhiều điều kiện. Cú pháp trông như sau:
Hiển thị cú pháp cho elseif và elseif isGreen thenprint("Đi")elseif isYellow thenprint("Chậm lại")elseif isPedestrians thenprint("Chờ")elseprint("dừng lại")end
Trong dự án này, else và elseif được sử dụng để lập trình một khóa học parkour mà ở đó những người chạy nhận giải thưởng tùy thuộc vào thời gian hoàn thành của họ.

Lập trình nhiều điều kiện
Đối với dự án này, bạn có thể viết một câu lệnh if duy nhất cho từng huy chương để trao cho người chơi, nhưng điều đó tốn nhiều thời gian. Lấy ví dụ, đoạn mã tưởng tượng dưới đây.
Tất cả các câu lệnh ifif finishTime < 5 then-- Nhận huy chương vàngendif finishTime >= 5 and <= 10 then-- Nhận huy chương bạcendif finishTime > 10 and <= 15 then-- Nhận huy chương đồngend
Một cách dễ đọc và hiệu quả hơn để lập trình điều này là sử dụng một câu lệnh if duy nhất và sử dụng từ khóa elseif để cung cấp các điều kiện thay thế để kiểm tra nếu các điều kiện trước đó không đúng.
Sử dụng elseif và elseif finishTime < 5 then-- Nhận huy chương vàngelseif finishTime >= 5 and <= 10 then-- Nhận huy chương bạcelseif finishTime > 10 and <= 15 then-- Nhận huy chương đồngend
Khi câu lệnh if/then được chạy, nó sẽ bắt đầu từ trên cùng và chỉ chạy mã cho điều kiện đúng đầu tiên mà nó tìm thấy.
Thiết lập đường đua
Bắt đầu bằng cách đặt điểm xuất phát và vạch đích của khóa học, sau đó tạo một kịch bản để đo thời gian của người chơi và trao giải thưởng khác nhau.
Tạo một phần được ghim có tên là FinishLine. Để thử nghiệm nhanh hơn, hãy đặt điểm bắt đầu và vạch kết thúc gần nhau. Bạn có thể di chuyển vạch đích sau khi hoàn thành kịch bản.

Phần Đích 
Tổng Quan Khóa Học Trong FinishLine, chèn một kịch bản có tên là RaceManager. Sau đó, thêm một biến để lưu trữ số giây đã trôi qua kể từ khi cuộc đua bắt đầu và một biến thứ hai để tham chiếu đến FinishLine.
local finishLine = script.Parentlocal timePassed = 0Tạo một hàm có tên finish().
local timePassed = 0local finishLine = script.Parentlocal function finish()endTự làm:
- Lập trình một hàm có tên partTouched() mà chạy finish() khi một người chơi chạm vào nó.
- Kết nối phần vạch đích với partTouched().
- So sánh mã của bạn với ví dụ dưới đây.
local function finish()print("chạm vào vạch đích")endlocal function partTouched(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenfinish()endendfinishLine.Touched:Connect(partTouched)Kiểm tra và kiểm tra rằng finish() được gọi khi bạn chạm vào vạch đích.
Giữ cho finish() không bị lặp lại
Hiện tại, mỗi khi một người chơi chạm vào vạch đích, finish() sẽ bị gọi liên tục miễn là người chơi chạm vào phần đó.
Sử dụng một boolean, một biến lưu trữ giá trị đúng hoặc sai, để đảm bảo rằng finish() chỉ được gọi một lần.
Tạo một biến mới có tên raceActive và đặt nó thành true.
local timePassed = 0local finishLine = script.Parentlocal raceActive = true-- Chạy khi người chơi chạm vào phần vạch đíchlocal function finish()Thêm một điều kiện thứ hai vào câu lệnh if để kiểm tra xem raceActive có phải là true trước khi gọi finish().
local function partTouched(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid and raceActive == true thenfinish()endendĐể ngừng gọi finish() một lần nữa, hãy đặt raceActive thành false.
local function finish()print("chạm vào vạch đích")raceActive = falseendKiểm tra trò chơi của bạn để kiểm tra rằng bạn chỉ thấy thông điệp in thử nghiệm một lần.
Theo dõi thời gian
Giống như câu lệnh if, một vòng lặp while cũng có thể sử dụng một điều kiện để xem nó có chạy hay không. Để đo thời gian của người chơi, hãy tạo một bộ đếm thời gian bằng cách sử dụng vòng lặp while true do chỉ chạy khi boolean raceActive là true.
Ở cuối kịch bản, gõ while raceActive == true do. Nhấn Enter để tự động hoàn tất và thêm end.
finishLine.Touched:Connect(partTouched)while raceActive == true doendĐể đo thời gian của người chơi, trong vòng lặp, hãy cộng 1 vào biến timePassed mỗi giây một lần. Bao gồm một câu lệnh in để kiểm tra công việc của bạn.
finishLine.Touched:Connect(partTouched)while raceActive == true dotask.wait(1)timePassed += 1print(timePassed)endKiểm tra trải nghiệm và kiểm tra rằng bạn thấy mỗi giây được hiển thị trong cửa sổ Output.
Trao huy chương cho người chơi
Để hoàn thành, hãy sử dụng một câu lệnh if với nhiều điều kiện để trao cho người chơi một huy chương giải thưởng khác nhau dựa trên hiệu suất của họ. Sử dụng một câu lệnh if và hai câu lệnh elseif để kiểm tra thời gian hoàn thành của người chơi và trao cho họ huy chương đúng.
Để xác nhận mỗi huy chương có thể được trao, hãy sử dụng các câu lệnh in.
local function finish()raceActive = falseprint("Bạn đã hoàn thành trong " .. timePassed)endĐể trao huy chương vàng, lập trình một câu lệnh if so sánh timePassed với thời gian hoàn thành mong muốn. Ví dụ này kiểm tra nếu thời gian của người chơi nhỏ hơn hoặc bằng 10 giây.
local function finish()raceActive = falseprint("Bạn đã hoàn thành trong " .. timePassed)if timePassed <= 10 thenprint("Bạn nhận được huy chương vàng!")endendKiểm tra và xác nhận huy chương vàng có thể được trao.
Thêm các điều kiện bổ sung
Bây giờ bạn đã kiểm tra huy chương vàng, hãy lập trình điều kiện cho các huy chương khác bằng cách sử dụng từ khóa elseif.
Đối với huy chương bạc, sử dụng elseif và phạm vi thời gian mong muốn tiếp theo. Trong ví dụ này, phạm vi là lớn hơn 10 giây nhưng nhỏ hơn hoặc bằng 20 giây.
local function finish()raceActive = falseprint("Bạn đã hoàn thành trong " .. timePassed)if timePassed <= 10 thenprint("Bạn nhận được huy chương vàng!")elseif timePassed > 10 and timePassed <= 20 thenprint("Bạn nhận được huy chương bạc!")endendSử dụng cùng một mẫu cho huy chương đồng. Kiểm tra mã của bạn với ví dụ dưới đây.
local function finish()raceActive = falseprint("Bạn đã hoàn thành trong " .. timePassed)if timePassed <= 10 thenprint("Bạn nhận được huy chương vàng!")elseif timePassed > 10 and timePassed <= 20 thenprint("Bạn nhận được huy chương bạc!")elseif timePassed > 20 and timePassed <= 30 thenprint("Bạn nhận được huy chương đồng!")endendKiểm tra cho huy chương bạc và đồng.
Mẹo khắc phục sự cố
Nếu bạn không thấy huy chương bạc và đồng xuất hiện, hãy thử một trong những điều dưới đây.
- Mỗi elseif nên có một then sau điều kiện của nó.
- Trong partTouched(), hãy chắc chắn rằng điều kiện thứ hai của câu lệnh if sử dụng ==, như trong raceActive == true.
- Kiểm tra rằng mỗi elseif nằm trong phạm vi. Mỗi điều kiện elseif phải nằm giữa dòng đầu tiên của câu lệnh if/then và dòng end cuối cùng của nó.
Thêm điều kiện else
Nếu người chơi không kiếm được bất kỳ huy chương nào, bạn nên khuyến khích họ thử lại. Trong trường hợp này, bạn có thể sử dụng câu lệnh else, câu lệnh này sẽ chạy nếu không có điều kiện nào khác là đúng, để hiển thị cho họ một thông điệp.
Dưới dòng elseif cuối cùng và trên end, bắt đầu một dòng mới và gõ else. Không thêm then. Dưới else, sử dụng một câu lệnh in để khuyến khích họ thử lại.
local function finish()raceActive = falseprint("Bạn đã hoàn thành trong " .. timePassed)if timePassed <= 10 thenprint("Bạn nhận được huy chương vàng!")elseif timePassed > 10 and timePassed <= 20 thenprint("Bạn nhận được huy chương bạc!")elseif timePassed > 20 and timePassed <= 30 thenprint("Bạn nhận được huy chương đồng!")elseprint("Thử lại!")endend
2 . Kiểm tra để xem thông điệp else.
Tóm tắt
Các cấu trúc điều khiển có thể có nhiều hơn một kịch bản. Sử dụng các câu lệnh if để thiết lập câu lệnh ban đầu để kiểm tra, sau đó thêm càng nhiều điều kiện elseif cần thiết. Cuối cùng, sử dụng else để nêu rõ những gì sẽ xảy ra nếu tất cả các điều kiện được đưa ra là sai.
Bắt đầu từ trên cùng, tất cả các điều kiện sẽ được kiểm tra, và chỉ điều kiện đúng đầu tiên sẽ chạy mã. Các điều kiện còn lại sẽ không được kiểm tra, cũng như mã của chúng sẽ không chạy.
Sau khi hoàn thành dự án, bạn có thể mở rộng thêm kịch bản để thêm các yếu tố mới theo một vài cách thêm.
- Thêm mã để người chơi có thể lặp lại cuộc đua bằng cách chạm vào vạch xuất phát khi họ hoàn thành.
- Thiết kế một cách để hiển thị thời gian trong cuộc đua. Bạn có thể hiển thị thời gian trên một phần sử dụng GUI Bề mặt, như trong Tạo một Cây cầu có Thời gian tutorial.
Kịch bản hoàn thành
local timePassed = 0
local finishLine = script.Parent
-- Được sử dụng để giữ cho finish() và bộ đếm thời gian không bị lặp lại khi cuộc đua kết thúc
local raceActive = true
-- Chạy khi người chơi chạm vào vạch đích và hiển thị cho họ giải thưởng
local function finish()
raceActive = false
print("Bạn đã hoàn thành trong " .. timePassed)
if timePassed <= 10 then
print("Bạn nhận được huy chương vàng!")
elseif timePassed > 10 and timePassed <= 20 then
print("Bạn nhận được huy chương bạc!")
elseif timePassed > 20 and timePassed <= 30 then
print("Bạn nhận được huy chương đồng!")
else
print("Thử lại!")
end
end
-- Kiểm tra xem một người chơi có chạm vào phần khi cuộc đua đang hoạt động hay không
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)
-- Theo dõi thời gian cuộc đua trong khi cuộc đua đang hoạt động. Cần ở cuối kịch bản.
while raceActive == true do
task.wait(1)
timePassed += 1
print(timePassed)
end