# Zar atmayan bir bulmaca kurmak: SilkWard'da her hamle aynı sonucu üretir

> Düğüm-çizgi bir tahtada deterministik hamlelerle ilerleyen, çevrimdışı bir bulmaca oyunu; 36+6 bölümü tek bir TypeScript çekirdeği web ve mobile besliyor.

- Şu an ne yapıyor: Düğüm-çizgi bir tahtada 36 bölüm + 6 gizli bölümü, şans ya da refleks olmadan tamamen deterministik hamlelerle çözdürüyor; tek TypeScript çekirdeği web (PWA) ve mobil (iOS/Android) istemcisini aynı anda besliyor. silkward.com üzerinden tarayıcıdan oynanabilir.
- Tür: Web, Mobil
- Durum: Durduruldu
- Başlangıç: 2026-09-09
- Labs’tan çıkış: 2026-09-23
- Teknolojiler: TypeScript, Next.js, React, Expo, React Native, Vitest
- Etiketler: #oyun, #bulmaca, #determinizm, #cevrimdisi
- Web sitesi: https://silkward.com
- Kaynak: https://muhammetsafak.com/tr/labs/silkward-lab/
- Dil: tr-TR
- Yazar: Muhammet Şafak

---
Sıra tabanlı bulmaca benim için Hitman GO'nun bıraktığı boşluğu dolduruyordu:
az sayıda kural, sıfır şans, sonucu düşünerek üretme hissi. SilkWard'ı bu
boşluğa kurdum — düğüm-çizgi bir grafta ilerleyen, ağırlıkla sözsüz anlatılan
bir bulmaca.

## Şans yok, refleks yok, sürpriz kural yok

Bu üç ilke oyunun tasarım felsefesini özetliyor. Düğüm-çizgi grafında
attığınız her adım, düşmanların da aynı deterministik kuralla ilerlemesini
tetikliyor; bir bölümü kaybederseniz bunun sebebi zarın kötü gelmesi değil,
hamlenin kendisi. 36 bölüm + 6 gizli bölüm üç perdeye yayılıyor.

## Tek çekirdek, iki platform

Kural motoru sıfır bağımlılıkla yazıldı: ne DOM'u ne React Native'i tanıyor,
yalnız saf TypeScript. Bu saflık, web (Next.js tabanlı PWA) ile mobil (Expo)
istemcisinin aynı davranışı iki kez yazmadan paylaşmasını sağlıyor — kural
motoru ve çözücü ortak bir çekirdek pakette, bölüm verisi ayrı bir veri
paketinde, arayüz metinleri ise ayrı bir dil paketinde yaşıyor; platforma
özgü olan yalnızca arayüz katmanı.

## Bölüm nasıl kalibre ediliyor

Yeni bir bölüm tek dosyayı yazmakla bitmiyor: önce düzenleyici araçla
tasarlanıyor, sonra veri paketine bir seviye tanımı olarak aktarılıyor.
Bölümün asgari hamle sayısı elle tahmin edilmiyor — solver-cli aracının BFS
ile bulduğu sayı yazılıyor, ardından bölüm tasarımı bu sayıya göre kalibre
ediliyor. Bir doğrulama komutu bu sayının her değişiklikte hâlâ doğru
olduğunu yeniden sınıyor, böylece "par" değeri zamanla sessizce güncelliğini
yitirmiyor.

Kural motorunun kendisi de aynı disipline tabi: çekirdek pakette rastgele
sayı üreteci ya da sistem saatine erişim yasak — determinizm bir yorum
satırıyla değil, derleme zincirindeki bir kısıtla korunuyor. Devreye
alınabilecek bir yapay zekâ görsel hattı da çekirdek koddan ayrı, yalnızca
geliştirme aracı dizininde duruyor; denendi, ama çıktısı onay sürecinden
geçmediği için oyuna hiç girmedi — oynanan sürümün görselleri tamamen
prosedürel üretildi, oyunun runtime'ı hiçbir yapay zekâ istemcisi
taşımıyor.

## Ağa neredeyse hiç çıkmayan bir oyun

İlk yükleme SilkWard'ın kabuğunu (arayüz, kod, görseller) önbelleğe alıyor;
o andan sonra oynanış hiçbir ağ isteği yapmıyor. Tek istisna sesler: 26 ses
dosyası baştan indirilmiyor, her biri ilk çalındığı anda bir kez indirilip
kalıcı önbelleğe yazılıyor — bu yüzden uçak modu güvencesi ikinci oturumdan
itibaren geçerli, ilk oturumda ağ yoksa oyun sessiz çalışıyor, çökmüyor. Bu
sonradan eklenen bir "çevrimdışı mod" değil, en baştan konan bir kısıt:
çekirdek ve uygulama katmanında `fetch` kullanımı lint kurallarıyla
engelleniyor, `XMLHttpRequest` kullanımı ise ayrı bir kaynak tarama testiyle
yakalanıyor — kısıtın kendisi koda bağlı, gözle denetlenen bir söz değil.

Kayıt burada durduruldu: oyun bugün silkward.com üzerinden oynanabilir
durumda, ama üzerinde yeni bir geliştirme yapılmıyor.
