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, birden fazla koşul altında ne olacağına ilişkin ek senaryolar oluşturabilir. Söz dizimi şu şekildedir:

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, koşu sürelerine bağlı olarak koşuculara ödüller veren bir parkur oluşturmak için else ve elseif kullanılır.

Birden fazla koşulu kodlayın

Bu proje için her madalya için ayrı bir if ifadesi yazabilirsiniz, ancak bu çok zaman alır. Mesela, aşağıdaki hayali kodu göz önünde bulundurun.

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 daha okunabilir ve verimli bir şekilde kodlamak için tek bir if ifadesi kullanabilirsiniz ve önceki koşullar doğru değilse alternatif koşullar sağlamak için elseif anahtar kelimesini kullanabilirsiniz.

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, üstten başlayacak ve bulduğu ilk doğru koşul için kodu çalıştıracaktır.

Yarış parkurunu kurma

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

  1. FinishLine adında bir sabit parça oluşturun. Test süresini kısaltmak için başlangıç ve bitişi birbirine yakın yerleştirin. Script'i bitirdikten sonra bitiş çizgisini taşıyabilirsiniz.

    Bitiş Parçası
    Tüm Parkur
  2. FinishLine içinde RaceManager adında bir script ekleyin. Ardından, yarışın başladığı zamandan beri geçen süreyi depolamak için bir değişken ve FinishLine'a referans vermek 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. Kendiniz:

    • Bir oyuncunun ona dokunduğunda finish() fonksiyonunu çalıştıran partTouched() adında bir fonksiyon kodlayın.
    • Bitiş çizgisi parçasını partTouched()'a 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 testi yapın ve finish()'in bitiş çizgisine dokunduğunuzda çağrıldığını kontrol edin.

finish()'in tekrar etmesini engelleyin

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

finish()'in sadece bir kez çağrılmasını sağlamak için boolean adlı bir değişken kullanın, bu değişken doğru veya yanlış depolar.

  1. raceActive adında yeni bir değişken oluşturun ve bunu 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() çağrılmadan önce raceActive'nın 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'yi false yapın.


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

Zamanı takip et

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

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


    finishLine.Touched:Connect(partTouched)
    while raceActive == true do
    end
  2. Oyuncuların zamanını takip etmek 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. Oyun deneyiminizi test edin ve her saniyenin Çıktı penceresinde görüntülendiğini kontrol edin.

Oyuncu madalyalarını ver

Son olarak, oyuncuların performansına göre farklı bir ödül madalyası vermek için bir if ifadesi kullanarak birden fazla koşulu kontrol edin. Oyuncunun bitiş süresini 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ş süreniz " .. timePassed)
    end
  2. Altın madalya vermek için, timePassed'ı istenen bitiş süresi ile karşılaştıran bir if ifadesi kodlayın. Bu örnek, oyuncunun süresinin 10 saniyeden az veya buna eşit olup olmadığını kontrol eder.


    local function finish()
    raceActive = false
    print("Bitiş süreniz " .. timePassed)
    if timePassed <= 10 then
    print("Altın madalya kazanıyorsunuz!")
    end
    end
  3. Oyun testi yapın ve altın madalyanın verilip verilemeyeceğini doğrulayın.

Ek koşullar ekleyin

Artık altın madalya için testi gerçekleştirdiniz, diğer madalyalar için elseif anahtar kelimesini kullanarak koşullar kodlayın.

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


    local function finish()
    raceActive = false
    print("Bitiş süreniz " .. timePassed)
    if timePassed <= 10 then
    print("Altın madalya kazanıyorsunuz!")
    elseif timePassed > 10 and timePassed <= 20 then
    print("Gümüş madalya kazanıyorsunuz!")
    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ş süreniz " .. timePassed)
    if timePassed <= 10 then
    print("Altın madalya kazanıyorsunuz!")
    elseif timePassed > 10 and timePassed <= 20 then
    print("Gümüş madalya kazanıyorsunuz!")
    elseif timePassed > 20 and timePassed <= 30 then
    print("Bronz madalya kazanıyorsunuz!")
    end
    end
  3. Gümüş ve bronz madalyaları test edin.

Hata 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, tıpkı raceActive == true gibi.
  • Her elseif'in kapsamda olduğundan emin olun. Her elseif koşulu, if/then ifadesinin ilk satırı ile son end'i 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ışan bir else ifadesi kullanarak onlara bir mesaj gösterebilirsiniz.

  1. Son elseif'den hemen önce yeni bir satır başlatıp else yazın. then eklemeyin. else'in altına, onları tekrar denemeye teşvik eden bir print ifadesi kullanın.


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

Özet

Kontrol yapıları birden fazla senaryo içerebilir. İlk kontrol ifadesini ayarlamak için if ifadeleri kullanın ve ardından gerekli olduğu kadar çok elseif koşulu ekleyin. Son olarak, tüm verilen koşullar yanlışsa ne olması gerektiğini belirtmek için else kullanın.

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

Projeyi tamamladıktan sonra, script'i birkaç ekstra yolla genişletebilirsiniz.

  • Oyuncuların bitiş çizgisine dokunarak yarışı tekrar etmelerini sağlayacak kod ekleyin.
  • Bir yarış sırasında zaman bilgisini görüntüleyecek bir yol tasarlayın. Zamanı bir part üzerinde bir Surface GUI kullanarak gösterebilirsiniz; bu, Zamanlı Köprü Oluşturma eğitiminde.
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ş süreniz " .. timePassed)
if timePassed <= 10 then
print("Altın madalya kazanıyorsunuz!")
elseif timePassed > 10 and timePassed <= 20 then
print("Gümüş madalya kazanıyorsunuz!")
elseif timePassed > 20 and timePassed <= 30 then
print("Bronz madalya kazanıyorsunuz!")
else
print("Tekrar dene!")
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ış süresini takip eder. Script'in sonunda 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.