Nhiều điều kiện

*Nội dung này được dịch bằng AI (Beta) và có thể có lỗi. Để xem trang này bằng tiếng Anh, hãy nhấp vào đây.

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 elseelseif 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 then
print("Go")
elseif isYellow then
print("Slow")
elseif isPedestrians then
print("Wait")
else
print("stop")
end

Trong dự án này, elseelseif đượ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àng
end
if finishTime >= 5 and <= 10 then
-- Nhận một huy chương bạc
end
if finishTime > 10 and <= 15 then
-- Nhận một huy chương đồng
end

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àng
elseif finishTime >= 5 and <= 10 then
-- Nhận một huy chương bạc
elseif finishTime > 10 and <= 15 then
-- Nhận một huy chương đồng
end

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.

  1. 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
  2. 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.Parent
    local timePassed = 0
  3. Tạo một chức năng có tên là finish().


    local timePassed = 0
    local finishLine = script.Parent
    local function finish()
    end
  4. Trê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")
    end
    local function partTouched(otherPart)
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    finish()
    end
    end
    finishLine.Touched:Connect(partTouched)
  5. 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.

  1. Tạo một biến mới có tên là raceActive và đặt nó thành true .


    local timePassed = 0
    local finishLine = script.Parent
    local 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úc
    local function finish()
  2. 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.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid and raceActive == true then
    finish()
    end
    end
  3. Để 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 = false
    end
  4. Thử 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.

  1. Ở 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 do
    end
  2. Để 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 do
    task.wait(1)
    timePassed += 1
    print(timePassed)
    end
  3. Chơ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.

  1. Để 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 = false
    print("You finished in " .. timePassed)
    end
  2. Để 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 = false
    print("You finished in " .. timePassed)
    if timePassed <= 10 then
    print("You get a gold medal!")
    end
    end
  3. Thử 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.

  1. Đố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 = 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!")
    end
    end
  2. Sử 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 = 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!")
    end
    end
  3. Thử 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.

  1. 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 = 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

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