Taşırma!: Elinde Sallanan Bardağı Doldurma Oyunu
Musluktan bardağa su doldurmak mutfakta yapılabilecek en sıkıcı işlerden biri. Bardak bir yerde durmuyorsa ama, iş değişiyor.
Taşırma! tam olarak bu fikirden çıktı. Çizgi film tadında bir elin avucunda bir bardak duruyor ve kendi başına dik durmuyor. Bir parmağınla kolu sağa sola kaydırıp bardağı dengede tutuyorsun, öbür parmağınla musluğu açık tutuyorsun. Amaç yeşil çizgiye kadar doldurup zamanında bırakmak.

Birbirine engel olan iki iş
Bardak ters çevrilmiş bir sarkaç gibi davranıyor. Ağırlığı avucun dışına kaydığı an devrilmeye başlıyor ve düzeltmezsen bir iki saniyede yerde. Yani denge parmağı hiç dinlenmiyor.
Musluk ise sabit. Bardak sağa yatınca onu kurtarmak için eli sağa kaydırıyorsun, bu sefer su bardağın içine değil kenarına düşüyor. Bardağı kurtarmak ile bardağı doldurmak ters yönlere çekiyor. Oyunun asıl zorluğu bu.
Bir de havadaki su var. Musluğu bıraktıktan sonra yoldaki su düşmeye devam ediyor. Erken bırakıp yoldakinin doğru yere ineceğine güvenmen gerekiyor. Çizgi dolana kadar bekleyenler, en azından ilk birkaç denemede, hep taşırıyor.
Su
En emin olmadığım kısım sıvıydı, o yüzden ilk onu yaptım. Telefonda akıcı çalışmazsa ortada oyun yoktu. Kuralım basitti: Three.js ile gerçek bir telefonda 60 fps’e ulaşırsam devam, ulaşamazsam her şeyi Unity ile baştan yazacaktım.
Gerek kalmadı. Su yaklaşık 900 parçacıktan oluşuyor ve “double density relaxation” yöntemiyle hareket ediyor (Clavet ve arkadaşlarının 2005 tarihli çalışması). Her parçacık yarım çözünürlüklü bir dokuya yumuşak bir leke olarak çiziliyor, sonra tek bir tam ekran geçiş bu bulanık alanı koyu konturlu, üstü parlak, düz renkli tek bir çizgi film sıvısına çeviriyor. Yakından bakınca sıvı gibi görünüyor, altında 900 nokta var.
Hızlı parçacıklarla ince bardak duvarları iyi anlaşmıyor; er ya da geç bir damla duvarın içinden geçip gidiyor. Ben de duvarları kalınlaştırmak yerine her parçacığa biraz hafıza verdim. Parçacık bardağın içinde mi dışında mı, biliyor. İçeri yalnızca açık ağızdan girebiliyor, dışarı yalnızca kenardan taşarak çıkabiliyor. Böylece hiçbir damla yan duvardan sızamıyor ve her taşma tam olduğu yerde sayılıyor. Puanlama da bunun üzerine kurulu.
Kaplar ve sıvılar
Her kabın ölçülmüş bir profili var: her yükseklikteki genişliği, bir de kulp ya da sap gibi dışarı taşan parçaları. Su bardağı, dar boyunlu şişe, kupa, şarap kadehi, ölçü kabı ve sürahi farklı doluyor, farklı devriliyor.
İnce sapı ve küçük tabanıyla şarap kadehinin en zor kap olacağını düşünüyordum. Denemelerde düz bir bardaktan kolay çıktı. Sonunda her şeyi fiziğe bırakıp doğru hissettirmesini ummak yerine her kaba kendi tutuşunu ve devrilme açısını verdim.
Sıvıların da kendi huyları var:
- Meyve suyu: aslında renkli su.
- Gazoz: musluğu kapattıktan sonra köpürüyor, yani daha da erken durman gerekiyor. İlk sürümde köpük hiç sıvıya dönmüyordu; çizgide görünen bardaklar yine de kaybettiriyordu. Şimdi gerçek köpük gibi çöküyor.
- Bal: yavaş akıyor ve musluk kapandıktan sonra bir süre daha damlıyor. Tatlı bir eziyet.

Bölümler ve ayarları
Dört dünyada 48 bölüm var: Mutfak, Bahçe, Kafe ve Laboratuvar. İlerleyen bölümlerde basıncı dalgalanan musluk, rüzgâr, borusu üzerinde kayan musluk, yorulup titremeye başlayan el ve art arda birkaç bardak çıkıyor. Mutfağı bitirince sonsuz mod açılıyor ve gittikçe zorlaşıyor.
Ayarların çoğu oyunu her gün kendi telefonumda oynayıp neyin yanlış hissettirdiğini fark etmekten geldi:
- İlk bölümde kaybetmek imkânsızdı, mutfağın son bölümü ise fazla zordu. İkisi de yeniden ayarlandı; ilk bölümlerde artık hareketi gösteren yarı saydam bir el var.
- Rüzgâr vardı ama hissedilmiyordu. Şimdi üç kat daha güçlü.
- iPhone’da ilk açılışta hiç ses çıkmıyordu. Web Audio ile sessiz mod düğmesi, işler doğru kurulmadıkça anlaşamıyor. Ses artık hemen başlıyor, sessiz modda bile.
Oyunu canlı hissettiren küçük şeyler
Her şey kodla çiziliyor. Görseller için hiç resim dosyası yok: musluk, el, fayanslar, yüzü ve ruh hâli olan bardak, hepsi ortografik kamerayla Three.js şekilleri ve shader’larla yapıldı. Sesler de Web Audio ile kodda üretiliyor. En sevdiğim doldurma sesi: bardak doldukça gerçekteki gibi parlaklaşıp inceliyor. Biraz alışınca neredeyse kulakla oynanabiliyor.
Bardak devrilmek üzereyken bir ter damlası çıkıyor, sonuç kartında yıldızlar patlıyor, konfeti var, bir de yıldızlarla açılan görünümlerin olduğu bir gardırop. Parmakla sürüklemek yerine telefonu eğerek oynamak isteyenler için eğme kontrolü de var.

Yayına çıkarmak
Oyun düz JavaScript ve Vite ile yazıldı, çerçeve yok; Android ve iOS için Capacitor ile paketlendi. Tek kod tabanı, telefonda hızlı denemek için bir web sürümü ve çevresinde iki yerli kabuk.
Yayına çıkarırken öğrendiğim birkaç şey:
- Android emülatöründe boş ekran çıktı. Sorun kodda değildi, emülatör WebGL bağlamı oluşturamıyordu. Gerçek telefonlarda her şey yolundaydı. Yine de boş ekran verilebilecek en kötü mesaj; artık WebGL yoksa oyun bunu söylüyor.
- Skor tabloları: sonsuz mod ve toplam yıldız için Android’de Google Play Games, iOS’ta Game Center.
- Oyun silinince ilerleme kayboluyordu. 1.0.1 sürümü ilerlemeyi Android’de Play Games kayıtlarında, iPhone’da iCloud’da tutuyor. İki kopya farklıysa oyun ikisinin en iyisini alıyor: en çok yıldız, en iyi skor, en erken başarım tarihi.
Reklam yok, satın alma yok, hesap yok. İnternetsiz çalışıyor ve bir el yaklaşık bir dakika sürüyor.
Taşırma! Google Play’de. Tarayıcıda da oynayabilirsin; en iyisi telefonda, dik tutarak. iPhone sürümü hâlâ App Store incelemesinde.
Denersen hangi bardakta pes ettiğini merak ediyorum. Benim tahminim laboratuvardaki bal bölümleri.