Çoklu Şartlar

*Bu içerik, yapay zekâ (beta) kullanılarak çevrildi ve hatalar içerebilir. Sayfayı İngilizce görüntülemek için buraya tıkla.

Kontrol yapılarının birden fazla koşula sahip olabilir. Kelimeler else ve elseif şartları, birkaç koşul için ek görüş senaryoları oluşturabilir. Syntax şu gibi görünür:

else veya başka bir ifade için dilini gösterir

if isGreen then
print("Go")
elseif isYellow then
print("Slow")
elseif isPedestrians then
print("Wait")
else
print("stop")
end

Bu projette, else ve elseif kullanıcıların bitiş süresine bağlı olarak ödüller aldığı bir parkur kursu kodlanır.

Çok Şart Kodlama

Bu proje için, her madalya için kullanıcılara verilecek benzersiz bir ifadeyi yazabilirsiniz, ancak bu çok zaman alabilir. durum, aşağıdaki hayalet kodu alın.

Tüm ifadeler

if finishTime < 5 then
-- Bir altın madalya alın
end
if finishTime >= 5 and <= 10 then
-- Bir gümüş madalya alın
end
if finishTime > 10 and <= 15 then
-- Bronz bir madalya alın
end

Bunu yapmanın daha okunabilir ve verimli bir yolu, tek bir ifadeyi kullanmak ve önceki koşullar doğru olmadığından test için alternatif koşullar sağlamak için anahtar kelimeyi elseif kullanmaktır.

else veya else'i kullanır

if finishTime < 5 then
-- Bir altın madalya alın
elseif finishTime >= 5 and <= 10 then
-- Bir gümüş madalya alın
elseif finishTime > 10 and <= 15 then
-- Bronz bir madalya alın
end

When the if/then statement runs, it'll start at the top and only run the code for the first true condition it finds.

Yarış Pisti Ayarlanıyor

Kursun başlangıcını yerleştirin ve bitirme çizgisini, ardından oyuncuyu zamanlandırmak ve farklı madalyalar vermek için bir senaryo oluşturun.

  1. FinishLine adında sabit bir parça oluşturun. Daha hızlı test yapmak için başlangıcı ve sonunu birbirine yakın yerlerde yerleştirin. Skripti bitirdikten sonra bitiş çizgisini hareket ettirebilirsiniz.

    Parçayı Tamamla
    Bütün Kurs
  2. FinishLine'da, yarışın başladığından bu yana kaç saniye olduğunu depolamak için adı RaceManager olan bir skript ekleyin. Ardından, FinishLine'ı referans etmek için bir değişken ekleyin.


    local finishLine = script.Parent
    local timePassed = 0
  3. finish() adında bir işlev oluşturun.


    local timePassed = 0
    local finishLine = script.Parent
    local function finish()
    end
  4. sahip ol:

    • Oyuncunun dokunmasıyla çalışan partTouched() adlı bir işlevi kodlayın.
    • Bitiş çizgi parçasını partTouched() 'e bağla.
    • Kodunuzu aşağıdaki örnekle karşılaştırın.

    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. Finish çizgisine dokunduğunuzda finish() çağrıldığını test edin ve kontrol edin.

Finish()'ı tekrarlamaktan kaçın

Şu anda, bir oyuncu bitiş çizgisine dokunduğunda, finish() oyuncu o bölgeye dokunana kadar sürekli olarak çağrılır.

Finish()'nin sadece bir kez çağrılmasını sağlamak için bir boz , gerçek veya falso depolayan bir değişken kullanın.

  1. Yeni bir değişken oluşturun ve onu raceActive olarak ayarlayın.


    local timePassed = 0
    local finishLine = script.Parent
    local raceActive = true
    -- Oyuncu'nun bitiş çizgisi parçasına dokunduğunda her zaman çalışır
    local function finish()
  2. YarışmaAktif'in doğru olup olmadığını kontrol etmek için ifadesine bir ikinci koşul ekleyin finish() .


    local function partTouched(otherPart)
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid and raceActive == true then
    finish()
    end
    end
  3. finish() ın tekrar çağrılmasını durdurmak için, raceActive 'yı false olarak ayarla.


    local function finish()
    print("touched the finish line")
    raceActive = false
    end
  4. Test sürümünüzü oynayarak sadece test raporunuzu bir kez gördüğünüzden emin olun.

Zamanı Takip Etme

Bir ifade gibi, bir while 루프 ayrıca koşul kullanarak görmek için ifade edilebilirliğini görebilir. Bir oyuncuyu zamanlayabilmek için, raceActive ismi gerçekten yalnızca do ifadesini kullanan bir timer oluşturun.

  1. Skriptin altındaki while raceActive == true do yazınız. Enter'a basın ve otomatik olarak tamamlayın ve end ekleyin.


    finishLine.Touched:Connect(partTouched)
    while raceActive == true do
    end
  2. Oyuncuları takip etmek için, döngüde, her saniye timePassed değişkenine 1 ekleyin. İşinizi test etmek için bir print ifadesi ekleyin.


    finishLine.Touched:Connect(partTouched)
    while raceActive == true do
    task.wait(1)
    timePassed += 1
    print(timePassed)
    end
  3. Oyunu oynayın ve görüntülenen her saniyi Kontrol Panelinde gördüğünüzden emin olun.

Oyuncuya Madalyası Verilmesi

Bitiş olarak, oyunculara sözleşme imzalamagöre farklı bir ödül madeni para vermek için ifadeyi kullanın. Bir ifadeyi kullanın ve iki else ifadeyi kullanın, oyuncunun bitiş zamanını kontrol etmek ve onlara doğru ödülü vermek için ödülü vermek için.

  1. Her madalya ödüllendirilebilir olduğunu onaylamak için print ifadelerini kullanın.


    local function finish()
    raceActive = false
    print("You finished in " .. timePassed)
    end
  2. Bir altın madalya ödüllendirmek için, timePassed ile istediğiniz bitiş zamanını karşılaştıran bir ifadeyi kodlayın. Bu örnek, oyuncunun zamanının 10 saniyeden daha az veya eşit olduğunu test eder.


    local function finish()
    raceActive = false
    print("You finished in " .. timePassed)
    if timePassed <= 10 then
    print("You get a gold medal!")
    end
    end
  3. Altın madalya ödüllendirilebildiğini test edin ve onaylayın.

Ekstra Şartlar Ekleme

Altın madalya için test yaptığınızda, elseif kelimesini kullanan diğer madalyalar için kod koşullarını test edin.

  1. Gümüş madalya için elseif ve bir sonraki istediğiniz zaman aralığını kullanın. Bu örnekte, menzil 10 saniyeden daha büyük, ancak 20 saniyeden daha az veya eşit.


    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. Bronz madalyası için aynı patterni kullanın. Aşağıdaki örnekle kodunuzu kontrol edin.


    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. Gümüş ve Bronz Madalyalar için oynatma testi.

Hata ayıklama ipuçları

Gümüş ve Bronz metalleri görmediyseniz, aşağıdakilerden birini deneyin.

  • Her bir elseifnın durumunun ardından bir then olmalıdır.
  • In partTouched() , if statement'in ikinci kondisyonunun == kullanıyor olduğundan emin olun, raceActive == true gibi.
  • Her bir elseif ın içinde olduğuna emin olun. Her bir elseif ın koşulu if/then ifade ile ilgili ilk satır arasında olmalıdır ve sonu bitirile bitmelidir.

Diğer Şartı Ekleme

Oyuncu herhangi bir madalya kazanmadıysa, teşvik etmelisiniz onları tekrar denemelerini. Bu durumda, else ifadeyi kullanabilirsiniz, which runs if başka bir şart yoksa koşulları doğruysa, bir mesaj göstermek için.

  1. Son elseif ve end altındaki bir satır başlat ve else yaz. 1> Do not1> add then. Beneath else, use a print statement to prompt them to try again.


    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. Diğer mesajı görmek için oyun testi yapın.

Özet

Kontrol yapılarının birden fazla senaryosu olabilir. Açıklamaları kullanın ve ardından gerekirse gerekirse gerekirse gerekirse gerekirse gerekirse gerekirse gerekirse gerekirse gerekirse gerekirse gerekirse gerekirse gerekirse gerekirse gerekirse gerekirse gerekirse gerekirse gerekirse gerekirse gerekirse gerekirse gerekirse gerekirse gerekirse gerekirse gerekirse gerekirse gerekirse

Üstte başlayan tüm koşullar kontrol edilecek ve sadece ilk doğru koşul kodu çalışacaktır. Kalan koşullar kontrol edilmeyecek ve kodları çalışmayacaktır.

Projeyi bitirdikten sonra, projeye ekstra birkaç yol ekleyerek yeni öğeler ekleyebilirsiniz.

  • Oyuncuların yarışı bitirdiğinde başlangıç çizgisini dokunarak tekrarlayabilmesi için kod ekleyin.
  • Bir yarış sırasında zamanı göstermeyi tasarla. Ayrıca, bir Zaman Köprüsü Oluşturma Eğitimi gibi bir parçada zamanı gösterebilirsin.
Completed script

local timePassed = 0
local finishLine = script.Parent
-- Yarış bittiğinde bitiş ve zamanlayıcıyı tekrar çağırmayı önlemek için kullanılır
local raceActive = true
-- Oyuncu bitiş çizgisine dokunduğunda çalışır ve onlara bir ödül gösterir
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
-- Bir yarış aktifken bir oyuncunun bir parçaya dokunup dokunmadığını kontrol eder
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)
-- Yarış aktifken yarış süresini takip eder. Yazılımın altında olması gerekir.
while raceActive == true do
task.wait(1)
timePassed += 1
print(timePassed)
end