Chalko — Çizerek Anlatma Oyunu
iPhone ve iPad için Türkçe bir parti oyunu: bir oyuncu kelimeyi gerçek bir tahtaya çizer, takımı tahmin eder; kelimeleri dağıtmak, süreyi tutmak ve puanı saymak uygulamanın işi.
- Rol
- Tek başıma — fikir, tasarım, kod
- Platform
- iPhone ve iPad · 2026
- Durum
- Dahili TestFlight sürümleri
- Teknolojiler
- Swift · SwiftUI · Observation · AVFoundation
Fikir
Kalabalık bir oda için bir çizim oyunu; telefon işin önüne geçmiyor.
Bir oyuncu tahtaya ya da kâğıda çizer, takımı tahmin eder. İki ila dört takım oynar; oyundan önce tur süresi, tur sayısı ve tur başına bedava pas seçilir. Bilinen kelime bir puan; pas, turun bedava pasları bitene kadar ücretsiz, sonra bir puan götürür. En yüksek puanda eşit kalan takımlar galibiyeti paylaşır, rövanş aynı ayarlarla başlar. Fikirden koda kendi projem; yapay zekâ kodlama asistanlarıyla geliştirdim.
Tasarım
Bir yazı tahtası: yeşil tahta, krem kâğıt ve her takım için bir pastel.
İlk sürüm gürültülü bir mavi, sarı ve limon yeşili çizgi filmdi. Bir süre sonra onu bir yazı tahtası olarak yeniden çizdim; önce bir tasarım tuvalinde, sonra SwiftUI’da: krem kâğıt, koyu yeşil tahta, sıcak mürekkep, sert gölgeli tombul konturlar ve tüm metinlerde Baloo 2. İşaret, tebeşir renkli bir çerçevede yeşil bir tahta; altında bir oluk ve iki parça tebeşir var. Arka planın tamamı oynayan takımın pastelini alıyor, işaretçisi daha koyu bir nokta; böylece her ekran sıranın kimde olduğunu söylüyor. Her zorluk seviyesinin kendi tonu ve ikonu var. Metinler esprili bir Türkçe: “Süre bitti, kalemler yere!” gibi.
Mühendislik
Tek bir durum makinesi ve kayamayan bir sayaç.
Observation framework ile Swift ve SwiftUI. Tek bir durum makinesi kurulumdan final skorlarına kadar her ekranı yönetiyor. Sayaç, sayılan tiklerden değil her 200 ms’de kontrol edilen bir bitiş zamanından hesaplanıyor; bu yüzden duraklatma tam isabetli ve uygulama arka plana geçince oyun kendini duraklatıyor. Ses, ambient bir ses oturumunda çalıyor; sessiz moda uyuyor ve çalan müziğe karışıyor. Son on saniyede sayaç kırmızıya dönüp atıyor, tik ve tak sesleri dönüşümlü ve giderek yükselerek çalıyor; cevap düğmeleri her cevaptan sonra 0,8 saniye dokunuşları yok sayıyor, böylece çift dokunuş bir kelimeyi atlatamıyor. Ses ve titreşimin ayrı anahtarları var.
Telefondan hiçbir şey çıkmıyor: hesap yok, reklam yok, analitik yok. Ayarlar ve görülen kelimelerin geçmişi UserDefaults’ta duruyor; App Store gizlilik cevabı “Veri Toplanmıyor”. Sesler, bir Python betiğiyle üretilmiş 24 özgün marimba tonu; hiçbiri sert kesilmiyor, hepsinin doğal bir sönümü var. Ana ekranda, oyunun kendi kelimelerinden hafif bir yağmur düşüyor ve elle çizilmiş yeşil bir halka onlardan birini çevreliyor; Canvas ile çiziliyor ve Hareketi Azalt açıkken tek bir duran kare gösteriyor. Henüz birim testi yok; beş UI testi tüm akışı, rövanşı, oyun sonu ekranını, cevap beklemesini ve App Store ekran görüntülerini kapsıyor; oyunu ayrıca Simülatör’de iPhone SE, iPhone 17 Pro Max ve iPad Pro üzerinde oynayarak test ettim.
Kelimeler
En zor kısım, aynı kelimeyi asla iki kez vermemekti.
Bir kelime aynı oyunda geri gelmemeli, önceki oyunlarda kimsenin görmediği kelimeler önce çıkmalı, her seviye bir alt seviyeden sabit bir dilim almalı; turu geri almak ya da özeti düzeltmek görülmüş bir kelimeyi desteye geri koymamalı. Her oyun kullanılan kelimelerin, her seviye de görülenlerin kaydını tutuyor; her yeni deste ikisinde de olmayan kelimelerden çekiliyor. Bir seviyenin tamamı görülünce geçmişi bu oyunun kelimeleriyle yeniden başlıyor.
Kelimeyi gizli tutmak da az kalsın o kadar zordu. Çizen telefonu tutarken takım tahtaya bakıyor; bu yüzden kelime kart basılı tutulana kadar gizli kalıyor, her yeni kelime bir an açılıp yeniden kapanıyor.
Öğrendiklerim
Seçmek, çoğaltmaktan iyidir.
Bir kalite taraması çizmesi zor ya da seviyesine uymayan 127 kelime buldu; listeler 2.700 kelimeden 2.607’ye indi. Soyut kelimeleri en zor seviyeye ayırmak seviyeleri birbirinden belirgin şekilde ayırdı. Gerçek zamanlı sayaçlar sayılan tiklerden değil bitiş zamanlarından gelmeli. Parti oyunları büyük dokunma alanları, ses ve titreşim geri bildirimi, yanlış dokunuşu affeden düzeltmeler ve çift dokunuşa karşı kısa bir kilit ister. Bir sesin doğal bir sönümü olmalı: sert kesilen kuyruk, örnek ne kadar iyi olsa da ucuz duyuluyor. Yapay zekâ ajanları da mekanik işi en iyi yazılı görevler olarak aldıklarında yapıyor; ardından ayrı bir build ve inceleme adımıyla.
Ekranlar
- Oyna: Ana ekran: tahta işareti, Oyna, ayarları altında yazan hızlı başlat ve ses, titreşim, yardım ve ayarlar düğmeleri.
- Zorluğu seç: Her birinin kendi ton ve ikonuyla, kelime sayılarıyla dört seviye ve altında oyunun ayarları.
- Sıra kimde?: Açılış kurasından sonra: başlayan takım, telefonu saklama hatırlatması ve puan tablosu.
- Çiz, söyleme: Gizli kelime, geri sayım, tur puanı, geri al ve Pas ile Bildi.
- Kalemler yere: Süre bitti; takım son kelimenin zamanında bilinip bilinmediğini söylüyor.
- Yanlış dokunuşu düzelt: Turun her kelimesi; bir dokunuş Bildi ile Pas’ı değiştirir, puan da takip eder.
- Ve kazanan: Rövanş düğmesiyle final skorları.
- Tek kartta kurallar: Nasıl oynanır; ilk açılışta gösterilir.
Teknoloji
- Uygulama
- Swift, SwiftUI, Observation
- Veri
- UserDefaults, bundled word lists
- Ses
- AVAudioPlayer, UIFeedbackGenerator, 24 original sounds made with a Python script
- Tasarım
- design canvas, Baloo 2
- Araçlar
- XcodeGen, Xcode UI tests, Google Antigravity