Kodlarını Yapay Zekâya Yazdırdığım C++ Oyunum ile Üçüncü Ayda Artık C ve C++ Diline Aşina Olmaya Başladım! ツ

Daha önce tamamen amatörce Arduino kodladığım için, başlarken C / C++ kolay öğrenirim sanmıştım. Fakat Arduino kodlamanın C++’ın yanında okyanusta yüzmek ile şişme su havuzunda şişme ördek ile yüzmek kadar basit kaldığını anlamam uzun sürmedi.

C++’ın bu kadar derya deniz bir yazılım dili olduğunu bilmiyordum.

Her neyse!

Fakat bir kere niyet etmiş bulundum. Fakat Linux’ta C++ kodlamak için derleyici aramakla bir süre uğraştım. Aslında bir çok alternatif var, ama ilk seçimlerim hüsran ile sonuçlandıktan sonra nihâyet “Geany” derleyicisinde karar kıldım ve şu ana kadar gayet yeterli geldi.

Python için PyGame kullanıyordum, ama Geany biraz değişik bir derleyici.

Onu kullanmayı kavrayınca zamanında YouTube kanalı Clean Code’un bir PyGame eğitim projesi olan “Zelda in Python” oyunu projeme kaldığım yerden C++ ile devam etme kararı aldım.

windows 10 ile kodladığım PyGame oyunumun Linux’a geçtiğim için çalışmadığını birkaç yıl sonra yapay zekâ’dan öğrenince çok şaşırmıştım! Bense Python güncellemeleri yüzünden imp gibi kütüphanelerin değişmesi yüzünden sanıyordum! Bir türlü çözüm yolu bulamamak beni Python’dan soğutmuştu! Oysa sebep sâdece windows - Linux sistem farkıymış!

Aynı oyunun Linux sürümünü C++ ile yazmaya karar verdim.

Fakat C++’ın Arduino’ya benzemediğini ve bunun PyGame kodlamaktan çok daha zor olacağını anlayınca Yapay Zekâ’dan yardım almak istedim ve hiç aramadım bile Firefox tarayıcı da Google arama motoru sol üstte bulunan ücretsiz AI Modu ile oyunu kodlamaya başladım.

PyGame sürümüne devam etseydim ona menü ve oyun haritasına su ekleyecektim. Bu yüzden oyunumun C++ sürümüne menüden başladım.

Dün oyunumun göletine yapay zekâlı balıklar da eklendi. ツ

Bu paylaşımı yapma sebebim belki oyunlar hakkında bilgisi olan birileri çıkar ve bilgi paylaşır diye. Örneğin bilgisayarı kasmadan rüzgarda savrulan o kadar bitki ve ağaç yapraklarını nasıl ekliyorlar çok merak ediyorum! Bir sürü canlandırma!

_______
• Oyun Yapma Çalışmalarım (YouTube oynatma listesinin 25. videosundan sonrası oyunumun C++ sürümünün geliştirilmesi ile ilgili. Önceki videolar Clear Code’dan alınanların değiştirilip geliştirilmesi ile oluşturulmuş eski PyGame sürümü:

Oyunda en zor kısım oyuna uygun asset bulmak oldu. Bulamadım!

Hâlâ ilk oyunun Clear Code dosyaları ile gelen piksel grafik karakter Zelda’yı ve ondan türettiğim daha gelişmiş 8 yönlü sürümü SELDA’yı kullanıyorum! İsim konusunda acayip yaratıcıyım dır! ツ

SELDA’ya daha nefes bile aldıramadım! Aslında aldırmıştım. 8 yön animasyonları bitmişken karakteri şimdiki daha ileri bir görsel seviyesine çıkartınca, aynı canlandırmaları tekrar yapmak zor geldi ve öylece kaldı! Şimdi oyunda sâdece 8 yöne dönebilen biblo gibi ilerliyor!

Animasyonları zamanında Steam’den aldığım tek program olan “Aseprite” ile yapıyorum ve “Gimp” den de çokça faydalanıyorum.

C++ Oyunumda henüz daha UI aşamasına geçmediğim için “Inkscape“ kullanmadım. PyGame ile UI menülerini vektörel olarak onunla yapıp png çıkış almıştım.

Oyunun temelde 2B bir oyun, ama hileler ile 2.5B görünmesini ve algılanmasını sağlıyorum.

Oyunun tamamı varlıkların bellerine kadar uzun çimler, otlar ve çiçeklerle kaplı. Şimdilik ilk haritayı bile tam donatamadım.

Oyunun şimdilik 9 haritası var ve her bir harita 5000x5000px boyutunda.

Oyun Dünyasının şimdilik tam boyutu 15000x15000px

Yeteri kadar büyük.

Göl kapısı denilen özel kapı ile iki harita arasında kapısız anında geçiş sağlanabiliyor!

Karakter klasörünün içine uygun varlık (asset) ekleyerek oyuna sokabiliyor ve o kendi eklediğiniz varlığınız ile oyun dünyasında dolaşabiliyorsunuz!

Oyunda 12 karakter ekleme yuvası var ve oyun onlara göre hazırlandığı için bunların ikisi kilitli, diğerleri istenildiği gibi değiştirilebiliyor. O ikisi de oyunun ihtiyacı olan özellikleri barındırdığı için kilitlendi. Eklenecek varlığın o karakter klasör içeriği ile uyumlu olması gerekiyor.

Oyunda top var. İlk ciddi fizik sistemi top ile yazıldı ve daha sonra onun sistemi değiştirilip düşmüş yapraklar tasarlandı. İkisi de yerde sürülüp yerleri değiştirilebiliyor ve topun klavye ve oyun kolu için özel havalandırma tuşu da var.

Top ve yaprak gölet üzerinden sürüle sürüle (yada top ise tekmelenerek) diğer haritaya geçirilebilen şimdilik iki obje! Bunun için iki farklı oyun kayıt sistemi geliştirilmek zorunda kalındı!

Oyunumda iki tür kayıt sistemi var. Biri obje hareketlerinin geçici kaydı, diğeri otomatik oyun kaydı. Otomatik oyun kaydı şimdilik kapı geçişleri ile tetikleniyor! Kapılardan geçmeden oyundan çıkarsanız oyun kaydınız da olmuyor!

Balıklar daha dün gece eklendi ve şimdi onları izlemek hoşuma gidiyor. ツ

Belki birilerini oyun yapmaya özendiririm!

1 Beğeni

Sanki bu konunun Yazılım Geliştirme konu başlığına taşınması gerekiyor.

Şu anda açıldığı kategori olan “Yazılım, Oyunlar” daha doğru değil mi?

Kemal kardeşim,
İşine gelir mi bilmiyorum ama benim arazi temalı oyunlarda kullandığım bir hile var. Hemen anlatıyorum.

Önce arazinin gerektirdiği spraytları, seamless textureleri önceden hazırlıyorsun.

Bu texture’lardan hareket etmesi gerekenler varsa, onları GIMP ile ya da bir gif editörü ile örneğin animated-tree.gif olarak kaydediyorsun. Resim görüntüleyicisi ile açınca hareket ediyor.

Sonra koda bu gifleri nereye yerleştireceksen oraya yerleştirmesini söylüyorsun. Böylece kodu animasyon için şişirmemiş oluyorsun. Ama tabii ki bu da kolay değil.

Çünkü yukarıda bahsettiğin gibi, özgür sprayt ve texture bulmak ölümcül zor bir iş. 2-3 tane oyunum bu yüzden durmuş durumda. Yok, ne yapacağım yani? Yoktan mı var edeyim? Grafik sanatçısı değilim ki çizeyim.

Yine de özgür grafik bulabileceğin OpenGameArt diye bir site var. Oradan düşük kalitede bile olsa birçok grafik, karakter, doku falan bulabilirsin.

Emeğine sağlık, umarım başarılı olursun. Merak ediyorum. Bu arada ben de bir zamanların Battle City veya bilinen hack adıyla 90 Tank oyununu yapmayı planlıyorum. Birkaç spraytı mecburen elle GIMP’te çizdim. Tankları da buldum. Ama pek beğenmedim. Sıfırdan elle çizebilirim. Amacım 90Tank’ın linux klonunu yapmak. Acil bir oyun olmamakla birlikte boş zaman eğlencesi diyebilirim.

1 Beğeni

Oyuna gif ekleyebilsem animasyonların kalitesi çok daha iyileşecek. Çünkü Aseprite ile gifin her bir karesinin ekranda kalma süresini ayarlayıp gifi öyle üretebiliyorsun.

Fakat C++ buna izin vermiyormuş! Öyle bir şey yapacaksan koddan hâllet demeye getiriyor! png kullanmak zorundayım!

Ayrıca zemin kaplama üretiminden bahsettiğinizi sanıyorum. Benim öyle bir derdim yok. Her bir haritanın yeşil halı gibi 5000x5000px zemin görseli var. Bu görsel çok büyük olduğu için her bir haritanın bu zemin görselleri dörde bölündü ve artık her biri 2500x2500px lik birbirine yapışık 4 görsel gibiler. Böylece 5000px’lik görsel yüklenmek zorunda kalmıyor! Oyuncu haritanın hangi parçasındaysa o zemin görseli yükleniyor.

Objeleri ise TileMap ile bu zemin üzerine yerleştiriyorum. Normal eski 2D oyunlarda benimki gibi zemin görseli olmuyor. Zeminin kendisi TileMap ile parçalar halinde yerleştirilerek zemin yapılıyor. Fakat ben zeminin üzerine bâzı kısımları şeffaf objeler yerleştirerek 2.5B algısı oluşturuyorum ve onu hileler ile destekliyorum.

Örneğin birinci haritanın ortasında duran dikili taş aslında çarpılamayan bir obje. Yâni içinden geçilip gidilebiliyor. Fakat oyun “Önden Görüşlü 2.5B” bir oyun olduğu ve kamerası sabit olduğu için ben o dikili taşın arkasına oyunda başka videolarda görülen küçük kaya denilen iki çarpılabilir obje koyuyorum yada gizliyorum. Böylece dikili taş çarpılabilir oluyor. Fakat aslında içinden geçilebilir olduğu için arkasından dolaşılabiliyor. Dikili taşın kendisi çarpılabilir olsaydı yere boylu boyunca yatmış çarpılabilir bir kaya gibi görünecek ve etrafından dolaşmak zorunda kalınacaktı! Şimdi ise sanki dikili taş oyunda üçüncü boyuta doğru dikiliymiş gibi bir sahte algı oluşturuyor. 2.5B’nin sahte algısı böyle bir şey. ツ

Benim arayıp bulamadığım şey animasyon. Yani 8 yöne doğru, önden bakışlı (izometrik değil) hareket animasyonları olan varlıklar. Karakterler, canavarlar yapmak zaman alıyor. Yapay zekâya bile istediğimi yaptıramıyorum. Bana 5 karelik havalanan top canlandırması yap dedim. Alay eder gibi yere zemin diye çizgi çizmiş, topu çizgiden yukarıya doğru 5 kademe çizip verdi! ツ

Karakteri koşarken, yüzerken çiziyor, ama saçma sapan şeyler çiziyor. Bir çizdiği diğerini tutmuyor ve kafasına göre araya saçma sapan kareler karıştırıyor. Bedava diye mi salağa yatıyor anlamıyorum. Yapamamasını, anlayamamasını anlarım, ama saçma sapan şekilde saçmalamasından huylanıyorum!

Ben oyuna sokacak uygun karakter ve canavar bulamıyorum demek istemiştim. Dün balığı bile kendim yaptım! Mastodon’dan Aseprite ile yaparken alınmış gifler var. Yakından bakınca bir halta benzemiyor, ama artık oyuna balık lazımdı aceleyle bunu yaptım. Çok küçük olduğu için neredeyse biraz daha iyi olsaymış hiç dokunmayacaktım, ama animasyonunda tekleme ve küçük sorunlar var.

Balık canlandırması (daha çok oynayan kızarmış balık gibi görünüyor ツ)

Oyunla uğraştığım için foruma giremiyordum. Bu gün forumda senin oyununu görünce ben de bu paylaşımı yapmak istedim. ツ

Oyun yapmak hem keyifli hem de bunaltıcı oluyor.

Bulmaca çözmeyi sevmeyen sakın bulaşmasın!

Kodlarını ben yazmıyorum, ama bulmaca çözmekten iki aydır beyin yorgunluğu çekiyorum!

Hâlâ çözemediğim birkaç sorun kaldı.

Ağaçların arkasının görünmesini sağlayacak röntgen görüşüne ihtiyacım var, ama henüz başaramadım! Ağaçları yarı şeffaflaştırmadan arkasından geçecek varlıkları sâdece ağacın arkasına geçtikleri esnada ağacın önünde yarı şeffaf çizmeye çalışıyorum! Bir sürü sorun çıkıyor. Adım adım sorunları eleyip aşarak ilerliyorum.

Değişik yaklaşımlar ile tekrar tekrar deniyorum. Elbet inşâÂllah sonunda bir gün çözerim!

Animasyona 2.30’a kadar baktım. Çalışılması gereken çok fazla şey var. Aslında anlatmam gereken çok şey var ama benim de kafa çok dağınık şu anda. Selda’nın ağaçların arkasına gittiğinde o kısmı en azından daire şeklinde şeffaflaştırman şart. Bunu kodla yapmak muazzam zahmetli iş.

Ben o kadar iş yüküyle uğraşamam. Masa oyunu seviyesinde yapabiliyorum ve python ile 2D yapıp geçiyorum. Daha fazlası fazla iş yükü demektir.

İpucu: gerek kod tarafında, gerekse resim tarafında YZ’ye hiç güvenme. Cidden mağdur eder. Çünkü sen bitti zannettiğin bir noktada en başlarda ciddi bir yapısal sorun olduğunu farkediyorsun ve artık başa dönmek bir ölüm oluyor. Bu nedenle kodu anlık olarak kendin denetlemeli ve planlamayı bizzat yapmalısın. Ben bir oyun veya uygulama yapacağım zaman çok çok basit bir algoritma planlıyorum. Detaylı verirsem kafası basmıyor ve saçmalama ihtimali artıyor. Örnek:

Bununla ilk temel kodu “iskelet” olarak oluşturmasını sağlıyorum. Ardından şu aşamaya bunu da ekleyeyim, şunu da ekleyeyim diyerek asıl algoritmayı yapılandırıp kodu ona göre geliştiriyorum.

Senin oyunun, iç mekanikleri açısından benim oyunlarıma nazaran çok karmaşık. Bu da tek başına sana kafayı yedirir anlamına geliyor. Grafik tasarımı için ayrı birisi çalışmalı, oyun senaryosu için ayrı biri çalışmalı, kodu birden fazla kişi tartışıp planlamalı ve sadece biri yazmalı, bir de tester’ınızın olması gerek. Elindeki oyunun seviyesine baktığım zaman izlenimim bu.

___

Zıt renkleri öğreten bir oyun:

Yukarıdaki algoritma planı buna aitti. Şu haliyle bile çalışma mantığı yeteri kadar karmaşık. Oyun, zıt renkleri öğretir. 2x2 ile başlayarak giderek artar. Hata yaparsan ekran karararak yeniden başlar. Gırgırına oluşturup bir kenara attım. Geliştirir miyim, bilmiyorum.

Elindeki oyun “basit” değilse, tek başına yürütürken neyle karşı karşıya olduğunu bilmen gerekiyor. Yapamazsın demiyorum. Ama kara duman attırır ki anlattıklarından anlaşılıyor zaten. :grinning_face_with_smiling_eyes:

1 Beğeni

Ben de işler karmaşıklaşıp oyunun kendi dosyaları arttıkça artık zor konularda yapay zekâya önce simülasyon yaptırtıp sorunu orada çözüyorum.

Gölet suyu benim için büyük bir bilinmezdi. Düz yarı şeffaf, iki parçalı bir görsel koyup bir süre idâre etmek zorunda kalmıştım.

Neyse ki yapay zeka bir çok denemeden sonra istediğime yakın bir şey üretmeyi başardı.

Göletin dibindeki yansımaları gördüğümde bundan istediğim şeye ulaşabilirim diyerek son oturumu sonlandırmıştım!

Sonra daha fazla bekleyemeyeceğim, bu dip yansımasına benzeyen şeyi oyuna ekleyeyim, dalgasını da sonra eklerim dedim.

O ara nasıl olduysa şu anda göletin üzerindeki dalganın ışığını üretti.

Ondan suyun üzerinde kubbe şeklinde şeffaf bir yapı istemiştim. Amacım o yapıyı kumaş gibi dalgalanan su yüzeyinde değişik kubbemsi şekillere sokmaktı. Böylece hafifçe dalgalanan su yüzeyi, elde edecektim.

İstediğim olmadı, ama Yapay Zekâya Mount&Blade:Warband strateji haritasında bunu kıyıya yakın oluşup, sürekli kıyıya ilerleyen köpüklü dalgalar şeklinde yaptıklarını, gerçekçi görünmediğini, ama işe yaradığını söyleyince o sözde parlak ışık demetini yayarak kıyıya vuran dalgalara çevirdi ve ben buna razı oldum.

İstediğim bu değildi, ama bu benim oyunuma çok daha uygun.

Benim istediğim gerçekçilik 3B oyun gerçekçiliğiydi. ツ

Biraz haritalara değişik ot ve çiçek ekip, daha gerçekçi görünmesini sağlamakla uğraşacağım.

Haritaları donatamadım derken kastettiğim oydu. Ben gerçek görseller kullanıyorum. Onların çevresini Aseprite ile silip şeffaf png görseller elde ediyorum ve gerekiyorsa onlardan canlandırma yapıyorum, gerekmiyorsa oyuna obje olarak ekliyorum.

Gerçek olmaları oyunun 2.5B yapısını daha çok destekliyor.

Ağaçların arkasını görmek için bir simülasyon hazırlandı bile ve ben üzerinde düşünüp bazı hesaplamalar yaptım. Deneyeceğim. En kolayı ağacı yarı şeffaf yapmak! Çoğu oyun bu kolaycılığa kaçıyor! Hatta binaların içini göstermek için yarı şeffafı da geçip duvarları tamamen şeffaf yapıp ortadan kaldırıyorlar. Ağaçlar oyunumda çok değerli onlara dokunmamak için her şeyi deneyeceğim. Değmeyeceğine karar verirsem ancak o zaman arkalarındakini görmek için ağaçları şeffaf yapıp kurtulacağım.

1 Beğeni

Başka yolu yok ki zaten. Hadi taş önemli değil. Ama ağaç gibi yoğun ve karmaşık alanların arkasında uzun süre gezinmek zorunda kalacaksa, gezindiği alandaki ağaçların şeffaflığını %20’lere çekerek bitirmek zorundasın. Başka alternatif yok.

Bir de birşey dikkatimi çekti. Top sesi, su sesleri falan çok gerçekçi. Onlar başarılı olmuş onlara elleme. Sana bir ipucu daha: pixabay. ←Cardboard Circuit oyunundaki tüm stage müzikleri buradan geldi. Oyun klasörü içindeki licenses.txt dosyasında adresleri bile yazıyor. CC-BY veya CC-Zero hep lisansları. Başın ağrımadan ses efekti, müzik, ne ararsan var. Büyük hizmet valla.

1 Beğeni

Mastodon’da şöyle paylaşmıştım;

İnce hesaplar!

Becerebilirsem gören “vay! nasıl yapmış!” diyecek.

Beceremezsem de çoğu kişi gibi kolaya kaçıp arkasındakini göstermek için uzun objeleri yarı şeffaflaştıracağım!’

Bir çok oyunda yarı şeffaflaştırmayı da aşıp binaların içini göstermek için duvarları yok ediyorlar!

https://mastodon.online/@aslankemalaslan/116895996148126650

Oyunu yapmaya başlayalı daha üç ay bile olmadı, ama benim için şimdiden oyunluktan çıktı, bulmaca çözmeye döndü!

Sorun ağacın kenarlarının ve dallarının arasından arkasının görülebildiği boşlukların olması. Karakter yada diğer varlıklar bu boşluklardan yaklaştıklarında da asıl görsel şeffaf yerleriyle birlikte “kare” olduğu için, daha ağacın arkasına geçemeden yarı şeffaf görünmeye başlıyor!

Uğraştığım şey bu! Bunu önlemek için biraz ölçü aldım ve simülasyonun ikinci aşamasında bu ölçülerle ve gerçek ağaç ve top objeleri ile denemeler yapacağım.

Ağacın sadece en yoğun olduğu orta kısmında arkasındakilerin önde yarı şeffaf görünmesini sağlayabilirsem olacak gibi. Bunun için bir elips ölçüsü aldım.

Ağacın önünde bu elips içindeki kısımda röntgen görüntüsü vermeye çalışacağım.

Bunu da sanki suya yavaşça giriyormuş gibi yapacağım.

Ağacın arkasındaki varlıklar bu görünmez elips alanının içine suya girer gibi girecek, ağacın önünde yarı şeffaf görünüp, aynı şekilde çıkacaklar.

Bir şeye benzerse ne güzel.

Benzemezse ya ağacın tamamını, yada ağacı iki parçaya bölüp sâdece üst dallı yapraklı kısmını komple yarı şeffaf yapacağım!

Gerekirse ağaç objesinin alt gövdesini oyuna ayrı obje olarak yükleyip haritada birleştirebilirim.

Dediğim gibi oyun yapmaktan çok, bulmaca çözmek gibi! ツ

Anladım.

Bak aklıma ne geldi:

Age of empires 2 oyununda öğeler şeffaflaşmaz. Onun yerine arkaya geçen insan veya hayvan gibi öğelerin dış hatları çizilerek ağaçların üzerinde gösterilir. Örnek, köylü cangılın arkasında odun kesiyor. Ama arkada kalan kızımlarının sadece dış hatları çiziliyor. Ensemble studios zamanında böyle çözmüş. Yap demiyorum ama bir kenara not al.

1 Beğeni

Evet, o da röntgenin bir türü. Fakat objelerin dış hatlarını çizmek daha zor. Ağacın arkasına geçtiğinde ağacın önünde yarı şeffaf olarak göstermek daha kolay. Bunu yapay zekâ ile oyunun içinde iki kere denedik. İki oturumda da başarısız olup eski kodlara geri dönmek zorunda kalınca artık simülasyon ile deniyorum! Topun ağacın arkasına geçtiğinde, önünde yarı şeffaf olarak gördüm ve bana yeterli geldi. Top yada varlık her ne ise yarı şeffaf olduğu için İnsanda ağacın önünde olduğu algısı oluşmuyor. Tam da adına yaraşır şekilde röntgen yada termal kamera görüntüsü gibi algılanıyor. Objenin renklerine filtre uygulayıp termal kamera görüntüsü gibi görünmesi de sağlanabilir. Predator görüşü gibi. ツ

Bakayım en sonunda ne olacak? Beğenmezsem hiç istemediğim halde çoğunluğun yaptığı gibi ağacı yarı şeffaf yapma kolaylığına giderim.

1 Beğeni

Bir oyunu oyun motorsuz yapmayı önermiyorum. Güzel proje başarılar.

1 Beğeni

Oyun C++ ile yapılıyor ve C ve C++ Oyun Motorum şu ana kadar yeterli geldi. Marka Oyun motorlarının bir sürü hazır özelliği oluyor, ama başlarken asıl amacım oyun yapmak değil, C++ kodlama hakkında çok daha bilgi ve deneyim sahibi olmaktı!

İstediğim şey kod okuma bilgisinden bile daha düşük bir seviye! Bu yüzden konu başlığında bu hedefi “Kod Aşinalığı” diye tanımladım!

Çünkü kodu okuyabilmek, yâni anlayabilmek C++ gibi derya deniz bir yazılım dili için çok büyük bir bilgi demektir.

Ben C++ kodu gördüğümde uzaylı gibi bakmamak istiyorum ve şimdiden kurucu ve yapıcı fonksiyonlar gibi kod yapılarını ayırt etmeyi öğrenmeye başladım. Tanımlamaları ve kütüphane ve paketlerin çağrılması her yazılım dilinde en kolay anlaşılan yapılar.

Artık oyunumun kodlarına bakınca ilk zamanlar kadar yabancılık çekmiyor, çalıştırdığı şeyi daha fazla anlıyorum.

Yapay zekânın çoğunlukla aptala anlatır gibi açıklamalı paylaşması da çok faydalı oluyor.

Zâten bir seviyeye gelip artık paylaşılabilir olduğuna inandığımda kendi Google Drive hesabımdan eski yarım kalan PyGame kodunu paylaştığım gibi bunu da paylaşacağım.

Eski yarım kalan PyGame kodu windows ile geliştirildiği için Linux’ta çalışmıyordu!

Bu yeni C++ sürümü ise Linux için geliştirildi ve sh dosyası ile Linux sistemlerine güvenilir oyun olarak oyunların arasına ve başlat menüsüne eklenip dilediğiniz yere kısa yol oluşturabiliyorsunuz.

Fakat şu hâliyle windows ta çalışmıyor.

Bazı değişiklikler gerekiyor!

Yapay zekâ oyunumun kasıtlı olarak Raspberry Pi 5 (Raspberry PiOS) ile Linux dağıtımlarıyla uyumlu geliştirilen C++ sürümünün windows işletim sistemindeki durumu için şunları demişti;

…..

:warning: Windows Derleyicisinde Karşılaşacağınız Değişiklikler:

Windows’ta bu projeyi derlemek istediğinizde kod üzerinde değil,Geany İnşa Et (Build) ayarlarında değişiklik yapmanız gerekir:

Bağlama Bayrakları (-lX11 ve -lncurses kalkacak): Windows işletim sisteminde pencere yöneticisi olarak X11 kullanılmaz.

Ayrıca terminal renklendirmesi için kullandığınız ncurses Linux’a özeldir.

Windows derleyicisinde (örneğin MinGW) bu iki bayrağı (-lX11 -lncurses) derleme komutundan silmeniz gerekir.

SFML ve FFmpeg bayrakları (-lsfml-graphics, -lavcodec vb.) aynen kalacaktır.

Eğik Çizgi Mantığı (/ vs ): C++ kodunda yollar hep ../assets/karakterler/ şeklinde (Linux standardı olan düz eğik çizgiyle) yazılı. Modern Windows derleyicileri ve C++23 kütüphanesi artık bu düz çizgileri Windows üzerinde otomatik olarak ters çizgiye () çevirebiliyor. Bu yüzden kodun içindeki klasör yollarına dokunmanıza gerek kalmayacaktır.

Özetle; şu an elinizdeki C++ kodu, dosya isimlendirmeleri açısından Windows için fazlasıyla hazır ve temiz durumda.

Windows tabanlı bir MinGW derleyicisi kurup, SFML ve FFmpeg kütüphanelerini Windows sürümüyle değiştirdiğiniz an oyununuz orada da sorunsuzca çalışacaktır.

…..

Windows kullanmadığım için o uyarlamayı yapar mıyım hiç bilmiyorum, ama sanmıyorum.

Kodları paylaşacağım için isteyen windows yada macOS uyumlu hale getirsin, üzerine kendi geliştirmesini eklesin.

Fakat oyunun C++ sürümünü geliştirmeye başlayalı daha 3 ay bile olmadı ve paylaşılacak seviyeye gelmesi belki birkaç yıl sürer!

Yine de bu arada videolarda görülen bâzı özelliklerini beğenip o özelliklerin kodlarını görmek isteyene şimdiden verebilirim!

YouTube da birisi Oyun Motorumu merak edince cevap olarak yorumda Oyunumun “../Kodlar/Motorlar” klasörünün içindeki “VideoBackground.cpp” ve “VideoBackground.hpp” dosyalarını paylaşmıştım. O dosyalar halâ değişmedi diye hatırlıyorum. Merak edenler için C++ Oyun Motorumu yine paylaşabilirim!

Balık , yaprak, canavar ve top fiziği yada yapay zekâsı hâlâ geliştirilmeye ve değiştirilmeye devam ettiği için bugün paylaştığım dosyanın kodlarının yarın biraz da olsa değişmiş olabileceği dikkate alınmalı!

Oyunumdaki Göletin içindeki suyu nasıl yapacağım hakkında çok düşünmüştüm. Hatta suyu şu videolardaki gibi tamamen simüle etmeyi, akışkanlar mekaniği sistemi ile oyuna eklemeyi bile düşündüm! Fakat sonra şimdiki gibi yapmak çok daha uygun ve kolay geldi.

Bu oynatma listesindeki videolarda olduğu gibi yapsaydım. Suyun dünyaya akacağı kaynağın bile ilk taslaklarını hazırlamıştım. O kaynak oyuna hiç eklenmedi! Belki başka bir haritaya eklerim.

Aaaa! Forum görselin şeffaf fonunu beyaz yapıyor!

Bu oynatma listesini o yüzden hazırladım, ama şimdilik başka video da bulamadım. ツ

C, C++, C# ile Sıvı Simülasyonları Kodlama

PNG’den JPEG biçimine döndüğünde şeffaf alanlar beyazlaşır.

1 Beğeni

Evet! Bakmayı akıl edememiştim.

Gerçekten de png yüklediğim görseli jpeg’e dönüştürmüş!

Kemal, oyuna devam ediyor musun? Nasıl gidiyor?

Ben bir 2D Tank oyununa başladım ama orjinal tanka benzememesi için assetleri ful kendim elle tasarlıyorum (daha bitmedi).

P2normalright (hareket ediyor)

level-up

1 Beğeni

Evet devam ediyorum. Göletteki balıkların canlandırma görsellerini değiştirip balıkları tekrar 8 yönlü yaptım.

Oyunumun 9 haritası var. Hepsi karakterlerin yarı boyuna kadar çimlerle kaplı. Aslında aynı haritayı kopyaladığım için bunu yapmak kolay oldu. Kapıları farklı, onları ayarlamıştım. Şimdi daha ilk haritanın büyük boş alanlarını düzenlemekle uğraşıyorum.

Balıklar 8 yönlü olunca balık yapay zekâsında küçük bir değişiklik gerekti. Artık balıklar başka yöne döndüklerinde arada yönler varsa her bir ara yönde saniyenin on yedi de biri kadar bir zaman bekleyerek dönüyorlar. Bu dönüş hareketini daha doğal gösteriyor.

Balıkların dönüşlerde araya bir canlandırma daha eklemek gerektiği görülüyor. Dönerken kıvrılmadıkları için sopa yutmuş gibi düz dönüyorlar. Bu da 8 tane daha her yöne kıvrılma animasyonlarını çizmem gerekecek demek!

Gölet suyunun seviyesini biraz arttırdım. Çapraz olarak suyun yüzeyine ulaştıklarında balıkların kafaları dışarı çıkıyordu!

İleride sinek avladıkları zaman doğal görünebilir, ama çok gerekli değil.

Gölet suyunun seviyesini arttırınca su göletin üçüncü haritadaki kısmının kenarındaki çimenlerin üzerine çıktı ve hoş görünüyor.

Haritaya ot, çiçek ve sair şeyler ekleyip düzenlemek çok fazla vakit alıyor.

Gölete sinek eklemeyi sinekleri balıklara avlatmayı ve oyuna gölet üzerinde uçan kırlangıçlar eklemeyi ve onlara da sinek avlatmayı planlıyorum. En son karakter de oltayla balık avlayacak.

Sana da kolay gelsin. C++ dan önce oyunu Godot ile yapmak istedim. Raspberry Pi’de Godot hâlâ yüklü, ama çalıştıramadığım için bırakıp C++’a döndüm!

İyi ki de öyle yapmışım. Piksel Grafik oyunları çok seviyorum, ama oyunumun neredeyse üç boyutlu görünmesini istiyorum.

Eğer Godot’u çalıştırabilseydim benim oyun da seninki gibi görünecekti! ツ

Bunu bitirebilirsem -ki bu hızla yıllar sürecek gibi görünüyor!- ve bir daha oyun yaparsam kesinlikle üç boyutlu yapacağım. İkinci boyutta üçüncü boyuttaymış gibi hile düşünmekten başım ağrıdı!

Balığın üç boyutlu modellenmiş assetini yaparsın ne tarafa dönecekse döndürürsün.

Her yöne dönük görsel canlandırma hazırlayamıyorum. 8 yön için klasörler dolusu canlandırma çizmem gerekti ve hâlâ artıp duruyor! Üstelik sâdece 8 yöne dönebiliyor! Üç boyutlu olsa 360 derece döndürebilirsin. Dikine bile döndürüp baş aşağı çevirebilirsin.

Balıkları bir ben bi göremiyorum demiştim, ama dikkatli bakınca aralarda çok silik kaldıklarını farkettim. Balıkların öncelikli sorunu bence 8 yön ve dönüş değil. En önce parlaklık ve kontrast eklemen gerekiyor. Çünkü ancak dikkatli bakınca farkediliyorlar.

Bir de daha önemli bir şey var. Oyunda temel mekaniklerle ilgisi olmayan şeylere fazla takıldığını görüyorum. Mesela çimler yarı beline kadar diye ikidir söylüyorsun. Yarı beline kadar olmasa da olur; onun yerine, daha önemli gördüğün 3D gibi görünmesini sağlama hilesi ki çim aslında buna çok fazla katkı sağlamaz. Balıklar da aynı şekilde. O suyun içinde balık olmasa ne olur? diye sormanı öneririm. Oyun kurallarında gerçekten önemliyseler tamam (orjinal zeldayı bilmiyorum). Ama kurallar ve mekaniklerle hiçbir ilgileri yoksa bu kadar takılmayıp, her balığın tek bir yönde devamlı gitmesini sağlardım ben olsam. Mesela soldan başlayıp ekrandan çıkıp gitsin. Sağdan başlayıp ekranın solundan çıkıp gitsin. Şöyle de olur: gurup halinde dolaşan birkaç balık oluştur. Rastgele hızlanıp yavaşlasınlar. Tam duracakmış gibi yapıp telaşla devam etsinler. Bu seni daha az yorar. Ton ve kontrast olayını unutma. Cidden görünmüyorlar.

Geçen haftalarda YZ’yle muhabbet ederken şu minvalde birşey söyledi: “Çok titiz olduğunu bildiğim için detayları fazla düşündüğünü görüyorum. Ben senin yerinde olsam, önce boş bir kutu çizer, oyunun fiziğini yazardım. Bitince varlıkların ne yapacağını, hangi resmi atayacağını düşünürdüm. Sen tersten gidiyorsun.”

Önerisini yaptım mı, hayır :grinning_face_with_smiling_eyes:
Şu an sen de benimle aynı kafadan gidiyorsun. Önce çözülmesi gereken şeyler varken balıklar vb kafanı çok meşgul ediyor.

1 Beğeni

Ben oyunun tüm fiziklerini yazmaya kalksam yıllar geçer, oyun falan yapamam!

Ben 1971 İstanbul doğumluyum. Çocukluğum Kâğıthâne merkezde geçti. Ben Kağıthâneye ilk asfaltın döküldüğü günü hatırlıyorum. Evimizin yakınları kırlık ve bataklıktı. Şimdi o bataklıklar hep kurutuldu. Kışın o bataklık suyuna martılar gelirdi. Kırlangıçlar suyun üzerinde sinek avlardı. Balıklarımız lepistes gibi küçük bir türdü. Yıllar sonra onların sinek larvalarını yesinler diye derelere salındığını öğrendim.

Balıklar gerçekten de hafif bulanık yeşilimsi kara suyun içinde “üstten” zor görünürler.

Balıkların gerçek rengi o değil. Suyun şeffaf rengi gerçek renklerini örtüyor ve bu çok gerçekçi. Gerçek hayatta da böyledir. Yosunların gerçek rengini aşağıya ekleyeceğim. Onlar da suyun altında daha koyu görünüyorlar. Oysa su çok şeffafmış gibi görünüyor. Bu tam benim istediğim şey.

Fakat balık yapay zekâsı konusunda söyledikleriniz kesinlikle doğru. Fakat yavaş yavaş oluyor. Balıklar daha önce sadece sağa ve sola dönüyorlardı. Her zaman zemine yatay duruyorlardı ve hiç bir sorun yoktu. Şimdi 8 yönü birden açınca sürekli çaprazlarda duruyorlar! Çünkü onlara dalmayı öğrettim! Bu yüzden dalarken aşağı çapraza, çıkarken de yukarı çapraza dönüyorlar ve maalesef artık normal balık gibi yataydan çok çapraz duruyorlar! Yine de zeminde yen arıyormuş, yada su yüzeyinde sinek arıyormuş gibi göründükleri için çok da anormal değiller, ama balık yapay zekâsının daha çok geliştirilmeye ihtiyacı var!

Balıklar suyun içinde zeminden olmayan üçüncü boyuta doğru yükseliyormuş gibi göründükleri için balık yapay zekasını iyice oturtmadan kırlangıçları oyuna almayacağım. Çünkü onlar da olmayan üçüncü boyuta doğru uçacaklar!

Oyunun konusu benim çocukluğum!

Çocukken yaşadıklarım yada yaşamak isteyip yaşayamadıklarım.

Kâğıthâne bataklığında bizim sokaktan yaşıtım bir çocuk ve kardeşi boğularak ölmüştü!

Bataklık dibi iğrenç kara bir çamurdur ve Kâğıthane bataklıkları o kadar derin de değildi. En derin yeri 1 metreden ancak biraz daha derindir, ama asıl çamur derinliği pistir!

Suyun kırılma yanılsaması yüzünden dibi daha sığı görünür ve özellikle cahil çocukları aldatır. Kardeşi topu suya kaçmış diye almaya girip çamura saplanıp çırpınmaya çalışırken abisi onu kurtarmaya giriyor ve ikisi de o iğrenç kokulu kara balçık çamuru yutarak boğulup ölüyorlar!

Boğularak ölmek en korkunç ölüm şeklidir! Yanarak ölmek bile daha az acı veriyor derler. Çünkü derinin sinir olan katmanı yanınca artık acı duyulmaz! O yüzden Âllah suda boğularak ölenlerden şehitlik kabul eder! Çünkü onları boğulmaya karşı koruma olmaksızın yarattığı için belki bir tür özür diler. Bilemiyorum. Bataklık çamuru yutarak boğulup ölmek suda boğulmaktan çok daha korkunç ve iğrenç bir ölüm.

Biz o bataklığın üzerindeki kurumuş sazlara basarak yürürdük!

Çocuk olduğumuz için ağırlığımızı bir süreliğine taşır, yavaş yavaş dibe batarlardı.

Ben oyunlarda bile hâlâ bataklıklarda oynuyorum!

Grim Dawn bataklıklarını çok severim.

Witcher oyunları da bataklıklarda geçer.

Oyunun nasıl olacağını aşağı yukarı temel olarak biliyorum. Sorun bunu nasıl yapacağım. Kodlamasını hâlletsem çizimlerini, görsellerini, canlandırmalarını nasıl yapacağım sorununu benim için tam bir bilinmez!

İşte kızın yüzme canlandırmalarını çizmediğim için su etkileşimini açamıyorum.

Otların yarı bele kadar uzun olması bu oyunun en değerli yeridir!

Maalesef otları yolunacak bir şey olan gören bir milletimiz var!

Her gelen belediye Gönen’de birkaç ağacı otopark yada bahçe düzenlemesi sahtekârlığını bahane edip kesiyor!

Gönen’in eski adının ne olduğunu biliyor musunuz?

Yeşil Gönen!

Daha şimdiden “Beton Gönen” oldu bile!

Etrafı yüksek yeşil tepelerle çevrilidir ve Gönen’in altı su olduğu için harika bir tarım arazisidir!

Fakat o tarım arazisinin değerli humuslu toprağı beton ve asfaltın altında çürüyüp kokuşmaya mahkum ediliyor! Yakında ne yiyecekler bakalım!

O yüzden bütün haritaların bele kadar otlarla dolu olması çok önemli.

Benim amacım vurdulu kırdılı bir oyun yapmak değil.

Birinci haritaya PyGame zamanından kalma deliğinden çıkamayan bir tavşanı hatırası olduğu için ekledim.

O tavşan nedir biliyor musunuz? Arduino ile led yakmak neyse benim için aynı şeydir.

Tavşanın bir alanı var ve yaklaştığınızda tepki verip deliğine siniyor. Uzaklaşınca tekrar deliğinden kafasını çıkarıyor. Bu kadar! Arduino ile led yakmak gibi. Bunu yapabiliyorsan çok daha komplike tepkiler de verdire bilirsin. O tavşanı o yüzden ekledim.

Yine de biraz oyun oynamak isteyen sırf topla oynamasın diye karakterin ilk silahını elemental seçip “ateş topu” yaptım ve iki tane de yaratık ekledim ki birisi uçan balon!

Canavar seçimlerim bile çocukça denebilir!

Oyunda karakterin seviyesi en fazla 8 olabilecek!

Seviye aynı zamanda yaşı temsil edecek ve çocukların yaşı 8 de kalacak, yükselmeyecek!

Oyunun tüm sayısal görselliği Ondalık sistemden Heksadesimal sisteme aktarıldı.

Şu anda işlem olmadığı için sâdece ses ayarında görülüyor, ama ileride oyunda npc’den alışveriş yaparken korkunç bir zorluğa sebep olacak!

Oyunu yapan benim, ama ben bile Heksadesimal hesaplamayı beceremiyorum!

Böyle yapmamın sebebi oyunu oynayanın en fazla 8 yaşındaki bir çocuğun hesap yaparken çektiklerini deneyimlemesini istemem! ツ

Son bir şey daha söyleyeceğim.

Öncelikle oyunu kendime yapıyorum. Ayrıca başlama amacımı hiç unutmadım. Başlarken amacım oyun yapmak değil, oyun yaparak daha eğlenceli şekilde programlama dili öğrenmek, yada dile aşinalık kazanmaktı.

Fakat yapabiliyorken oyunda en doğal görünen ekositemi yapmak istiyorum.

Oyunum vurdulu kırdılı bir oyun değil! Hattâ ne kadar oyun sayılacağı bile şüpheli oyunlar vardır ya onlardan. Oyunda asıl önemli olan çevre. Mümkün olduğunca gerçekçi yaşayan bir dünya yapmaya uğraşıyorum ve takdir edersiniz ki bunu yapmak çok zor. Hele ki benim gibi hiç tecrübesi olmayan için çok çok zor.

Bu yüzden oyun algısı ile bakmak belki bazı kişiler için yanıltıcı olabilir.

Fakat yapacak bir şey yok. Bu da böyle bir oyun.

Canavarların yada düşmanların birbirine saldırmasına bayılırım.

Mount&Blade: Warband’da da Grim Dawn’da da düşman ve yaratıklar birbirleri ile ittifak kurup, birbirlerine birleşerek yada tek guruplar olarak saldırırlar. Grim Dawn’da sivrisineklerin düşman yaratıklara saldırmak için ordu gibi giderlerken görmek beni güldürüyor. 60lvl sivrisineği de ilk o oyunda görmüştüm! ツ

Oyunun en son hâlini gösteren kısa bir ASMR videosunun yüklenmeye daha 10 dakikası var, ama şimdiden paylaşıyorum. İnşâÂllah görüntülemede sorun çıkmaz!