Taht ve Kan — Asenkron Strateji Oyunu Vaka Çalışması
Taht ve Kan, iki oyuncunun aynı anda çevrimiçi olmasını gerektirmeyen, sıra tabanlı asenkron bir ortaçağ strateji oyunu. Tarayıcıda anında oynanır; Android’de yerel uygulama olarak çalışır.

Problem: derinlik ile zaman maliyeti arasındaki boşluk
Mobil strateji pazarında ağır MMO’lar derinlik sunuyor fakat günlük saatler ve aylarca bağlılık istiyor. Hafif tarayıcı oyunları hemen başlıyor fakat çoğu uzun vadeli karar derinliği üretmiyor. Taht ve Kan, günde birkaç dakikayla oynanabilen fakat gerçek stratejik sonuçlar üreten bir orta alan hedefliyor.
Çözüm: asenkron 1v1 düello
Oyuncu sırası geldiğinde bildirim alır, üç eylem puanını kullanır ve turu bitirir. Maç günlere yayılabilir; rakibin aynı anda ekran başında olması gerekmez. Tur süreleri 30 dakika, 2 saat veya 4 saat olarak seçilebilir. Süre dolduğunda sıra otomatik geçer ve maç kilitlenmez.
| Oyuncu sorunu | Ürün cevabı |
|---|---|
| Rakip bulamıyorum | MMR tabanlı otomatik eşleştirme ve kuyruk boşsa yapay zekâ rakip. |
| Ne yapacağımı bilmiyorum | Coach-mark kullanan interaktif ilk maç eğitimi ve senaryo zaferi. |
| Rakibim oynamıyor | Tur zaman aşımı, otomatik sıra atlama ve terk edilen maçın yapay zekâ tarafından devralınması. |
| Bir hafta sonra sıkıldım | Aylık sezon, ligler, günlük ve haftalık görevler, savaş bileti ve günün etkinliği. |
| Yalnız oynuyorum | Loncalar, arkadaşlık, düello daveti, maç ve lonca sohbeti. |
| Ödeme yapan kazanıyor | Elmasla satılan hiçbir öğe oyun gücüne dokunmaz; ekonomi yalnızca kozmetiktir. |

Ürün sistemi
- Harita: kare veya hex ızgara yerine araziyi takip eden 22 asimetrik bölge ve yumuşak sahiplik nüfuzları.
- Ekonomi: altın, gıda, prestij ve nüfus; bölge geliri, vergi, açlık, sefer ve lojistik giderleri.
- Ordu: mızraklı, kılıçlı, okçu, ağır süvari, muhafız ve mancınıktan oluşan altı birlik türü.
- Savaş: birlik gücü, kale, teknoloji, general, şans ve 0,85×–1,35× etkili kuşatma mini-oyunu.
- Derinlik: üç dallı dokuz kademelik teknoloji, casusluk, olaylar ve geri dönüş kartları.
- Rekabet: ilk beş yerleştirme maçıyla Elo tabanlı MMR, Bronz’dan Efsane’ye ligler ve aylık sezon finali.
- Sosyal: loncalar, arkadaşlar, sohbet, hanedan arması, profil ve şöhret salonu.
- Yönetim: admin/mod/helper hiyerarşisi, süreli yasaklama, şikâyet kuyruğu, maç izleme ve toplu duyuru.



Neden farklı?
- Asenkron format: oyuncuların aynı anda çevrimiçi olma zorunluluğunu kaldırır.
- Adil monetizasyon: ödeme kalemleri yalnızca görseldir.
- Boş kuyruk yok: yapay zekâ rakip, düşük oyuncu sayısında bile ürün döngüsünü çalıştırır.
- İki gerçek istemci: web Next.js ile, Android Kotlin ve Jetpack Compose ile geliştirilmiştir; Android bir WebView sarmalayıcısı değildir.
Teknoloji yığını
| Web istemci | Next.js 15 App Router, TypeScript, Tailwind ve el yazımı UI kütüphanesi |
|---|---|
| Sunucu mantığı | Next.js Server Actions; tüm doğrulama sunucuda |
| Veritabanı | Supabase / PostgreSQL, RLS açık ve yalnız sunucu erişimi |
| Dağıtım | Vercel, fra1 bölgesi |
| Bildirim | Web Push, VAPID ve service worker |
| Android | Kotlin, Jetpack Compose, yerel oyun motoru ve imzalı APK/AAB |
| E-posta | Resend |
Üretim ölçeği
Öne çıkan mühendislik kararları
Coğrafya performansın bir parçasıdır
Veritabanı Frankfurt’tayken sunucu fonksiyonlarının başka kıtada çalışması her sorguya yaklaşık 90 ms ağ gecikmesi ekliyordu. Fonksiyonların fra1 bölgesine alınması ve hesap yüklemesinin yedi gidiş-dönüşten ikiye indirilmesi, kullanıcı tarafından hissedilen ağırlığın gerçek nedenini ortadan kaldırdı.
Migration ile dağıtım aynı ana bağlı değildir
Yeni sütun okuyan sorgular korumalı çalışır; sütun henüz yoksa varsayılan değer döner ve özellik sessizce kapalı kalır. Böylece kod migration’dan önce dağıtılsa bile oyun ayakta kalır.
Sunucu maliyeti aktif turla ölçeklenir
Biten maçlar ağır kayıtları yüklemez, sekme arka plandayken yoklama durur ve ağır harita bileşeni saniyelik sayaçtan ayrılmıştır. Maliyet kayıtlı oyuncu sayısından çok o anda oynanan tur sayısına bağlıdır.
