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österirif isGreen thenprint("Git")elseif isYellow thenprint("Yavaşla")elseif isPedestrians thenprint("Bekle")elseprint("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 ifadeleriif finishTime < 5 then-- Altın madalya alendif finishTime >= 5 and <= 10 then-- Gümüş madalya alendif finishTime > 10 and <= 15 then-- Bronz madalya alend
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ırif finishTime < 5 then-- Altın madalya alelseif finishTime >= 5 and <= 10 then-- Gümüş madalya alelseif finishTime > 10 and <= 15 then-- Bronz madalya alend
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.
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 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.Parentlocal timePassed = 0finish() adında bir fonksiyon oluşturun.
local timePassed = 0local finishLine = script.Parentlocal function finish()endKendiniz:
- 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")endlocal function partTouched(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenfinish()endendfinishLine.Touched:Connect(partTouched)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.
raceActive adında yeni bir değişken oluşturun ve bunu true olarak ayarlayın.
local timePassed = 0local finishLine = script.Parentlocal raceActive = true-- Oyuncu bitiş çizgisine dokunduğunda çalışırlocal function finish()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.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid and raceActive == true thenfinish()endendfinish()'in tekrar çağrılmasını durdurmak için raceActive'yi false yapın.
local function finish()print("bitiş çizgisine dokunuldu")raceActive = falseendOyun 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.
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 doendOyuncuları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 dotask.wait(1)timePassed += 1print(timePassed)endOyun 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.
Her madalyanın verilebileceğini doğrulamak için print ifadeleri kullanın.
local function finish()raceActive = falseprint("Bitiş süreniz " .. timePassed)endAltı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 = falseprint("Bitiş süreniz " .. timePassed)if timePassed <= 10 thenprint("Altın madalya kazanıyorsunuz!")endendOyun 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.
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 = falseprint("Bitiş süreniz " .. timePassed)if timePassed <= 10 thenprint("Altın madalya kazanıyorsunuz!")elseif timePassed > 10 and timePassed <= 20 thenprint("Gümüş madalya kazanıyorsunuz!")endendBronz madalya için aynı deseni kullanın. Kodunuzu aşağıdaki örnekle kontrol edin.
local function finish()raceActive = falseprint("Bitiş süreniz " .. timePassed)if timePassed <= 10 thenprint("Altın madalya kazanıyorsunuz!")elseif timePassed > 10 and timePassed <= 20 thenprint("Gümüş madalya kazanıyorsunuz!")elseif timePassed > 20 and timePassed <= 30 thenprint("Bronz madalya kazanıyorsunuz!")endendGü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.
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 = falseprint("Bitiş süreniz " .. timePassed)if timePassed <= 10 thenprint("Altın madalya kazanıyorsunuz!")elseif timePassed > 10 and timePassed <= 20 thenprint("Gümüş madalya kazanıyorsunuz!")elseif timePassed > 20 and timePassed <= 30 thenprint("Bronz madalya kazanıyorsunuz!")elseprint("Tekrar dene!")endendelse 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