Sokak Efsaneleri

İstanbul'un sokak hayvanları üzerine bir kaydır-birleştir bulmacası. Kaydırınca bütün yaratıklar aynı anda kayıyor; aynı türden ikisi birleşiyor ve sokak yavrusu sonunda bir efsaneye dönüşüyor.

Rol
Tek geliştirici: oyun tasarımı, kod, araçlar, yayın
Durum
1.0 App Store incelemesinde, sırada Android kapalı test
Dönem
İlk prototip 10 Ekim 2026, App Store'a gönderim 22 Ekim
Teknolojiler
Unity 6, C#, Firebase, BigQuery, AdMob, Unity IAP, Codemagic

Kod gizli; bu yüzden bu sayfa koda link vermek yerine oyunun nasıl kurulduğunu anlatıyor.

5x6 tahtada bir seviye
Efsane bir kedinin kartı
Yaratıklarla Balat sokağı

Özet

Sorun
Yüzlerce bulmaca seviyesinin adil olması ve zorluğun bilinçli artması gerekiyordu; kalabalık bir test ekibi yoktu ve oyun Windows'tan iOS'a çıkmalıydı.
Benim payım
Tek geliştirici olarak hepsi: oyun tasarımı, C# kodu ve testleri, seviye üreticisi ve çözücü, yayın hattı. Çizimleri benim yazdığım brieflerden yapay zekâ üretti.
Sonuç ve durum
500 seviyenin hepsi çözülmüş olarak geliyor; üretilenler genişlik öncelikli aramayla çözülüyor ve 803 test kuralları Unity olmadan sınıyor. Windows'ta geliştirilip bulut Mac'te imzalanan 1.0 App Store incelemesinde; sırada Android kapalı test var.

Sokaktan efsaneye

App Store sayfasındaki hâliyle gerçek oyun, bir de gerçek bir iPhone'dan alınmış ekran.

Ekran 1, toplam 7

  1. Sokak

    Senin sokağın
    1

    Senin sokağın

    Yaratıklar Balat'ta kartpostal gibi bir sokakta yaşıyor. Besledikçe sevgileri artıyor.

  2. İki semt
    2

    İki semt

    Kadıköy ve Balat; her birinin kendi yaratık türleri ve dokunulacak sürprizleri var.

  3. Gerçek bir iPhone'da
    3

    Gerçek bir iPhone'da

    Kadıköy'ün ana sahnesi, cihazdan alınmış.

  4. Oyun

    Bir seviye
    4

    Bir seviye

    Kaydırınca bütün yaratıklar aynı anda kayıyor. Hamleler bitmeden hedefe ulaş.

  5. Efsane!
    5

    Efsane!

    Aynı türden sekizi bir efsane oluyor: Yavru, Afacan, Patron, sonra Efsane.

  6. Koleksiyon

    Albüm
    6

    Albüm

    Beş tür, her birinin dört aşaması: toplanacak yirmi karakter.

  7. Efsane kartı
    7

    Efsane kartı

    Her efsanenin bir lakabı, kısa bir hikâyesi ve üç kostümü var.

Kuralı dene

Tahtayı kaydır ya da ok tuşlarını kullan. Aynı türden ikisi birleşir, sayıları toplanır. 8'lik bir kedi yap, efsaneyi çıkar.

  1. Yavru1+
  2. Afacan2+
  3. Patron4+
  4. Efsane8+

Kuralın bu sayfa için yazılmış küçük bir tekrarı, oyunun kodu değil. Gösterilen en kısa çözüm, oyunun kullandığı fikirle bulunuyor: genişlik öncelikli arama.

Tahta odaktayken ok tuşları onu kaydırır. Altındaki düğmeler de aynısını yapar; tahtanın tablo hâli biraz aşağıda.

Hamle 0 / 8. En kısa çözüm 5 hamle.

Tahta odaktayken ok tuşları çalışır.Tahtada yana kaydır. Yukarı ve aşağı da kaydırmak için önce Tahtada oyna düğmesine bas.

Tahtayı tablo olarak göster
Sütun 1Sütun 2Sütun 3Sütun 4
Satır 1Kedi 1boşMartı 1Kedi 1
Satır 2Kedi 1Kedi 1boşKedi 1
Satır 3Kedi 1Martı 1Kedi 1boş
Satır 4boşboşMartı 1Kedi 1

Nasıl çalışıyor

Adil seviyeler üretmek, kalabalık bir test ekibi olmadan zorluğu ölçmek, Windows'tan iOS'a yayın yapmak ve yapay zekâyla üretilen çizimleri okunur tutmak.

Her seviye sen görmeden çözülüyor

1–60 arası seviyeler Unity içindeki bir seviye editöründe elle ayarlandı. 61–500 arası tohumlu bir üreticiden geliyor: her aday tahta genişlik öncelikli aramayla çözülüyor, bir yaratık kendi türüyle asla buluşamıyorsa atılıyor ve yalnızca derinliği (en kısa çözümün uzunluğu) yuvasına, yani seviyenin onluk bloktaki yerine uyuyorsa tutuluyor. Geçen seviyeler, oyunla birlikte gelen önceden üretilmiş seviye tablosuna yazılıyor.

  1. TohumMulberry32: aynı tohum, aynı tahta
  2. Üreticiher yuva için tahta tarifleri
  3. Çıkmaz kontrolüher yaratık türüyle buluşabilir mi?
  4. BFS çözücüen kısa çözüm seviyenin derinliği
  5. Hamle bütçesiderinlik artı pay
  6. Seviye tablosuönceden üretilmiş: 61–500, hepsi çözülmüş

Zorluk sanal bir oyuncuyla ölçülüyor

Bir oyuncu modeli birkaç kaydırma ileriye bakıp hamlesini softmax ile seçiyor; parametreleri benim kendi yıldız geçmişime göre ayarlandı. Her aday seviyeyi iki bine kadar oynuyor ve kaybedilen oyunların payı, seviyenin yuvası için belirlenen aralığa düşmek zorunda. Her onuncu seviye zor; bu yüzden eğri testere dişi gibi.

Hedeflenen kayıp oranı, 61–80. seviyeler
  • Normal seviye
  • Zor seviye, her onuncu
Tablo olarak göster
SeviyeHedef kayıp
61%15–28
62%15–28
63%15–28
64%22–35
65%22–35
66%22–35
67%28–40
68%28–40
69%28–40
70%40–55
71%15–28
72%15–28
73%15–28
74%22–35
75%22–35
76%22–35
77%28–40
78%28–40
79%28–40
80%40–55
Çözüm derinliğine göre ölçülen kayıp (+2 hamle payıyla)
Tablo olarak göster
DerinlikÖlçülen kayıp
4yaklaşık %10
5%20–30
6%45–55
7%60–70

Altı katman, tek yön

Kurallar, çözücü ve ekonomi Unity içermeyen saf bir C# çekirdeğinde duruyor; böylece 803 test .NET'te saniyeler içinde koşuyor. Her katman ayrı bir assembly ve bağımlılıklar yalnızca aşağıyı gösteriyor.

  1. Editorsahne kurucu, seviye editörü27 dosya
    Gametahta, HUD, sahneler107 dosya
    Metaseviyeler arası ilerleme3 dosya
  2. şunlara bağımlı
    Servicesarayüzler + Firebase, AdMob, IAP adaptörleri55 dosya
    DataScriptableObject katalogları ve ayarlar8 dosya
  3. şunlara bağımlı
    Coresaf C#: kurallar, çözücü, ekonomi48 dosya

Denge, yeni sürüm olmadan değişiyor

Her ayar önce koddaki varsayılandan, sonra ayar dosyasından, en son Remote Config'ten okunuyor. Analitik, oyuncu izin kartını kabul ettikten sonra başlıyor; günlük BigQuery aktarımı, oyuncuların nerede takıldığını gösteren bir seviye hunisini besliyor.

  1. Unity istemcisilevel_start, level_end
  2. İzin kartıKVKK, her olaydan önce
  3. Firebase AnalyticsCrashlytics ile
  4. BigQuerygünlük aktarım, SQL huni
  5. Remote Config121 parametre oyuna geri

Mac olmadan iOS'a yayın

Windows'ta geliştiriyorum. Unity Xcode projesini dışa aktarıyor, bir GitHub release onu Codemagic'e taşıyor, bulut Mac de derlemeyi imzalayıp yüklüyor. App Store Connect'in kendisi de API'si üzerinden betiklerle yönetiliyor: derlemeler, uygulama içi satın almalar, inceleme notları.

  1. Windows'ta UnityIL2CPP, ARM64
  2. Xcode dışa aktarımısıkıştırılmış proje
  3. GitHub releaseküçük, gizli bir CI deposu
  4. CodemagicMac mini M2: pod, imza, derleme
  5. TestFlightsonra App Store incelemesi

Sert kontrollerden geçen yapay zekâ çizimleri

Çizim brieflerini ben yazdım, görselleri Codex üretti. Ardından deterministik Python betikleri sprite'ları birleştirip her yaratığı 64 pikselde, gri tonlamada, çıplak siluet olarak ve üç tür renk körlüğü altında kontrol ediyor; böylece bir tür küçük ve kalabalık bir tahtada bile tanınır kalıyor.

Tam renk
Tam renk
Döteranopi
Döteranopi
Siluetler
Siluetler
İlk karanlık tahta ve oyun testlerinden sonra gelen renkli yeniden tasarım.
İlk karanlık tahta ve oyun testlerinden sonra gelen renkli yeniden tasarım.

Beş prototip, tek oyun

Unity'de tek satır yazmadan önce beş hızlı HTML5 prototipi yapıp oynadım. Kaydır-birleştir olanı kaldı.

Prototip 1, toplam 5

  1. Blast

    Blast

  2. Sort

    Sort

  3. Block puzzle

    Block puzzle

  4. Çini kaydır

    Çini kaydır

  5. Sokak Efsaneleri

    Sokak Efsaneleriseçilen

Rakamlarla

500
seviye, her biri yayından önce çözülmüş
803
Unity olmadan, saf .NET'te koşan çekirdek testi
1.042
Unity içinde EditMode testi
474
Unity içinde PlayMode testi
121
oyunun okuduğu Remote Config parametresi
49k
satır C#

Yine aynı şekilde vereceğim kararlar

Sıradaki projeSurebet AnalyzerBirden çok kaynaktaki futbol oranlarını gerçek zamanlı okuyup ima ettikleri olasılıkların toplamı %100'ün altına düşen kombinasyonları işaretliyor.