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ì nên xảy ra dưới nhiều điều kiện khác nhau. 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 nơi các vận động viên 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 độc nhất cho mỗi huy chương để trao cho người chơi, nhưng điều đó tốn rất nhiều thời gian. Lấy ví dụ, 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 lập trình dễ đọc và hiệu quả hơn 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 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 các huy chương khác nhau.

  1. Tạo một phần được neo có tên là FinishLine. Để làm cho việc kiểm tra 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 vạch đích sau khi hoàn thành kịch bản.

    Phần Vạch Đích
    Toàn bộ 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. Chơi thử và kiểm tra rằng finish() được gọi khi bạn chạm vào vạch đích.

Ngăn chặn finish() lặp lại

Hiện tại, bất cứ khi nào một người chơi chạm vào vạch đích, finish() sẽ đượ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 biến 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 mỗi 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ó đúng khô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 finish() được gọi lại, hãy đặt raceActive thành false.

    local function finish()
    print("chạm vào vạch đích")
    raceActive = false
    end
  4. Chơi thử trò chơi của bạn để kiểm tra rằng bạn chỉ thấy câu lệnh in thử nghiệm của mình 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 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 biến boolean raceActive là đúng.

  1. Ở cuối kịch bản, gõ 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. Để đo thời gian của 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 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. Chơi thử 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ổ 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 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 xem thời gian của người chơi có nhỏ hơn hoặc bằng 10 giây hay không.

    local function finish()
    raceActive = false
    print("Bạn đã hoàn thành trong " .. timePassed)
    if timePassed <= 10 then
    print("Bạn nhận huy chương vàng!")
    end
    end
  3. Chơi thử và xác nhận rằng 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 các đ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à khoảng thời gian mong muốn tiếp theo. Trong ví dụ này, khoảng thời gian 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 huy chương vàng!")
    elseif timePassed > 10 and timePassed <= 20 then
    print("Bạn nhận 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 huy chương vàng!")
    elseif timePassed > 10 and timePassed <= 20 then
    print("Bạn nhận huy chương bạc!")
    elseif timePassed > 20 and timePassed <= 30 then
    print("Bạn nhận huy chương đồng!")
    end
    end
  3. Chơi thử 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 đảm bảo 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à 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 một câu lệnh else, 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 câu lệnh 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 để nhắc nhở 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 huy chương vàng!")
    elseif timePassed > 10 and timePassed <= 20 then
    print("Bạn nhận huy chương bạc!")
    elseif timePassed > 20 and timePassed <= 30 then
    print("Bạn nhận huy chương đồng!")
    else
    print("Thử lại nhé!")
    end
    end
  2. Chơi thử để 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, và sau đó thêm nhiều điều kiện elseif cần thiết. Cuối cùng, sử dụng else để chỉ ra những gì nên xảy ra nếu tất cả các điều kiện đã cho đều 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 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 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 một cuộc đua. Bạn có thể hiển thị thời gian trên một phần sử dụng Surface GUI, như trong Tạo một cây cầu có thời gian.
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 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ọ một 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 huy chương vàng!")
elseif timePassed > 10 and timePassed <= 20 then
print("Bạn nhận huy chương bạc!")
elseif timePassed > 20 and timePassed <= 30 then
print("Bạn nhận huy chương đồng!")
else
print("Thử lại nhé!")
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 trong khi cuộc đua đang hoạt động. Cần ở dưới cùng của 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.