Çok sayıda koşul

*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şulu olabilir.Anahtar kelimeler else ve elseif birkaç koşul altında neler olması gerektiğine dair ek senaryolar oluşturabilir.Syntaxsi şöyle görünüyor:

dp ve diğer için sentaks gösterir

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

Bu projede, else ve elseif parkur kursunu kodlamak için kullanılır ve koşucular bitiş sürelerine bağlı olarak ödül alır.

Birden fazla koşul kodu

Bu proje için, oyunculara ödül vermek için her madalya için benzersiz bir if ifadesi yazabilirsiniz, ancak bu çok fazla zaman alır.durum, aşağıdaki hayali kodu alın.

Tüm if ifadeleri

if finishTime < 5 then
-- Altın madalya alın
end
if finishTime >= 5 and <= 10 then
-- Gümüş madalya alın
end
if finishTime > 10 and <= 15 then
-- Bronz madalya alın
end

Bunu kodlamanın daha okunabilir ve verimli bir yolu, tek bir if ifadesini kullanmak ve önceki koşulların doğru olmadığını test etmek için anahtar kelime elseif kullanmaktır.

Kullanır elif ve başka ve diğer

if finishTime < 5 then
-- Altın madalya alın
elseif finishTime >= 5 and <= 10 then
-- Gümüş madalya alın
elseif finishTime > 10 and <= 15 then
-- Bronz madalya alın
end

Eğer/sonra ifadesi çalıştığında, en başta başlayacak ve sadece bulduğu ilk doğru koşul için kodu çalıştıracak.

Yarış kursunu kurun

Kursun başlangıç noktasını ve bitiş çizgisini yerleştirerek başlayın ve ardından oyuncuyu zamanlayan ve farklı madalyaları ödüllendiren bir senaryo oluşturun.

  1. Bitirme Çizgisi adında sabitlenmiş bir parça oluştur.Testi hızlandırmak için, başlangıcı ve sonu yakınlaştırın.Senaryoyu bitirdikten sonra bitiş çizgisini hareket ettirebilirsiniz.

    Parçayı Bitir
    >

    Tüm Kurs
    >

  2. FinishLine'da, YarışYöneticisi adlı bir senaryo ekleyin.Sonra, yarış başladığından beri kaç saniye geçtiğini depolayan bir değişken ve FinishLine'a referans veren ikinci bir değişken ekleyin.


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


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

    • Bir oyuncu buna dokunduğunda çalışan partTouched() isimli bir işlev kodlayın finish() .
    • Bitirme hattı parçasını partTouched() 'ye bağlayın.
    • Kodunuzu aşağıdaki örnek ile 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. Oynatma ve bitiş çizgisine dokunduğunuzda finish() çağrıldığını kontrol edin.

Finish()'un tekrarlanmasını engelle

Şu anda, bir oyuncu bitiş çizgisine dokunduğunda, finish() oyuncu parçaya dokunduğu sürece sürekli olarak çağrılır.

Finish()'un yalnızca bir kez çağrılmasını sağlamak için booleen veya doğru veya yanlış depolayan bir değişken kullanın.

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


    local timePassed = 0
    local finishLine = script.Parent
    local raceActive = true
    -- Oyuncu bitiş çizgisi parçasına dokunduğunda her zaman çalışır
    local function finish()
  2. if ifadesine ikinci bir koşul ekleyerek yarışAktif'in önce finish() çağrılıp çağrılmadığını kontrol edin.


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


    local function finish()
    print("touched the finish line")
    raceActive = false
    end
  4. Sadece bir kez test yazdırma ifadesini gördüğünüzden emin olmak için oyununuzu test edin.

Zamanı takip et

Bir if ifadesi gibi, bir while döngüsü de çalışması gerektiğini görmek için bir koşulu kullanabilir.oyuncuzamanlamak için, sadece raceActive booleen true olduğunda çalışan bir while döngüsü kullanarak bir zamanlayıcı oluşturun.

  1. Senaryonun en altında, while raceActive == true do yazın. Otomatik olarak tamamlamak ve end eklemek için Enter tuşuna basın.


    finishLine.Touched:Connect(partTouched)
    while raceActive == true do
    end
  2. Oyuncuları zamanlamak için, döngüde, her saniye bir kez timePassed değişkenine 1 ekleyin. Çalışmanızı test etmek için bir yazdırma ifadesi ekleyin.


    finishLine.Touched:Connect(partTouched)
    while raceActive == true do
    task.wait(1)
    timePassed += 1
    print(timePassed)
    end
  3. Oyunu oynayın ve her saniye görüntüsünün Çıktı penceresinde gösterildiğinden emin olun.

Ödül oyuncu madalyaları

Bitirmek için, oyunculara sözleşme imzalamadayalı olarak farklı bir ödül madalyası vermek için çok sayıda koşullu bir if ifadesi kullanın.Oyuncunun bitiş zamanını kontrol etmek ve onlara doğru madalyayı vermek için bir if ifadesi ve iki elif ifadesi kullanın.

  1. Her madalya verilebileceğini onaylamak için, yazıcı ifadelerini kullanın.


    local function finish()
    raceActive = false
    print("You finished in " .. timePassed)
    end
  2. Bir altın madalya ödülü vermek için, timePassed istenen bitiş süresine karşı karşılaştıran bir if ifadesi kodlayın.Bu örnek, oyuncunun süresinin 10 saniyeden az veya eşit olup olmadığını kontrol 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 madalyanın verilebileceğini test et ve onayla.

Ek koşullar ekleyin

Artık altın madalya için test ettiniz, diğer madalyalar için kullanılan elseif anahtar kelime ile kod koşulları.

  1. Gümüş madalya için, elseif ve bir sonraki istenen zaman aralığını kullanın.Bu örnekte, menzil 10 saniyeden büyük, ancak 20 saniyeden 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 madalya için aynı modeli kullanın. Kodunuzu aşağıdaki örnek ile 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 oyun testi.

Sorun giderme ipuçları

Gümüş ve bronz metaller görünmüyorsa, aşağıdan birini deneyin.

  • Her elseif koşulundan sonra bir sonra gelmelidir.
  • In partTouched() , if ifadesinin ikinci koşulunun == gibi kullandığından emin olun, örneğin raceActive == true .
  • Her elseif birinin sınırında olduğundan emin olun. Her elseif koşul if/then ifadesinin ilk satırından ve son end sırasından olmalıdır.

Diğer koşulu ekleyin

Oyuncu hiçbir madalyayı kazanmadıysa, tekrar denemesini teşvik etmelisiniz.Bu durumda, else ifadesini kullanarak, başka koşul yoksa gerçek olursa bir mesaj gösterebilirsiniz.

  1. Son elseif ve üstünde end , yeni bir satır başlat ve else yaz. Sonra eklemesiniz .Diğerlerinin altında, yeniden denemelerini istemek için bir yazıcı ifadesi kullanın.


    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 oynatma testi yapın.

Özet

Kontrol yapılarının birden fazla senaryosu olabilir.Kontrol etmek için başlangıç ifadesini ayarlamak ve ardından gerekli sayıda elseif koşul eklemek için ifadeleri kullanın.Son olarak, tüm verilen koşullar yanlışsa ne olması gerektiğini belirtmek için else kullanın.

Tepeden başlayarak, tüm koşullar kontrol edilecek ve sadece ilk gerçek koşul kodu çalıştıracak.Kalan koşullar kontrol edilmeyecek ve kodları çalışmayacak.

Projeyi bitirdikten sonra, birkaç ekstra yol ile yeni elemanlar eklemek için kodu genişletebilirsiniz.

  • Oyuncuların bitirirken başlangıç çizgisine dokunarak yarışı tekrarlayabilmeleri için kod ekleyin.
  • Yarış sırasında zamanı görüntülemenin bir yolunu tasarlayın.Bir parçada bir Surface GUI kullanarak zamanı görüntüleyebilirsiniz, örneğin Zamanlı Köprü oluşturma eğitiminde.
Completed script

local timePassed = 0
local finishLine = script.Parent
-- Yarış sona erdiğinde bit() ve zamanlayıcının tekrarlanmasını engellemek için kullanılır
local raceActive = true
-- Oyuncu bitiş çizgisine dokunduğunda ve onlara bir ödül gösterdiğinde çalışır
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 oyuncu bir yarış aktif olduğunda parçaya dokunduğunu 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 izler. Senaryonun en altında olması gerekir.
while raceActive == true do
task.wait(1)
timePassed += 1
print(timePassed)
end