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