Geliştirici Notları: Çizim Zinciri
Giriş ve Mimari Yaklaşım
Paira Çizim Zinciri, popüler "kulaktan kulağa çizim" (Gartic Phone benzeri) konseptini tamamen web tarayıcısı üzerine taşıyan, verileri depolamak için herhangi bir uzak veritabanı (Database) veya merkezi sunucu barındırmayan, P2P (Peer-to-Peer) bağlantı mimarisine dayalı çok oyunculu bir parti oyunudur. Platformun diğer oyunlarında olduğu gibi, bu oyun da öğrenci geliştirici Ahmet tarafından, topluluğun hızlı, kurulumsuz ve güvenli bir şekilde eğlenebilmesi amacıyla geliştirilmiştir.
Oyunda tüm durum (state) yönetimi ve senkronizasyon, sunucusuz mimarinin getirdiği sınırlamaları aşmak adına gelişmiş bir Host-Client yapısıyla tarayıcı düzeyinde koordine edilmektedir.
P2P Ağ Topolojisi (Host-Client Modeli)
Çizim Zinciri, sunucu yükünü ve gecikmesini ortadan kaldırmak için WebRTC (Web Real-Time Communication) protokolünü temel alan bir ağ mimarisi kullanır:
- Host (Kurucu Node): Odayı ilk oluşturan oyuncudur. Sunucu rolünü üstlenerek tüm oyun mantığını (Game Loop), turları, süreleri ve "defter atamalarını" kendi yerel tarayıcı hafızasında çalıştırır. Her aşama sonunda oyuncu kitaplarını (stories) kaydırarak yeni eşleşmeleri yönetir ve oyun bittiğinde albümü derleyip tüm istemcilere sunar.
- Clients (Katılımcı Peer'lar): Oda kodunu girerek bağlanan diğer oyuncular, doğrudan Host ile peer-to-peer
RTCDataChannelbağlantısı kurarlar. Katılımcılar doğrudan Host'a veri aktarır ve Host'tan gelen güncel oyun durumunu (SYNC) alırlar. - Sinyalleşme (Signaling): Oyuncuların birbirlerini internet üzerinde bulup IP ve port bilgilerini (ICE Adayları) değiş tokuş edebilmesi için bir WebRTC aracı sinyalleşme sunucusu (PeerJS altyapısı) kullanılır. Bağlantı kurulduktan sonra bu aracı sunucu tamamen devre dışı kalır.
Gerçek Zamanlı Veri Senkronizasyonu ve Oyun Evreleri
Oyun, birbirini takip eden Yazı Evreleri (WRITE) ve Çizim Evreleri (DRAW) üzerinden ilerler. Tüm bu süreçler RTCDataChannel paketleriyle anlık olarak yönetilir:
WRITE: Oyuncular oyuna bir başlangıç cümlesi yazarak başlar ya da kendilerine gelen çizimi tahmin etmeye çalışırlar. Yazılan cümlelerSUBMIT_TASKpaketiyle Host'a gönderilir.DRAW: Oyuncular kendilerine atanan cümleyi ekranlarındaki çizim tuvali (AdvancedDrawingBoard) üzerinde çizerler. Çizim tamamlandığında tuval, Base64 formatında PNG veri URL'si (data:image/png;base64,...) olarak dışa aktarılır veSUBMIT_TASKpaketiyle Host'a iletilir.ALBUM(Hikaye Zincirinin Sunumu): Tüm turlar tamamlandığında Host, her oyuncunun başlattığı hikaye zincirini (Yazı -> Çizim -> Tahmin -> Çizim...) birleştirir veALBUMdurumuna geçerek tüm katılımcılaraALBUM_INDEX_UPDATEpaketi eşliğinde senkronize bir slayt gösterisi olarak sunar.
Oda Mantığı ve Defter Kaydırma (Book Shifting)
Her oyun odası, tarayıcının WebRTC soket adresi üzerinden aldığı 6 karakterli benzersiz bir Oda Kodu (Peer ID) ile temsil edilir. Oturum yönetimi şu şekilde işler:
- Defter Kaydırma (Book Shifting): Her tur sonunda, her oyuncunun önündeki "defter" (kitap ataması -
assignments) bir sonraki oyuncuya kaydırılır (shift edilir). Böylece oyuncular bir önceki turda başka bir oyuncunun yazdığı cümleyi çizer veya çizdiği resmi tahmin eder. - Zaman Aşımı ve Otomatik Teslimat: Süre dolduğunda oyuncu teslimat yapmamışsa, sistem otomatik olarak yazılmayan alanlara yedek kelime/mesaj ekler veya çizim tuvalini boş bir base64 görseli ile otomatik olarak paketleyip Host'a gönderir (
submitDrawingFallback/submitPromptFallback). - Oturum Kesintileri: Bir oyuncu internet sorunları nedeniyle odadan düştüğünde, Host durum kontrolü yaparak aktif turdaki eksik görevlerin tamamlanmasını koordine eder ve oyun akışının tıkanmasını engellemek amacıyla turları güvenli bir şekilde devretme adımlarını çalıştırır.
E-E-A-T & Güvenlik
Platform tamamen istemci tarafında (Client-Side) çalıştığı için kullanıcıların kişisel verileri, IP adresleri, çizdikleri görseller veya oyun içi yazışmaları herhangi bir uzak veritabanında depolanmaz. Tüm veri transferleri WebRTC'nin doğası gereği uçtan uca şifreli (End-to-End Encrypted - DTLS/SRTP) kanallar üzerinden gerçekleşir. Bu sayede hem maksimum hız ve minimum gecikme sağlanır hem de veri güvenliği en üst seviyede korunur.
Bu teknik dokümantasyon, tarayıcı tabanlı eş zamanlı oyun geliştirme meraklıları ve platformun altyapısını merak eden geliştiriciler için Ahmet Efe Yaşar tarafından hazırlanmıştır.