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 thêm các tình huống bổ sung cho những gì nên xảy ra dưới một số điều kiện.Cú pháp trông giống như:
Hiển thị ngữ pháp cho elseif và else
if isGreen thenprint("Go")elseif isYellow thenprint("Slow")elseif isPedestrians thenprint("Wait")elseprint("stop")end
Trong dự án này, else và elseif được sử dụng để mã hóa một khóa học parkour mà các vận động viên nhận phần thưởng tùy thuộc vào thời gian hoàn thành của họ.

Mã nhiều điều kiện
Đối với dự án này, bạn có thể viết một câu if duy nhất cho mỗi huy chương để trao giải cho người chơi, nhưng điều đó mất rất nhiều thời gian.Ví ví dụ / trường hợp, hãy lấy mã tưởng tượng bên dưới.
Tất cả các tuyên bố if
if finishTime < 5 then-- Nhận một huy chương vàngendif finishTime >= 5 and <= 10 then-- Nhận một huy chương bạcendif finishTime > 10 and <= 15 then-- Nhận một huy chương đồngend
Một cách dễ đọc và hiệu quả hơn để mã hóa điều này là sử dụng một câu 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à else
if finishTime < 5 then-- Nhận một huy chương vàngelseif finishTime >= 5 and <= 10 then-- Nhận một huy chương bạcelseif finishTime > 10 and <= 15 then-- Nhận một huy chương đồngend
Khi tuyên bố if/then chạy, nó sẽ bắt đầu ở trên cùng và chỉ chạy mã cho điều kiện đầu tiên thực sự nó tìm thấy.
Thiết lập khóa đua
Bắt đầu bằng cách đặt điểm khởi động và đường chạy của khóa học, sau đó tạo một kịch bản để thời gian người chơi và trao các huy chương khác nhau.
Tạo một phần neo có tên FinishLine.Để làm cho quá trình thử nghiệm nhanh hơn, hãy đặt điểm bắt đầu và kết thúc gần nhau.Bạn có thể di chuyển dòng kết thúc sau khi hoàn thành kịch bản.
Hoàn thành phần Toàn bộ khóa Trong FinishLine, nhúng một kịch bản có tên RaceManager.Sau đó, thêm một biến để lưu 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 chức năng có tên là finish().
local timePassed = 0local finishLine = script.Parentlocal function finish()endTrên chính sở hữu:
- Viết một chức năng có tên là partTouched() chạy finish() khi một người chơi chạm vào nó.
- Kết nối phần dòng kết thúc với partTouched() .
- So sánh mã của bạn với ví dụ dưới đây.
local function finish()print("touched the finish line")endlocal function partTouched(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenfinish()endendfinishLine.Touched:Connect(partTouched)Thử nghiệm và kiểm tra rằng finish() được gọi khi bạn chạm vào dòng kết thúc.
Giữ cho finish() không lặp lại
Hiện tại, bất cứ khi nào một người chơi chạm vào đường dòng kết thúc, finish() được 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ữ true hoặc false, để đả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 là raceActive và đặt nó thành true .
local timePassed = 0local finishLine = script.Parentlocal raceActive = true-- Chạy bất cứ khi nào người chơi chạm vào phần dòng kết thúclocal function finish()Thêm một điều kiện thứ hai vào tuyên bố if để kiểm tra xem raceActive là đúng 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ăn chặn finish() được gọi lại, hãy đặt raceActive thành false .
local function finish()print("touched the finish line")raceActive = falseendThử nghiệm trò chơi của bạn để kiểm tra rằng bạn chỉ thấy tuyên bố in thử của bạn một lần.
Theo dõi thời gian
Giống như một 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ó nên chạy không.Để thời gian người chơi, tạo một bộ đếm thời gian bằng cách sử dụng một vòng lặp while true chỉ chạy khi raceActive boolean là true.
Ở phía dưới của kịch bản, nhập while raceActive == true do . Nhấn Enter để tự động hoàn thành và thêm end .
finishLine.Touched:Connect(partTouched)while raceActive == true doendĐể thời gian các người chơi, trong vòng lặp, thêm 1 vào biến timePassed mỗi giây. Bao gồm một tuyên bố 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)endChơi trò chơi và kiểm tra xem bạn có thấy mỗi giây được hiển thị trong cửa sổ Thành phẩm không.
Tặng huy chương cho người chơi
Để hoàn thành, sử dụng một tuyên bố 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 dựa trên hiệu lựccủa họ.Sử dụng một câu if và hai câu 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 tuyên bố in.
local function finish()raceActive = falseprint("You finished in " .. timePassed)endĐể trao một huy chương vàng, viết một if tuyên bố so sánh timePassed với thời gian hoàn thành mong muốn.Ví dụ này kiểm tra xem thời gian của người chơi có nhỏ hơn hoặc bằng 10 giây không.
local function finish()raceActive = falseprint("You finished in " .. timePassed)if timePassed <= 10 thenprint("You get a gold medal!")endendThử nghiệm và xác nhận huy chương vàng có thể được trao.
Thêm điều kiện bổ sung
Bây giờ bạn đã kiểm tra cho huy chương vàng, điều kiện mã 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ớn hơn 10 giây nhưng nhỏ hơn hoặc bằng 20 giây.
local function finish()raceActive = falseprint("You finished in " .. timePassed)if timePassed <= 10 thenprint("You get a gold medal!")elseif timePassed > 10 and timePassed <= 20 thenprint("You get a silver medal!")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("You finished in " .. timePassed)if timePassed <= 10 thenprint("You get a gold medal!")elseif timePassed > 10 and timePassed <= 20 thenprint("You get a silver medal!")elseif timePassed > 20 and timePassed <= 30 thenprint("You get a bronze medal!")endendThử nghiệm cho huy chương bạc và đồng.
Mẹo khắc phục sự cố
Nếu bạn không thấy các kim loại bạc và đồng xuất hiện, hãy thử một trong những điều sau.
- Mỗi elseif nên có một 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 tuyên bố if sử dụng == , giống như trong raceActive == true .
- Kiểm tra xem mỗi elseif có nằm trong phạm vi không. Mỗi elseif điều kiện phải nằm giữa dòng đầu tiên của if/then tuyên bố và nó là cuối cùng end .
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 một tuyên bố else, chạy nếu không có điều kiện khác là đúng, để hiển thị cho họ một tin nhắn.
Bên dưới cùng elseif và trên end, bắt đầu một dòng mới và nhập else . Không thêm sau đó.Bên dưới các thứ khác, sử dụng một tuyên bố in để yêu cầu họ thử lại.
local function finish()raceActive = falseprint("You finished in " .. timePassed)if timePassed <= 10 thenprint("You get a gold medal!")elseif timePassed > 10 and timePassed <= 20 thenprint("You get a silver medal!")elseif timePassed > 20 and timePassed <= 30 thenprint("You get a bronze medal!")elseprint("Try again!")endend
2 . Thử nghiệm để xem tin nhắn khác.
Tổng quát
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 tuyên bố if để thiết lập tuyên bố ban đầu để kiểm tra, và sau đó thêm các điều kiện elseif cần thiết.Cuối cùng, sử dụng else để xác định những gì sẽ xảy ra nếu tất cả các điều kiện được cung cấp 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 thực sự đầu tiên sẽ chạy mã.Các điều kiện còn lại sẽ không được kiểm tra, và mã của họ cũng sẽ không chạy.
Sau khi hoàn thành dự án, bạn có thể mở rộng về kịch bản để thêm các yếu tố mới theo một vài cách bổ sung.
- Thêm mã để người chơi có thể lặp lại cuộc đua bằng cách chạm vào dòng khởi động khi họ hoàn thành.
- Thiết kế 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 bằng cách sử dụng Surface GUI, giống như trong Tạo hướng dẫn cầu có thời gian.
Completed script
local timePassed = 0
local finishLine = script.Parent
-- Sử dụng để giữ cho finish() và timer không 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 đường finish và hiển thị cho họ một phần thưởng
local function finish()
raceActive = false
print("You finished in " .. timePassed)
if timePassed <= 10 then
print("You get a gold medal!")
elseif timePassed > 10 and timePassed <= 20 then
print("You get a silver medal!")
elseif timePassed > 20 and timePassed <= 30 then
print("You get a bronze medal!")
else
print("Try again!")
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 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 khi cuộc đua đang hoạt động. Cần phải ở đáy kịch bản.
while raceActive == true do
task.wait(1)
timePassed += 1
print(timePassed)
end