‫Hey, tekrar hoş geldin.
‫Bu videoda, kazanma ve kaybetme koşulları ile ilgileniyoruz.
‫Bu, bu oyun projesinde ele alacağımız son şeylerden biri.
‫Şimdi bölüm planımıza bir göz atalım.
‫Şimdi, bölüm planımızdaki ilk beş maddeyi zaten kontrol ettik ve son ikisi özel efektler
‫ve kazanma ve kaybetme koşulları.
‫Ve bu son ikisini değiştirip kazanma ve kaybetme koşullarını ele almak istiyorum çünkü
‫bu oyun programlama mantığımızın sonuncusu ve özel efektler kozmetik ve daha çok son rötuşlar gibi, bu
‫yüzden bunları en sonda ele alabiliriz.
‫Bu videoda bir game over fonksiyonu oluşturacağız, böylece oyunun ne zaman kazanıldığını ya da kaybedildiğini
‫bileceğiz.
‫Ve oyunu kazanmak için dünyadaki kule sayısını saymamız gerekecek, çünkü tüm
‫kuleleri yok ettiğimizde oyunu kazandığımızı bileceğiz.
‫Ve eğer tankın kendisi yok olursa, o zaman bunu kaybetme koşulu olarak kabul edebiliriz.
‫Oyun moduna geri döndüm ve yapmak istediğim ilk şey başka bir blueprint uygulanabilir olay
‫yaratmak.
‫C++'dan çağırabileceğimiz bu start game fonksiyonuna sahibiz, ancak mantığını oyun modunda uyguluyoruz.
‫Blueprint Uygulanabilir Etkinlik sayesinde, oyunu kaybetmek için bunlardan bir tane daha oluşturmak istiyorum.
‫Bu yüzden Game Over adında bir void fonksiyon oluşturacağım.
‫Bunun için B one game adında bir boolean giriş parametresi almak istiyorum.
‫Ve tabii ki bu blueprint ile uygulanabilir bir olay olacak çünkü bu fonksiyonla halletmek
‫istediğim tek şey oyunu kaybettiğimizi veya kazandığımızı göstermek ve bunu blueprint'lerden yapabiliriz.
‫Yani bir oyun bitirme fonksiyonumuz var.
‫Şimdi bu fonksiyonu ne zaman çağırmamız gerektiğini bilmemiz gerekiyor.
‫Öncelikle, oyunu kaybettiğimizde bu fonksiyonu çağırabileceğimizi biliyoruz
‫ve bu da tank öldüğünde olacak.
‫Şimdi tune tanks oyun modu CP'de aktör öldü fonksiyonumuza girelim ve eğer ölen aktör tank ise, tankın
‫yok edilmesini ele aldığımızı ve etkin durumu false olarak ayarladığımızı görelim.
‫Burada yapabileceğimiz bir başka şey de oyunu basitçe game over diyerek sonlandırmaktır ve bu boolean bunun için false olarak geçebileceğimiz
‫bir oyun olabilir.
‫Bu da en azından C++ açısından oyunu kaybetmenin önüne geçer.
‫Şimdi maçı ne zaman kazanmamız gerektiğini bilmemiz gerekiyor.
‫Şimdi burada bir aktör öldü.
‫Ölü aktör bir kuleye fırlatılabiliyorsa, bir kuleyi yok ettiğimizi biliriz.
‫Şimdi, burası bir kule sayısını veya dünyada şu anda kaç kule olduğunu takip eden tamsayı türünde bir değişkeni
‫güncellemek için mükemmel bir yer olacaktır.
‫Şimdi.
‫Bunu yapmak için kule sayısını takip edecek bir değişkene ihtiyacımız var, böylece H dosyasına
‫özel bir değişken ekleyebiliriz.
‫Ve bunu burada yapmak istiyorum.
‫Bu yüzden bir INT 32 oluşturacağım ve buna hedef kuleler adını vereceğim.
‫Şimdi bunu sıfır değeriyle başlatabiliriz, ancak kule sayısı azaldıkça bunu güncellememiz
‫gerekir.
‫Ayrıca bunu dünyada bulunan kule sayısına göre ayarlamamız gerekiyor.
‫Şimdi bunu dört olarak kodlayabiliriz, ancak seviyelerimize daha fazla kule eklemeye başladığımızda ne olur?
‫O zaman işler biraz daha karmaşıklaşıyor.
‫Bunun yerine dünyada kaç tane kule olduğunu görmek istiyorum.
‫Şimdi, bunun için 32 döndüren bir fonksiyon oluşturabilirim ve bu fonksiyon dünyada kaç tane kule olduğunu
‫bulabilir ve sayıyı döndürebilir.
‫Bu fonksiyonu çağıracağım ve hedef kule sayısını alacağım.
‫Şimdi devam edelim ve CP dosyasında bu fonksiyona bir gövde verelim.
‫En alta kadar inip fonksiyon gövdesini oluşturacağım ve sınıf adını fonksiyon adından
‫önce koymayı unutmayacağım.
‫Şimdi bu bir son 32 döndürecek ve kaç kule olduğunu nasıl bulacağımıza karar vermemiz gerekiyor.
‫Şimdi oyun statiğinde sınıfın Tüm Aktörlerini Al adında bir işlev var.
‫İşte belgeler.
‫Belirtilen sınıftaki dünyadaki tüm aktörleri bul diyor.
‫Bu yüzden belirli bir sınıf belirtmemiz gerekiyor.
‫Şimdi bu fonksiyonun üç girişi vardır.
‫Birincisi bir dünya bağlamı nesnesidir.
‫Bu çok kolay.
‫Bununla nasıl başa çıkacağımızı biliyoruz.
‫Ancak bundan sonra bir aktörün PT alt sınıfına sahibiz ve buna Aktör Sınıfı deniyor.
‫Şimdi bir PT alt sınıfı gerektiren fonksiyonların girdi olarak bir u sınıfı kabul edebildiğini ve üçüncü parametrenin
‫bir T dizisi olduğunu gördük.
‫Aktör işaretçilerinden oluşan bir t dizisi gerektirir ve bu bir referans olarak aktarılır ve bir const referansı
‫değildir, bu da bu işlevin act adı verilen bu giriş parametresini değiştirebileceğini gösterir.
‫Durumun böyle olduğuna dair bir başka ipucu da aktörlere seslenilmiş olmasıdır.
‫Bu bir out parametresidir, yani onu içeri aktarırız ve fonksiyon çağrıldıktan sonra fonksiyon tarafından içine
‫konulan değerlere sahip olur.
‫Yani bunu fonksiyon için bir tür çıktı olarak düşünebiliriz.
‫Şimdi burada parametreler için aktör sınıfının bulunacak aktörün sınıfı olduğu belirtilmelidir, aksi takdirde sonuç
‫dizisi boş olacaktır.
‫Tüm kuleleri bulmak istiyoruz ve out actors, belirtilen sınıftaki aktörlerin bir çıktı dizisidir.
‫Bu fonksiyonu çağırıp bir dizi aktardığımızda, fonksiyon tamamlandığında, bu dizi
‫belirtilen sınıfın dünyasındaki tüm aktörlerin işaretçilerini içerecektir.
‫Dolayısıyla, bu işlevin bir dünya bağlamı nesnesi gerektirdiğini biliyoruz.
‫Şimdi, eğer bunu oyun modunun içinden çağıracaksak, bunu bir sonraki bölüme aktarabiliriz.
‫A aktörünü belirtmek için PT alt sınıfına ihtiyacımız var ve bunun yeni bir sınıf işaretçisi olabileceğini biliyoruz.
‫Şimdi bulunacak sınıfı belirtmemiz gerekiyor.
‫Eğer bir aktör belirtirsek, dünyadaki her aktörün işaretçileriyle dolu büyük bir dizi elde ederiz.
‫Ama tüm aktörlere ihtiyacımız yok.
‫Sadece kulelere ihtiyacımız var, böylece bize A Tower C++ sınıfını temsil eden yeni bir sınıf döndürecek olan bir tower
‫static sınıfı kullanabiliriz.
‫Şimdi üçüncü parametre bir aktör işaretçilerinden oluşan bir T dizisidir.
‫Dolayısıyla, köşeli parantezler içinde a aktör işaretçisini belirterek T dizisi türünde bir yerel değişken oluşturursak,
‫o zaman size oyun statiği diyebiliriz.
‫Bu üç girdide geçen sınıfın tüm aktörlerini alın ve bu eylemin sonucu, towers dizimizin
‫dünyamızdaki tüm kulelere işaretçiler içermesi olacaktır.
‫Şimdi tepsi, hepsi aynı türü paylaştığı sürece bir dizi öğe içerebilen güzel bir kap
‫sınıfıdır.
‫Ve bu sınıf, öğeleri bir tepside saklarken kullanabileceğimiz oldukça fazla fonksiyona sahiptir.
‫Şimdi aşağıya doğru kaydıracağım ve size burada Num Short four number adlı bu fonksiyonu göstereceğim ve
‫dizideki eleman sayısını döndürdüğünü söylüyor.
‫Böylece, dünyadaki tüm kulelere sahip olduğumuzda dizimizdeki eleman sayısını elde etmek için bu fonksiyonu kullanabiliriz.
‫Yani Tower'ın num'unu çağırırsak, bunu fonksiyonumuzun dönüş değeri olarak kullanabiliriz.
‫Ve gördüğümüz gibi, get target tower count adını verdiğimiz bu fonksiyon için geri dönüş değerimizi n 32 olarak
‫belirledik, kulemizin dizisindeki eleman sayısını döndürebiliriz.
‫Bu nedenle, bu hedef kule sayısı alma işlevini uygulamanız için size meydan okumak istiyorum.
‫Bu yüzden A aktör tipinde yerel bir t dizisi oluşturun.
‫Buna kule ya da istediğiniz herhangi bir şey diyebilirsiniz.
‫Şimdi you game, play statics fonksiyonunu kullanın, sınıfın tüm aktörlerini alın ve doğru giriş parametrelerini geçirdiğinizden
‫emin olun.
‫Şimdi, bu fonksiyonu çağırdıktan sonra, tepsiniz dünyamızdaki tüm kulelerin işaretçilerini
‫içerecektir, böylece tepsi sınıfına ait olan num fonksiyonunu kullanarak kule sayısını döndürebilirsiniz.
‫Bu yüzden videoyu duraklatın ve uygulayın.
‫Hedef kule sayısını şimdi alın.
‫Tamam.
‫İşte hedef kule sayısı.
‫Şimdi, yapacağım ilk şey, bu dizinin saklaması gereken öğe türü olarak bir aktör işaretçisi belirterek
‫yerel bir t dizisi oluşturmaktır.
‫Ve şimdi bu kuleleri çağıracağım, size gameplay statics demem gerekiyor, bu yüzden bu başlığın dahil edildiğinden
‫emin olmam gerekiyor.
‫Diğer bazı işlevlerimizde kullandığımız için şimdi öyle olduğunu görüyorum, ancak bu kontrolü yapmak iyi
‫olur.
‫Daha sonra oyun istatistiklerini kullanabilirim ve sınıfın tüm aktörlerini al diyeceğim.
‫Şimdi ilk girdi bir dünya bağlamı nesnesi, bunu geçeceğim ve sonraki de aktör sınıfını
‫temsil eden alt sınıf.
‫Ve kule sınıfını temsil eden bir U sınıfı döndürecek bir kule statik sınıfı kullanabileceğimizden bahsetmiştim.
‫Şimdi tekrar, kuleleri dahil ettiğimizden emin olmak iyi bir fikirdir, ki öyleyiz.
‫Şimdi, üçüncü ve son parametre tepsi olacak ve kulelere geçebiliriz.
‫Bu işlev çağrıldıktan sonra, kuleler artık dünyadaki tüm kulelerin işaretçilerini içerecektir.
‫Aslında, kulelerden türeyen bir sınıfın herhangi bir nesnesi varsa, bunları da alırız.
‫Elimizde bir towers dizisi olduğuna göre, bu dizideki eleman sayısını döndürebiliriz.
‫Bu yüzden bir return deyimi kullanacağım ve towers dot num kullanacağım ve şimdi bir get target tower count'umuz var.
‫Yani bu harika.
‫Bunu, hedef kuleler olarak adlandırdığımız kule sayımızı başlatmak için kullanabiliriz ve bunu oyuna başladığımızda
‫yapabiliriz.
‫Bu yüzden bunu buraya yerleştireceğim ve oyun başlangıcını halledeceğim.
‫Aslında, yapacağımız ilk şeyin bu olmasını isterim.
‫Bu yüzden hedef kuleleri alacağım ve hedef kule sayısını al'dan dönen değere eşit olarak ayarlayacağım.
‫Şimdi hedef kuleler dünyamızdaki kule sayısına başlatılmalıdır.
‫Bu harika, ancak bir kule her öldüğünde bu sayıyı güncellememiz gerekiyor, bu da aktör öldü işlevimize
‫girmemiz gerektiği anlamına geliyor.
‫Ve burada, ölü aktörü yıkılmış bir kuleye atarsak, yıkımı gerçekleştirdikten sonra, hedef kuleler
‫değişkenimizi güncellemeliyiz, böylece hedef kuleler diyebiliriz ve azaltma operatörünü kullanabiliriz.
‫Ya post decrement operatörünü ya da predicament operatörünü kullanabiliriz.
‫Bunların her ikisi de aynı eylemle sonuçlanır, yani hedef kuleleri alır ve ondan bir tane çıkarır.
‫Şimdi, hedef kulelerden bir çıkardıktan sonra, Hedef Kulelerin sıfıra ulaşıp ulaşmadığını kontrol
‫etmemiz gerekiyor.
‫Bu yüzden Hedef kulelerin sıfıra ulaşıp ulaşmadığını görmek için buraya bir if kontrolü yerleştireceğim.
‫Şimdi, bunu yapar yapmaz, oyunun bitmesi gerektiğini biliyoruz, böylece tüm kuleleri yok ettiğimiz
‫için gerçek 4b1 oyununda geçen oyun bitti işlevini çağırabiliriz ve bunu bir galibiyet olarak kabul edebiliriz.
‫Şimdi devam edelim ve kodumuzu derleyelim.
‫Şimdi, burada editörde, bu videoyu tamamlamadan önce yapmak istediğim şey oyun modu planımıza
‫gitmek.
‫İşte bip melodisi.
‫Teşekkürler oyun modu ve bu etkinlik başlangıç oyunumuz var.
‫Yaptığımız şey, oyuna başlama widget'ımızı oluşturmak, onu görüntü alanına eklemek ve böylece oyuna
‫başlama geri sayım sayacını görebilmek.
‫Bu yüzden start game'in çağrıldığını biliyoruz, ama aynı zamanda game over blueprint uygulanabilir olayımızı da uygulamamız gerekiyor.
‫Bu yüzden sağ tıklayıp game over yazacağım ve işte etkinliğimiz, game over ve şuna bir göz atın.
‫Tek bir oyunumuz olduğuna ve bunun bir boolean olduğuna dikkat edin.
‫Yani bu fonksiyonu C++'dan çağırdığımızda, B one oyunu için bir boolean değeri giriyoruz.
‫Blueprint olay düğümü, küçük B harfini çıkarır ve bizim için bir tür nezaket olarak bir ile oyun arasına bir boşluk
‫yerleştirir.
‫Şimdi oyunu kazandığımızda veya kaybettiğimizde görebilmek için bazı widget'lar oluşturacağız, ancak bunu gelecekteki
‫bir videoda yapacağız.
‫Şimdilik, sadece bunun çağrıldığını ve doğru şekilde çağrıldığını doğrulamak istiyorum, böylece bunu bir print
‫string düğümü ile yapabilirim ve bu boolean'a dayalı değeri yazdırabiliriz.
‫Bu boolean'ı tıklayıp doğrudan dize girişine sürüklersem, bir boolean'ı dizeye dönüştürme olduğunu
‫görürüz.
‫Bu, bir boolean'ı bizim için bir dizeye dönüştürecek başka bir kullanışlı dönüştürme düğümüdür ve işlevselliği,
‫boolean'ın doğruluk değerine bağlı olarak true veya false kelimesine dönüştürecek şekildedir.
‫Peki neden bunu test etmiyoruz?
‫Derleyip oynat tuşuna basacağım.
‫Pekala, şimdi oyunu kazanmaya hazırım.
‫Umarım bunu yapamadan kaybetmem.
‫Oyunu kaybettim ve ekranın sol üst köşesinde yanlış yazısını görebilirsiniz.
‫Artık oyunu kaybetmenin game over olayının çağrılmasına ve false değerinin girilmesine neden olduğunu biliyoruz, oyunu kazandığımızda
‫true değerinin girildiğinden emin olmamız gerekiyor.
‫O zaman bütün kuleleri öldürmeye çalışalım.
‫Bu yüzden vurulmamaya çalışmalıyım.
‫Çoktan vuruldum.
‫Bu oldukça zorlayıcı.
‫Ve işte başlıyoruz.
‫Ve doğru ekranın sol üst köşesine basılır.
‫Sadece birkaç saniye görünür, bu yüzden kaçırmış olabilirsiniz.
‫Tamam, harika.
‫Yani artık kazanma ve kaybetme koşullarımız var.
‫Bir sonraki adım, bunu ekranda bir widget şeklinde göstermektir, böylece print string düğümüne
‫güvenmeyiz.
‫Özetle, artık kazanma ve kaybetme koşullarımız var ve bunu parlatmak için yapmamız gereken sadece birkaç
‫şey var, örneğin oyuncuya oyunu kazandıklarını veya kaybettiklerini bildiren widget'lar oluşturmak gibi.
‫Ayrıca bir tepsi ve oyun statiği işlevini kullanarak kule sayısını saydık.
‫Sınıfın tüm oyuncularını alın.
‫İyi işti.
‫Bu oyun gerçekten iyi gidiyor.
‫Bir sonraki videoda bu widget'ları oluşturacağız ve ardından özel efektler eklemeye ve oyunumuzu
‫parlatmaya hazırız.
‫Bir sonraki videoda görüşürüz.