Geri Dön / Back to Lobby

Geliştirici Notları: Gizli Kelimeler

Giriş ve Mimari Yaklaşım

Gizli Kelimeler (Ajan Kelimeler), popüler casusluk ve kelime tahmin oyunu Codenames konseptine dayalı, tamamen tarayıcı tabanlı çalışan ve herhangi bir sunucu veritabanına ihtiyaç duymayan çok oyunculu (multiplayer) bir kelime oyunudur. Oyun, Paira Games platformunun genel vizyonuna uygun şekilde, WebRTC teknolojisiyle Peer-to-Peer (P2P) olarak tasarlanmıştır. Bu sayede tüm veriler doğrudan oyuncuların tarayıcıları arasında aktarılır, gecikme süresi en aza indirgenir ve tam veri gizliliği sağlanır.

P2P Ağ Topolojisi (Host-Client Yapısı)

Gizli Kelimeler, P2P mimarisinde Host-Client modelini benimser:

Kart Matrisi ve Rol Dağılımı Kuralları

Oyun başladığında Host, oyuncu listesini analiz ederek her iki takımda da (Takım A ve Takım B) en az bir Ajan (Spymaster) ve en az bir Tahminci (Guesser) bulunup bulunmadığını kontrol eder. Bu koşul sağlanmadığı sürece oyun başlatılamaz. Oyun başlatıldığında şu adımlar izlenir:

Rol Tabanlı Güvenli Bilgi Maskeleme (Security & Anti-Cheat)

Codenames tarzı oyunların doğası gereği, Tahminci (Guesser) rolündeki oyuncuların hangi kartın hangi renkte (takımda) olduğunu veya suikastçının konumunu görmemesi gerekir. Gizli Kelimeler, istemci taraflı hileleri (Inspect Element ile HTML/JS durumunu okuma vb.) tamamen önlemek için benzersiz bir **rol tabanlı veri maskeleme** mekanizması kullanır:

Host, oyun durumunu (state) istemcilere gönderen broadcastState fonksiyonunda, her bir peer'ın rolünü tek tek kontrol eder. Eğer hedef oyuncunun rolü GUESSER ise, oyun durumunun kopyasını oluşturarak henüz açılmamış (revealed: false) tüm kartların takım bilgisini HIDDEN olarak değiştirir. Bu sayede tahmincilerin tarayıcı belleğine rakip veya suikastçı kartlarının gerçek renk bilgisi asla ulaşmaz.

Gerçek Zamanlı Veri Senkronizasyonu (Data Sync)

Oyun döngüsü boyunca aşağıdaki aksiyon paketleri RTCDataChannel üzerinden anlık olarak aktarılır:

Oturum Yönetimi ve Süre Takibi

Süre senkronizasyonunda istemciler ile Host arasındaki gecikmeleri tolere etmek için window.PairaTime.now() zaman damgaları kullanılır. Host'un gönderdiği durationLeft verisi yerel zaman farkına eklenerek requestAnimationFrame/setTimeout yardımıyla her tarayıcıda pürüzsüz akan bir geri sayım gösterilir.

Bir oyuncunun ağ bağlantısı kesildiğinde (handlePlayerLeave), kopan oyuncu aktif turdaki Ajan veya Tahminci ise oyunun kilitlenmesini önlemek adına Host turu otomatik olarak sonlandırır (switchTurn) ve sırayı diğer takıma geçirir.

Bu teknik dokümantasyon, P2P tabanlı web oyunları mimarisini açıklamak amacıyla Ahmet Efe Yaşar tarafından Paira Games projesi kapsamında hazırlanmıştır.