Birden fazla 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ı birden fazla koşula sahip olabilir. else ve elseif anahtar kelimeleri, birkaç koşul altında ne olacağını belirlemek için ek senaryolar oluşturabilir. Sözdizimi şöyle görünür:

elseif ve else için sözdizimini gösterir
if isGreen then
print("Git")
elseif isYellow then
print("Yavaşla")
elseif isPedestrians then
print("Bekle")
else
print("dur")
end

Bu projede, else ve elseif, koşucuların bitiş zamanına bağlı olarak ödüller aldığı bir parkur kursunu kodlamak için kullanılır.

Birden fazla koşulu kodlayın

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

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

Bunu kodlamanın daha okunabilir ve verimli bir yolu, tek bir if ifadesi kullanmak ve önceki koşullar doğru değilse alternatif koşullar sağlamak için elseif anahtar kelimesini kullanmaktır.

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

if/then ifadesi çalıştığında, en üstten başlayacak ve bulduğu ilk doğru koşul için kodu çalıştıracaktır.

Yarış parkurunu ayarlayın

Öncelikle parkurun başlangıç noktasını ve bitiş çizgisini yerleştirin, ardından oyuncunun zamanını ölçmek ve farklı madalyalar vermek için bir script oluşturun.

  1. FinishLine adında bir sabit parça oluşturun. Test etmeyi hızlandırmak için başlangıç ve bitişi birbirine yakın yerleştirin. Scripti bitirdikten sonra bitiş çizgisini taşıyabilirsiniz.

    Bitiş Parçası
    Tüm Parkur
  2. FinishLine'da RaceManager adında bir script ekleyin. Ardından, yarışın başladığı zamandan itibaren geçen süreyi saklamak için bir değişken ve FinishLine'ı referans almak için ikinci bir değişken ekleyin.

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

    local timePassed = 0
    local finishLine = script.Parent
    local function finish()
    end
  4. Kendi başınıza:

    • Bir oyuncu ona dokunduğunda finish() fonksiyonunu çalıştıran partTouched() adında bir fonksiyon kodlayın.
    • Bitiş çizgisi parçasını partTouched() ile bağlayın.
    • Kodunuzu aşağıdaki örnekle karşılaştırın.
    local function finish()
    print("bitiş çizgisine dokunuldu")
    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. Oyun test edin ve bitiş çizgisine dokunduğunuzda finish()'in çağrıldığını kontrol edin.

finish()'in tekrar etmesini engelleyin

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

finish()'in yalnızca bir kez çağrılmasını sağlamak için boolean kullanın, bu, doğru veya yanlış değerini saklayan bir değişkendir.

  1. raceActive adında yeni bir değişken oluşturun ve true olarak ayarlayın.

    local timePassed = 0
    local finishLine = script.Parent
    local raceActive = true
    -- Oyuncu bitiş çizgisine dokunduğunda çalışır
    local function finish()
  2. finish()'i çağırmadan önce raceActive'in doğru olup olmadığını kontrol etmek için if ifadesine ikinci bir koşul ekleyin.

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

    local function finish()
    print("bitiş çizgisine dokunuldu")
    raceActive = false
    end
  4. Oyun test edin ve test print ifadenizi yalnızca bir kez gördüğünüzü kontrol edin.

Zamanı takip edin

Bir if ifadesi gibi, bir while döngüsü de çalışıp çalışmayacağını görmek için bir koşul kullanabilir. Oyuncunun zamanını ölçmek için, raceActive boolean'ı doğru olduğunda yalnızca çalışan bir while true do döngüsü oluşturun.

  1. Scriptin en altına while raceActive == true do yazın. Otomatik tamamlama için Enter tuşuna basın ve end ekleyin.

    finishLine.Touched:Connect(partTouched)
    while raceActive == true do
    end
  2. Oyuncuları zamanlamak için, döngüde her saniyede bir timePassed değişkenine 1 ekleyin. Çalışmanızı 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 test edin ve her saniyenin Çıktı penceresinde görüntülendiğini kontrol edin.

Oyuncu madalyalarını verin

Son olarak, oyunculara performanslarına göre farklı ödül madalyaları vermek için bir if ifadesi kullanın. Oyuncunun bitiş zamanını kontrol etmek ve onlara doğru madalyayı vermek için bir if ifadesi ve iki elseif ifadesi kullanın.

  1. Her madalyanın verilebileceğini doğrulamak için print ifadeleri kullanın.

    local function finish()
    raceActive = false
    print("Bitiş zamanınız " .. timePassed)
    end
  2. Altın madalya vermek için, timePassed'i istenen bitiş zamanı ile karşılaştıran bir if ifadesi kodlayın. Bu örnek, oyuncunun zamanının 10 saniyeden az veya eşit olup olmadığını kontrol eder.

    local function finish()
    raceActive = false
    print("Bitiş zamanınız " .. timePassed)
    if timePassed <= 10 then
    print("Altın madalya kazandınız!")
    end
    end
  3. Oyun test edin ve altın madalyanın verilebildiğini doğrulayın.

Ek koşullar ekleyin

Artık altın madalya için test ettiğinize göre, diğer madalyalar için koşullar kodlayın ve elseif anahtar kelimesini kullanın.

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

    local function finish()
    raceActive = false
    print("Bitiş zamanınız " .. timePassed)
    if timePassed <= 10 then
    print("Altın madalya kazandınız!")
    elseif timePassed > 10 and timePassed <= 20 then
    print("Gümüş madalya kazandınız!")
    end
    end
  2. Bronz madalya için aynı deseni kullanın. Kodunuzu aşağıdaki örnekle kontrol edin.

    local function finish()
    raceActive = false
    print("Bitiş zamanınız " .. timePassed)
    if timePassed <= 10 then
    print("Altın madalya kazandınız!")
    elseif timePassed > 10 and timePassed <= 20 then
    print("Gümüş madalya kazandınız!")
    elseif timePassed > 20 and timePassed <= 30 then
    print("Bronz madalya kazandınız!")
    end
    end
  3. Gümüş ve bronz madalyalar için oyun test edin.

Sorun giderme ipuçları

Eğer gümüş ve bronz madalyaların görünmediğini görüyorsanız, aşağıdakilerden birini deneyin.

  • Her elseif koşulunun ardından bir then olmalıdır.
  • partTouched() içinde, if ifadesinin ikinci koşulunun == kullandığından emin olun, raceActive == true gibi.
  • Her elseif'in kapsamda olduğundan emin olun. Her elseif koşulu, if/then ifadesinin ilk satırı ile son endi arasında olmalıdır.

else koşulunu ekleyin

Eğer oyuncu hiçbir madalya kazanmadıysa, onları tekrar denemeye teşvik etmelisiniz. Bu durumda, hiçbir diğer koşul doğru değilse çalışacak bir else ifadesi kullanarak onlara bir mesaj gösterebilirsiniz.

  1. Son elseif'in altına ve end'in üstüne yeni bir satır açın ve else yazın. then eklemeyin. else'in altına, tekrar denemeleri için bir print ifadesi kullanın.

    local function finish()
    raceActive = false
    print("Bitiş zamanınız " .. timePassed)
    if timePassed <= 10 then
    print("Altın madalya kazandınız!")
    elseif timePassed > 10 and timePassed <= 20 then
    print("Gümüş madalya kazandınız!")
    elseif timePassed > 20 and timePassed <= 30 then
    print("Bronz madalya kazandınız!")
    else
    print("Tekrar deneyin!")
    end
    end
  2. else mesajını görmek için oyun test edin.

Özet

Kontrol yapıları birden fazla senaryoya sahip olabilir. İlk durumu kontrol etmek için if ifadelerini kullanın ve ardından gerekli kadar elseif koşulu ekleyin. Son olarak, tüm verilen koşullar yanlışsa ne olacağını belirtmek için else kullanın.

En üstten başlayarak, tüm koşullar kontrol edilecek ve yalnızca ilk doğru koşul kodu çalıştıracaktır. Kalan koşullar kontrol edilmeyecek ve kodları çalıştırılmayacaktır.

Projeyi bitirdikten sonra, scripti yeni öğeler eklemek için birkaç ekstra yolla genişletebilirsiniz.

  • Oyuncuların bitiş çizgisine dokunarak yarışı tekrar etmelerini sağlayacak kod ekleyin.
  • Bir yarış sırasında zamanı görüntülemenin bir yolunu tasarlayın. Zamanı bir parçada bir Surface GUI kullanarak görüntüleyebilirsiniz, örneğin Zamanlı Köprü Oluşturma eğitimi.
Tamamlanmış script
local timePassed = 0
local finishLine = script.Parent
-- Yarış sona erdiğinde finish() ve zamanlayıcının tekrar etmesini engellemek 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("Bitiş zamanınız " .. timePassed)
if timePassed <= 10 then
print("Altın madalya kazandınız!")
elseif timePassed > 10 and timePassed <= 20 then
print("Gümüş madalya kazandınız!")
elseif timePassed > 20 and timePassed <= 30 then
print("Bronz madalya kazandınız!")
else
print("Tekrar deneyin!")
end
end
-- Yarış aktifken bir oyuncunun 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ış zamanını takip eder. Scriptin en altında olmalıdır.
while raceActive == true do
task.wait(1)
timePassed += 1
print(timePassed)
end
©2026 Roblox Corporation. Roblox, the Roblox logo and Powering Imagination are among our registered and unregistered trademarks in the U.S. and other countries.