Basit Çoklu Oyuncu Motoru – Snake v2.0 – Giriş | Yazılımperver'in Dünyası
Bu sefer farklı bir yazı ile karşınızdayım. Bu yazı ile birlikte daha önce sizler ile paylaştığım oyun projelerine devam edeceğiz. Daha önce sizler ile paylaştığım örnek oyun projelerinin ikisi de (Tetris v1.0, Tetris v2.0, Snake v1.0) tek oyuncu desteği sunmaktaydı ve çoklu oyuncu desteğini de eklemeyi istediğimi söylemiştim. Burada amacım basit bir çoklu oyuncu desteğini (oyuncular, lobi, mesajlaşma, senkronizasyon ve oyun mekanikleri) modern C++ kabiliyetlerini ve kütüphanelerini kullanarak nasıl yapıldığını sizlere göstermekti. Aslına bakarsanız, bir süre önce, bu anlamda da, basit bir ağ alt yapısı geliştirmeye başlamıştım ve bu amaçla da POCO kütüphanelerini kullanmaya başladım (Vcpkg Aracı yazımda da değinmiştim). Aslında, POCO kütüphanelerini daha önce herhangi bir amaç ile kullanmamıştım ama genel değerlendirmeler fena değildi. Hem kütüphaneyi öğrenmek hem de hızlı bir şekilde ağ alt yapısını geliştirmek için bu kütüphaneye yöneldim. Bunu kullanarak da, basit istemci, sunucu arasındaki haberleşmeyi gerçekleştiren sınıfları yazdım. Kullanımı nispeten kolay, dokümantasyonu fena olmayan bir kütüphaneydi. Fakat gel gör ki, bu kütüphaneyi Android için kullanmanın pek kolay olmayacağını fark ettim ve bu ağ alt yapısını QT ile geliştirmeye karar verdim.
QT’yi çok uzun bir süredir, farklı amaçlar için kullanılacak grafiksel kullanıcı arayüzüne sahip C++ uygulamaları geliştirmek için hem işte hem de kişisel projelerimde kullanıyorum. Oldukça kapsamlı, bir çok kabiliyeti içerisinde barındıran, çok güçlü bir topluluk desteği ve kullanım alanı olan (Wiki’ye göre 1 milyondan fazla kullanıcısı ve 70 den fazla alanda kullanılıyor) bu kütüphaneyi (aslında kütüphaneden çok fazlası, kendi ifadeleri ile “cross-platform application development framework”), bence her C++ yazılımcısının öğrenmesinde fayda var. Eee ben de buna vesile olayım istedim 🙂
Qt seçimi yanında, çoklu oyuncu desteği getirirken başka neleri bu kapsama alabilirim diye düşündün ve artık de facto her yazılımcının bilmesi gereken birim test (unit tests), sürekli entegrasyon (continous integration) kavram ve kabiliyetlerini, bu oyun aracılığı ile C++ dünyasında nasıl uygulanabileceğini sizlerle paylaşmaya karar verdim. Bunun yanında, daha önce de amaçladığımı çoklu platform desteğini de her zaman göz önünde bulunduracağız, geliştirdiğimiz yazılımların özellikle android platformu için de çalışabilir olması benim için önemli.
Anlayacağınız üzere, çarşı biraz karıştı 🙂 Şaka bir yana, yazılım mühendisliği kavramlarını ve bu tarz araç ve teknolojileri (bu durumda QT, sürekli entegrasyon, birim test, vb.), öğrenmenin en iyi yolunun, birebir kullanmak olduğuna inanan bir insanım. Onun için her ne kadar Snake v 2.0’ın çıkışı biraz uzasa da, eğlenceli bir yazı dizisine yelken açtığımıza inanıyorum. Bu kapsamda sizlere aktaracağım konular, tabi buradakilerle muhtemelen sınırlı kalmayacak, aklıma gelen veya hoşuma giden kavram ve hususları da sizler ile paylaşacağım. Elbette, önceki konularımıza ilişkin yazılara (std::any ve SOLID yazıları gelecek 😉 devam edeceğim ama birinci önceliğim bu konu olacak. Bu arada ingilizce çeviriler de biraz aksadı, farkındayım 🙁 fırsat buldukça eksikleri gidereceğim ama öncelikli açıkçası çok fazla değil, tabi bir omuz atabilirim diyen olursa her zaman kapım, e-posta kutum, açık 😀
Peki yazıları ve içerikleri nasıl planladım, bundan sonra nasıl ilerleyeceğiz ve mevcut durum nedir konusuna gelecek olursak. Açıkçası ilk etapta bahsettiğim bu yeni teknoloji ve kavramlara ilişkin kısa ve sizlere yol gösterici ufak yazılar yazmayı planlıyorum. Bu yazıların hepsi bir yandan GitHub’da geliştirmeye devam ettiğim kod ile de paralel devam ediyor olacak. Teknolojilere hızlıca baktıktan sonra veya arada koda ilişkin de bir takım yazılar sizler ile paylaşacağım. Yazımın sonunda bu bağlamda yazmayı planladığım yazıların olası başlıklarını (kuvvetle muhtemel bunlar yolda değişecekler) listeledim, ileride yazıları yazdıkça, bağlantılarını güncelleyeceğim. Elbette, Yazı Dizileri ve Örnek Kodlar sayfası altında da kendilerine ait bir başlıkları olacak. Bu yazıları Basit Çoklu Oyuncu Motoru (BÇOM) – “Simple Multiplayer Game Engine (SMGE)” başlığı altında toplayacağım. Tabi motor dediğime bakmayın, öyle çok kapsamlı bir şey olmayacak ama yine de sizlere fikir vereceğini umuyorum 🙂
Aslında bakarsanız çoklu oyuncu için temel teşkil edecek istemci/sunucu alt yapısı için bir takım kodları geliştirdim. Bunlara, aşağıdaki SimpleMultiplayerGameEngine git repository’sinden ulaşabilirsiniz, hemen bir göz atın derim 😉
Dediğim gibi bunlar, birim test ve sürekli entegrasyon kavramlarını, basitçe gösterebilecek seviyede. Bunun ile birlikte, çalışır ve kullanılabilir durumda ve daha da önemlisi sizlere ağ programlama ve QT’nin kabiliyetleri hakkında da fikir verecek seviyede. QT ve soket programlamaya ilişkin ayrı bir yazım da olacak inşallah.
Şimdi gelelim bu çoklu oyuncu desteği olayına. Açıkçası ilk etapta basitçe bir kütüphane aracılığı ile bunu geliştirip, daha önce sizler ile paylaştığım yılan oyununa eklemeyi planlıyordum. Şimdiki plan, öncelikle en altta haberleşmeden sorumlu bir alt yapı, üstüne bunu kullanıp, basit çoklu oyuncu kabiliyetlerini gerçekleyen üst bir yapı ve son olarak da, bunları kullanan uygulamalar geliştirmek olacak. Bu uygulamalar: konsol tabanlı ve grafiksel kullanıcı arayüzüne sahip QT tabanlı oyuncu uygulamaları, yine QT tabanlı soket haberleşmelerini ve çoklu oyuncu kabiliyetlerini test ve takip etmek için uygulamalar olacak.
SMGE haberleşme altyapısı ve Qt ile soket programlama
SMGE çoklu oyuncu kabiliyetleri
CMake betiklerinin oluşturulması
SMGE oyuncu istemcileri
← Haftalık C++ 16 – std::variant
Oyun Geliştirmek İçin Kullanılabilecek İçerikler →