QUBU GAMES
QUBU GÜNLÜĞÜ

Taht ve Kan’ı Geliştirmek: Asenkron Strateji Oyunundan 10 Gerçek Mühendislik Dersi

21 Temmuz 2026
← Günlüğe dön3 dk okumaGüncellendi: 3 Eylül 2026

Taht ve Kan’ın teknik günlüğü; gerçek mimari kararlarını, üretimde yaşanan hataları ve bunlardan çıkarılan kalıcı kuralları anlatır.

1. Mimari: istemci talep eder, sunucu karar verir

React istemci → Server Actions → saf oyun mantığı → Supabase/PostgreSQL

İstemciye güvenilmez. İstemci yalnızca “şu bölgeye saldır” talebi gönderir; sıra, eylem puanı, komşuluk ve yetki sunucuda doğrulanır. Savaş, ekonomi, Elo ve lig eşikleri veritabanından bağımsız saf fonksiyonlar halinde tutulur. Bütün tablolarda RLS açıktır ve anonim anahtarla satır okunamaz.

2. Kimlik: misafir ve hesaplı oyuncu aynı çözümleyicide

Misafir oyuncu oyun başına httpOnly çerezle, giriş yapan oyuncu 30 günlük scrypt hash’li oturumla tanınır. resolvePlayer() iki yolu da kabul eder. Gizli oyun token’ı hiçbir genel select listesine eklenmez; istemciye dönen alanlar elle sabitlenir.

3. Performansta gerçek suçlu coğrafyaydı

Veritabanı Frankfurt’tayken sunucu fonksiyonları varsayılan başka bir bölgede çalışıyordu. Bir sayfadaki onlarca sıralı sorgu yaklaşık 90 ms ağ gecikmesini tekrar tekrar ödüyordu. vercel.json ile fonksiyonlar fra1 bölgesine alındı ve hesap yükleme yedi sorgudan iki korumalı sorguya indirildi.

Taht ve Kan bölge yönetim paneli ve strateji haritası
Gerçek bir yapay zekâ maçından bölge yönetimi ekranı.

4. Migration dayanıklılığı

Şema değişikliği ve kod dağıtımı her zaman aynı anda yapılmıyor. Yeni sütunu okuyan sorgu ayrı ve korumalı çalışır; sütun yoksa varsayılan döner. Bu kuralın ihlal edildiği daily_streak olayı, ana select’in tamamını düşürüp kozmetikleri ve admin bayrağını sıfırladı. Kalıcı ders: korumalı sütunu ana select’e koyma.

5. Asılı maç problemine üç savunma

  1. Tur son tarihi dolunca sıra otomatik geçer.
  2. Oyuncu, zaman aşımı ve yapay zekâ aynı advanceTurnCore() fonksiyonunu kullanır.
  3. Uzun süre terk edilen maç yapay zekâya devredilebilir.

Kullanılmayan eylem puanına altın ve gıda verilmesi, oyuncuyu turu bekletmeden bitirmeye yönlendiren küçük bir ekonomik teşviktir.

6. Haritanın üç nesli

İlk sürüm prosedürel SVG hex ızgaraydı; teknik olarak temiz ama jenerikti. İkinci sürüm boyalı karo atlasıydı; daha iyi görünse de tahta oyunu hissini korudu. Güncel sürüm tek parça boyalı dünya üzerine araziyi izleyen Voronoi bölütlemesiyle 22 asimetrik bölge kuruyor. Yapay beyaz sınırlar kaldırıldı; sahiplik yumuşak renk nüfuzuyla okunuyor. Eski 40 bölgeli maçlar bozulmasın diye görünüm oyun kaydı bazında seçiliyor.

Taht ve Kan oyunundaki el boyaması 22 bölgeli dünya haritası
Gerçek ürün ekranı: 22 bölgeli el boyaması dünya haritası.

7. Android bir WebView değildir

Android sürümü TWA sarmalayıcı olarak başlayıp Kotlin ve Jetpack Compose ile yerel uygulamaya dönüştürüldü. Oyun motoru Kotlin’de yeniden yazıldı; uygulama çevrimdışı oynanabiliyor ve çevrimiçi modda aynı arka ucun mobil uçlarını kullanıyor. Yeni veri alanlarına varsayılan değer verilmesi ve bilinmeyen alanların yok sayılması eski yerel kayıtların kırılmasını engelliyor.

8. Sunucu maliyetini oyuncu sayısından ayırmak

  • Biten maçlar savaş, casusluk ve olay kayıtlarını yüklemez.
  • document.hidden iken yoklama döngüleri durur.
  • Sohbet 8 saniye, tur yenileme 18 saniye aralıkla çalışır.
  • Ağır harita memoize edilir; saniyelik sayaç ayrı bileşendir.

Sonuçta maliyet kayıtlı oyuncu sayısından çok o anda oynanan tur sayısıyla ölçeklenir.

9. Platform tuzakları

  • "use server" dosyaları yalnız async fonksiyon export edebilir.
  • Sunucuya özgü modüller istemci bileşenine import edilemez.
  • Windows’taki büyük/küçük harf duyarsızlığı recentGames.ts ve RecentGames.tsx çakışması üretti.
  • Render sırasında server action içinden yol geçersizleştirme çağrısı yapılamadığı için e-posta doğrulama akışı yeniden kuruldu.

10. Şu an nerede?

Kapalı beta; kayıt, onay, giriş, e-posta doğrulama, davet ve geri bildirim toplama devrede. Otuz migration uygulanmış durumda. Yerel Android istemcisi v1.8.1. Gerçek ödeme entegrasyonu bilinçli olarak ertelendi; öncelik hata ayıklama, denge ve oyuncu tutundurma.

Taht ve Kan üç dallı teknoloji ağacı ekranı
Üç dallı, dokuz kademelik teknoloji sistemi.