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á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 elseelseif 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à else

if isGreen then
print("Đi")
elseif isYellow then
print("Chậm lại")
elseif isPedestrians then
print("Chờ")
else
print("dừng lại")
end

Trong dự án này, elseelseif đượ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 if

if finishTime < 5 then
-- Nhận huy chương vàng
end
if finishTime >= 5 and <= 10 then
-- Nhận huy chương bạc
end
if finishTime > 10 and <= 15 then
-- Nhận huy chương đồng
end

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à else

if finishTime < 5 then
-- Nhận huy chương vàng
elseif finishTime >= 5 and <= 10 then
-- Nhận huy chương bạc
elseif finishTime > 10 and <= 15 then
-- Nhận huy chương đồng
end

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.

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


    local timePassed = 0
    local finishLine = script.Parent
    local function finish()
    end
  4. Tự 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")
    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. 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.

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


    local timePassed = 0
    local finishLine = script.Parent
    local raceActive = true
    -- Chạy khi người chơi chạm vào phần vạch đích
    local function finish()
  2. 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.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid and raceActive == true then
    finish()
    end
    end
  3. Để 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 = false
    end
  4. Kiể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.

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

  1. Để 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 = false
    print("Bạn đã hoàn thành trong " .. timePassed)
    end
  2. Để 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 = 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!")
    end
    end
  3. Kiể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.

  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à 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("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!")
    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("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!")
    end
    end
  3. Kiể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.

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

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
©2026 Roblox Corporation. Roblox, logo Roblox và Powering Imagination là các nhãn hiệu đã đăng ký và chưa đăng ký của chúng tôi tại Hoa Kỳ và các quốc gia khác.