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 tình huống mới cho những gì nên xảy ra dưới một số điều kiện. Cấu trúc nhìn như:
Hiển thị ngữ cảnh cho else 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 nơi các nhà chạy nhận phần thưởng tùy thời gian kết thúc 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 if độc đáo cho mỗi huy chương để trao cho người chơi, nhưng điều đó mất rất nhiều thời gian. Hãy, ví ví dụ / trường hợp, mã giả dưới đây.
Tất cả các if
if finishTime < 5 then-- Nhận một huy chương vàngendif finishTime >= 5 and <= 10 then-- Nhận huy chương bạcendif finishTime > 10 and <= 15 then-- Nhận một huy chương bronzeend
Một cách đọc thông thái và hiệu quả hơn để code này là sử dụng một if statement và sử dụng từ khóa Alias để cung cấp các điều kiện alternatif để kiểm tra nếu các điều kiện trước không đúng.
Sử dụng else và else
if finishTime < 5 then-- Nhận một huy chương vàngelseif finishTime >= 5 and <= 10 then-- Nhận huy chương bạcelseif finishTime > 10 and <= 15 then-- Nhận một huy chương bronzeend
Khi câu if/then được thực hiện, nó sẽ bắt đầu ở trên và chỉ chạy mã cho điều kiện đầu tiên mà nó tìm thấy.
Tùy chỉnh đường đua
Bắt đầu bằng cách đặt điểm xuất phát của khóa học và hàng đích, sau đó tạo một script để thời gian người chơi và trao các huy chương khác nhau.
Tạo một phần khởi đầu có tên là FinishLine. Để làm cho kiểm tra nhanh hơn, hãy đặt khởi đầ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 script.
Trong FinishLine, hãy thêm một script tên là RaceManager. Sau đó, thêm một biến đổi để lưu lượng thời gian đã chạy kể từ khi bắt đầu cuộc đua và một biến đổi thứ hai để tham chiếu FinishLine.
local finishLine = script.Parentlocal timePassed = 0Tạo một chức năng tên là finish() .
local timePassed = 0local finishLine = script.Parentlocal function finish()endTrên cá sở hữucủa bạn:
- Lập một chức năng tên là partTouched() để chạy finish() khi một người chạm vào nó.
- Kết nối phần dòng kết thúc đến 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)Chơi thử và kiểm tra rằng finish() được gọi khi bạn chạm vào dòng chuẩn bị.
Giữ finish() khỏi lặp lại
Ngay bây giờ, mỗi khi một người chạm vào dòng chuẩn, finish() được gọi liên tục cho đến khi người chơi chạm vào phần.
Sử dụng một Boolean , một biến đổi lưu ý có thật hoặc không, để đảm bảo rằng fin() 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 mỗi khi người chơi chạm vào phần hàng xuất phátlocal function finish()Thêm một điều kiện thứ hai vào if để kiểm tra xem raceActive có đú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() khỏi được gọi lại, hãy thiết lập raceActive để false .
local function finish()print("touched the finish line")raceActive = falseendChơi test game của bạn để xem xét rằng bạn chỉ thấy tuyên bố in thử nghiệm của mình một lần.
Theo dõi thời gian
Giống như một if statement, một while loop cũng có thể sử dụng một điều kiện để xem nó nên chạy. Để thời gian người chơi, tạo một timer bằng cách sử dụng một while true do loop mà chỉ chạy khi raceActiveBoolean là đúng.
Ở dưới cùng của script, 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Để đếm người chơi, trong vòng lặp, thêm 1 đến biến timePassed mỗi giây. Bao gồm một câu chữ 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 rằng bạn thấy mỗi giây được hiển thị trong Cửa sổ Ra mắt.
Đang trao Medals cho người chơi
Để kết thúc, hãy sử dụng một if statement với nhiều điều kiện để trao tặng người chơi một phần thưởng huy chương khác nhau dựa trên hiệu hiệu lựccủa họ. Sử dụng một if statement và hai if statement để kiểm tra thời gian kết thúc của người chơi và trao tặng họ phần thưở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 tặng một huy chương vàng, code một if statement that compares timePassed đến thời gian kết thúc mong muốn. This example checks if the người chơi's time was less than or equal to 10 seconds.
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 đã thử 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, hãy sử dụng elseif và khoảng thời gian mục tiêu tiếp theo. Trong ví dụ này, khoảng thời gian 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("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 pha lê. Xem mẫu của bạn với ví dụ bên dướ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!")endendThử nghiệm cho các huy chương bạc và đồng.
Mẹo dịch vụ
Nếu bạn không thấy các loại kim loại bạc và đồng xuất hiện, hãy thử một trong những lựa chọn dưới đây.
- Mỗi elseif sau điều kiện của nó phải có một sau đó.
- Trong partTouched() , hãy đảm bảo điều kiện thứ hai của if statement uses == , như in raceActive == true .
- Kiểm tra mỗi elseif -number1 có phải là một elseif điều kiện hay không. Mỗi end điều kiện 1> if/then1> phải ở giữa dòng đầu tiên của if/then và nó kết thúc bằng dòng cuối cùng của if/then.
Thêm điều kiện Else
Nếu người chơi không nhận được bất kỳ trong số các huy chương, 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 else tuyên bố, which runs if no other điều kiện là true, để hiển thị cho họ một tin nhắn.
Dưới cái cuối cùng elseif và trên cái cuối cùng end, bắt đầu một dòng mới và nhập else . 1> không cần thêm1> thì. Dưới những khác, hãy sử dụng một lệnh in để kêu gọi 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. Playtest để xem tin nhắn khác.
Tổng kết
Các cấu trúc điều khiển có thể có nhiều tình huống hơn một tình huống. Sử dụng nếu các tuyên bố để cài đặt tuyên bố ban đầu để kiểm tra, và sau đó thêm nhiều điều kiện elseif như cần thiết. Cuối cùng, sử dụng else để tuyên bố những
Bắt đầu ở trên, tất cả các điều kiện sẽ được kiểm tra, và chỉ có điều kiện đầu tiên thực sự mới có thể 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 kết thúc dự án, bạn có thể mở rộng trên script để thêm các thành phần mới bằng một vài cách thêm cách thức nữa.
- 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 xuất phát khi họ kết thúc.
- Thiết kế cách hiển thị thời gian trong một cuộc đua. Bạn có thể hiển thị thời gian trên một bộ phận bằng cách sử dụng một Surface GUI, như trong hướng dẫn Tạo một cầu thời gian.
Completed script
local timePassed = 0
local finishLine = script.Parent
-- Được sử dụng để giữ cho việc kết thúc() 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 đến hàng đích và hiển thị cho họ một giải 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ạm vào bộ phận khi một cuộc đua đang diễn ra
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)
-- Ghi nhận thời gian của cuộc đua khi cuộc đua đang diễn ra. Yêu cầu được ở dưới cùng của màn hình.
while raceActive == true do
task.wait(1)
timePassed += 1
print(timePassed)
end