Bir kule savunma oyununu yapay zekayla kodlayıp tüm süreci belgelendirdim
(github.com/maciej-trebacz)- 20 yıllık bir yazılım geliştiricisi olmama rağmen, oyun geliştirme konusunda ilk kez yapay zeka kodlama ajanları kullanarak Phaser.js tabanlı kule savunma oyunu "Tower of Time"'ı tamamladım
- Amaç, yapay zekanın gerçek oyun geliştirmedeki potansiyelini denemekti; kodun yanı sıra tüm yapay zeka prompt'larını ve çalışma sürecini GitHub'da belgeledim
- Kodun %95'ten fazlası yapay zeka tarafından yazıldı; Augment Code, Cursor, Claude Sonnet 4 gibi çeşitli yapay zeka araçlarını birlikte kullandım
- Oyun; zamanı geri sarma (rewind) özelliğini kullanan stratejik yapı, çeşitli kuleler, enerji yönetim sistemi ve dalga dalga gelen düşmanlarla özgün bir oynanış sunuyor
- Canlı yayın, sanat ve ses varlıklarının kullanımı, geliştirme sürecinde çıkarılan dersler ve pratik ipuçları sayesinde hem oyun hem yapay zeka konusunda yeni başlayanlar için faydalı bir öğrenme kaynağı
Tower of Time genel bakış
- Bu proje, yapay zeka kodlama araçlarıyla gerçek anlamda oyun geliştirmenin mümkün olup olmadığını test etmek amacıyla yürütüldü
- Phaser.js adlı JavaScript oyun motorunu ilk kez öğrenerek Beginner's Jam Summer 2025'e katıldım ve 25-30 saat içinde 'Tower of Time'ı tamamladım
- Geliştirme sürecinin tamamını, tüm prompt'ları, kodu, dokümantasyonu ve oynama bağlantısını GitHub'a kaydettim
Oyun tanıtımı
- Tower of Time, zaman yolculuğu temalı bir kule savunma oyunu. Oyuncu dalgalar halinde gelen düşmanları durdururken, kritik anlarda zamanı geri sararak stratejisini yeniden kurabiliyor
- Birden fazla kule türü (temel, keskin nişancı, yavaşlatma, sıçrama hasarı vb.) ile enerji sistemi (kule inşası ve zamanı geri sarmada kullanılır) bir araya geliyor
- Başlıca özellikler
- Zamanı geri sarma: Dezavantajlı bir anda önceki duruma dönüp savunma stratejisini yeniden düzenleme imkanı
- Çeşitli kuleler: Farklı özelliklere sahip kulelerle çeşitli savunma stratejileri kurulabilir
- Enerji yönetimi: Enerjinin nerede kullanılacağını dikkatle planlamayı gerektiren kaynak yönetimi unsuru
- Kontroller
- Klavye/gamepad desteği (hareket: ok tuşları/stick, aksiyon: Space/gamepad düğmesi, geri sarma: Backspace/tetik)
Yapay zeka kodlama deneyi ve geliştirme süreci
- Tüm kodun yaklaşık %95'i yapay zekayla (Claude Sonnet 4, OpenAI, Augment Code, Cursor vb.) yazıldı
- Tüm önemli prompt'lar, denemeler-yanılmalar ve nihai çıktılar depoda PROMPTS.md olarak kaydedildi
- Yapay zeka ile otomatik kod üretiminin avantajları: hızlı prototipleme, tekrarlayan kod işlerinin otomasyonu, dokümantasyon kolaylığı
- Sınırlar ve dikkat edilmesi gerekenler: yapay zekanın fazla kod üretme eğilimi, belirli uygulama sorunlarında prompt'ları yeniden tasarlama veya geri alma ihtiyacı, hata ayıklama loglarının kullanılmasının önerilmesi
Geliştirmeden çıkarılan dersler
- Sadece yapay zeka kodlamasıyla bile eğlenceli bir oyunu tamamlamak gayet mümkün
- Prompt kalitesi, net bağlam sağlama ve hata ayıklama stratejileri çok önemli
- Kod miktarını gereksiz yere artırmamak için sürekli kontrol gerekiyor
Teknoloji yığını
- Motor: Phaser 3 (v3.90.0) + Phaser Editor v4
- Dil: TypeScript
- Build aracı: Vite
- Sanat varlıkları: itch.io, bir kısmı elle düzenlendi
- Ses: freesound.org
Tarayıcıda oynamak için: Tower of Time
3 yorum
İyi bir referans olacağa benziyor.
Ben de yapay zekayı sıkı şekilde kullanarak bir web oyunu yapıyorum.
Hacker News yorumu
Geliştirmede kullanılan promptları tek tek okumak ayrı bir keyif veriyor
“vibe coding başarı örnekleri” hakkındaki yazılar, sanki yeterince çok ajan, karmaşık kod orkestrasyonu ve LLM tarafından üretilmiş kurallar varsa “zamanda geri sarılan bir tower defense oyunu yap, hem de hatasız ve bugsız” gibi tek satırlık bir promptla oyunun şipşak ortaya çıkacağı yanılsamasını veriyor
Ama gerçek projede kullanılan promptlar, AI kodlamada en iyi çalışan yaklaşımla birebir örtüşüyor
Net ve titizlikle düşünülmüş bir fikri yüzlerce küçük probleme bölmek, gerçekten önemli noktalarda da somut mimari yönlendirme vermek etkili oluyor
Teknik lider ve ürün sahibi rollerini aynı anda yürüten biri olarak, bu yaklaşımın insanlarla çalışırken de doğru yöntem olduğunu düşünüyorum
İşimin %70’i, yöneticinin “zaman yolculuklu kule oyunu, bugsız” gibi soyut talebini, ekibin yüksek seviyeli soyutlamayı koruyarak birbirinin işine çakışmadan çalışabileceği, bağlamına güçlü bir mimari vizyon yerleştirilmiş bir dizi prompta dönüştürmekten ibaret
Basit bir Just One masa oyunu için HTML oyun yapmayı denedim ama input kutusunun yer değiştirme bugını dört farklı LLM’e tekrar tekrar prompt vererek bile çözdüremedim
Herkes oyunu tek seferde yaptırdığını anlatırken benim bir textbox hareketini bile düzeltememem garip geliyor
“Güvenlik açığı yok, bug yok” promptuna ek olarak “halüsinasyon yok” da şart
AI başlangıç seviyesinin temel koşulu bu
AI kodlamada bende en iyi çalışan yöntem, temel işlevi ya da oynanış iskeletini AI ile tek atışta oluşturup onun üstüne defalarca iteratif biçimde inşa etmek
Tek atış sonucu hemen etkileyici değilse, iyi bir temel çıkana kadar farklı promptlarla hızlıca düzeltip yeniden deniyorum
Buna tamamen katılıyorum
Nitekim yakın tarihli yazım da bu fikre dayanıyor
Kodlamadan önce AI’a önce spesifikasyonu yazdırırsanız, insanların sıfırdan spec yazma yükü azalıyor ve gerçekten yazma olasılıkları ciddi biçimde artıyor
20 yılı aşkın süredir yazılım sektöründeyim ve çevremdeki çoğu kişinin AI kodlamaya epey şüpheyle baktığını görüyorum
Kısa süre önce yaklaşık 34.000 satırlık büyük bir uygulamayı ağırlıklı olarak AI ile geliştirdim; burada verim, verdiğim talimatların kalitesi, etkileşim yapısı ve çıktıya gösterdiğim özenle (rota düzeltmeleri dahil) üstel biçimde arttı
Sonunda “diğer tüm araçlar gibi bir araç işte” diye düşünmeye başlıyorsunuz
Ama bu araç, şimdiye kadar gördüğüm tüm “10x araçlarla” kıyaslandığında gerçekten 10 kat daha fazla kaldıraç sağlıyor
Şüphecilerin çoğunun kaçırdığı nokta, bu araçları tamamen dışsal bir şey gibi ele almamanız gerektiği
Hedefi belirsiz anlatıp sonra işi ona devretmeye kalkarsanız kötü sonuç alırsınız
Bir gün AI düşüncelerimizi doğrudan okuyabilir belki ama bugün o gün değil
Şu an için asıl gücü düşünceleri netleştirmekte, yeni şeyler öğrenmekte ve can sıkıcı işleri hızlandırmakta ortaya çıkıyor
En yüksek kaldıracı elde etmek için bu aracı düşünme sürecinizin içine iyi yerleştirmeniz gerekiyor
Programlama geçmişim uzun ama lise yıllarında Hunt the Wumpus dışında oyun yapmışlığım yoktu; yakın zamanda AI yardımıyla yeni oyunlar yapmaya başladım
AI burada üç büyük rol oynuyor
(1) Öğrenme aracı - terimleri bilmesem bile neyi sormak istediğimi iyi anlıyor, başlangıç noktası veriyor ve “bilmediğimi bilmediğim şeyleri” bile öğretiyor; en önemli rol bu
(2) Tekrarlı ya da sıkıcı işleri yapma - kod yorumları, yapılandırma dosyaları gibi benim de yapabileceğim ama işi yavaşlatan görevleri gayet iyi hallediyor
(3) Arama - (1)’dekine benzer şekilde, aslında ne istediğimi anlayıp filtreleme ve öneri işini üstleniyor
AI’a “düşünme” görevini de verebilirsiniz ama buna mecbur değilsiniz
İnsandan daha zeki değil; sadece daha hızlı ve daha çok şey bilen bir FPU gibi
HN ölçeğinde bakınca oldukça şüpheci sayılırım ama pratikte şirkette AI kullanımını sürekli teşvik ediyorum ve bu yorumu yazarken bile Claude’a bir şey yaptırıyorum
Şüpheciliğimin nedeni, mevcut AI çözümlerinin “pazarlanma biçimi” ile “gerçekte yaptıkları iş” arasındaki uçurum
Tüm AI çözümleri, özellikle ajanlar, yetkin bir insan yönlendirmesi olmadan sadece işe yaramaz sonuçlar üretir
Gerçekte neredeyse hiçbir “otonom” tarafları yok
“vibe coding” terimini ortaya atan kişi bile sektörün sırayı tersinden izlediğini söylüyor
Bu araçların harika olduğunu ama mutlaka güçlü biçimde kontrol edilmeleri gerektiğini söylememek, fiilen yalan söylemek gibi
Son birkaç ayda ben de benzer bir sonuca vardım
Eskiden AI hakkında eleştirel yorumlar yazardım ama en yeni araçlar gerçekten çok gelişti
Eskiden haftalar alan işleri artık birkaç saatte çıkarabiliyorum
Yine de promptları iyi düşünmek, ayrıntılı parçalara bölmek ve IDE ile iyi entegre etmek gerekiyor
En devrimsel tarafı, tamamen yeni bir kütüphane ya da framework ile çalışırken ortaya çıkıyor
Eskiden kullanım şeklini aratıp örnek kodu didik didik ederdim; şimdi AI çok daha sezgisel ve çeşitli yollar gösteriyor, bu da beni sık sık şaşırtıyor
Hâlâ şüpheci olanların yeniden denemesi için uygun bir dönem
10x kaldıraç örneği olarak dilleri düşünebilirsiniz
Eskiden Lisp gibi dillerin daha kısa sürede daha çok iş yaptırdığı söylenirdi; şimdi ise gerçekten yazmanız gereken kod azalırken çıktı hızlı ve yüksek performanslı dillerde üretilebiliyor
Ama burada bir “tuzak” var: üretilen kodun kolay doğrulanamayan kısımlarını yeterince incelemek gerekiyor
Yüksek ifade gücüne sahip diller nasıl plansız insanların karmakarışık codebase’ler üretmesine yol açtıysa, AI araçlarında da benzer bir şey olacak
Yine de benim asıl zaman kazandığım yer, tamamen yeni kod yazmaktan çok eski kodla yeni kodu bütünleştirmek ya da iyileştirmek
Debugging tarafında büyük bir sıçrama yaşanıyor
Artık eskisi gibi sadece print basmak yerine, kodu kopyalayıp yapıştırarak “çıktı neden şöyle değil de böyle oluyor?” diye AI’a sorup hızla nedenleri ve alternatifleri alabiliyorsunuz
Özellikle SQL, IaC, build script’leri gibi debugger bağlaması zor işlerde bu çok büyük avantaj
Bir başka nokta da öğrenme eğrisi ve beceri tavanının sanıldığından çok daha yüksek olması
Claude Opus’u karmaşık bir otomasyon çerçevesi içinde kullanmakla, tarayıcıda GPT-4o’ya sadece kopyala-yapıştır yapmak arasında sonuç açısından büyük fark var
Geliştirme sürecini şeffaf biçimde paylaşması ve promptları da açması çok hoşuma gitti; GitHub’da star verdim
Hem kod hem de sonuç çok estetik görünüyor
Belli ki sadece AI kullanılmamış, ciddi ölçüde doğrudan emek de var
Ben uzun süre kod yazmaya ara vermiştim; arkadaşlarımın teşvikiyle AI kullanarak basit şeyler yapmayı denedim
Ortaya çıkardığım şeyler Bubble Wrap patlatma ve susturucu (tuşa basınca ses yok) gibi şeyler oldu
Bubble Popper
Silencer
PR kabul etmeyi düşünüyor musun merak ettim
Bence indie oyunlar, kodlama AI’ı için mükemmel bir kullanım senaryosu
Düşük risk ve eğlence odaklı yapı buna çok uygun
İlk commit’te çok miktarda kod var ama
PROMPTS.mdhenüz yokÖrneğin EnergySystem.ts ilk commit’te zaten mevcut, ama daha sonra
PROMPTS.mdiçinde sanki AI bunu en baştan üretmiş gibi görünüyorRepo geçmişinde bu kısmı biraz daha ayrıntılı anlatabilir misin diye merak ettim
İlk commit bağlantısı
Promptları da anında not etmedim; oyun bittikten sonra kullandığım sohbet araçlarının geçmişine dönüp
PROMPTS.mddosyasına kopyaladımProjenin nasıl oluştuğunu görmek istiyorsan prompt dosyasını baştan sona okumak en iyi yöntem
Örneğin EnergySystem.ts dosyası, düşman pathfinding’i, spawn sistemi, kule ateşi gibi şeyler tamamlandıktan sonra “enerji alt sistemini uygulamak istiyorum” şeklindeki bir promptla AI tarafından sıfırdan oluşturuldu
Augment Code diye bir aracı ilk kez duyuyorum
Ne yaptığını, neden seçtiğini, rakip araçlardan nasıl ayrıldığını ya da pratikte nasıl bir deneyim sunduğunu merak ediyorum; tavsiye eder misin?
İkisine de ücretli abonelik mi var?
Promptları kaydetmiş olman etkileyici ve motive edici
Benim deneyimimde “vibe coding” bazen çok hızlı ilerliyor, bazen de inanılmaz yavaşlayabiliyor
Kısa ve net talimat verme, hızlı code review yapma ve mimariyi kavrama beceriniz varsa gerçekten geliştirme hızını artırabiliyor
Ben de bir zamanlar bir tower defense oyunu yapmıştım ve son dönemde AI ile yeni wave üretimi ya da denge ayarı gibi şeyleri denemeyi düşünüyordum
AI’ın oyunu “hissedebilmesi” için, ekranda görülen oyun durumunu tokenlara dönüştürüp encode eden bir protokol gerekip gerekmediğini merak ediyorum
Arazi, oyun varlıklarının konumu ve oyuncunun görebileceği diğer özellikler gibi
Her şeyi bir autoencoder’a vermek çok uygun görünmüyor ama oyun öğelerini liste halinde tokenize etmek umut verici olabilir
Oyun motoru ekran görüntüsünü sağlayıp tokenları da AI’a doğrudan açarsa, AI gerçek oyun akışını çok daha derin anlayabilir
Bu tokenları anlamlı biçimde kullanmak için ne kadar eğitim verisi gerekeceğinden emin değilim ama mevcut embedding uzaylarında bile bunun birkaç token içine sığması mümkün olabilir
Oyun logları ve kullanıcı eğlence değerlendirmelerinden oluşan bir eğitim seti olursa çok ilginç veriler çıkabilir
Oyuncu tercih kümelerini bulup farklı türlere uygun oyunlar üretmek de mümkün hâle gelebilir
Bu workflow’u paylaştığın için teşekkürler
Ben de LLM kullanım workflow’larına izlenebilirlik ve şeffaflık katmayı düşünüyorum
Promptları paylaşmak ve geçmiş olarak saklamak, geliştiricinin başta çözmeye çalıştığı asıl problemi, bunun zaman içinde nasıl değiştiğini ve hangi yeni sorunların ortaya çıktığını tek bakışta görebilme avantajı sağlıyor
Çok güzel proje
Sorumlu LLM kullanımıyla ilgili yazı
20 yılı aşkın süredir teknoloji alanındayım; son dönemde Gemini-cli ile kurumsal uygulama entegrasyon test aracını oyunlaştırırken çeşitli deneyler yapıyorum
MCP sunucusuyla birlikte kullanınca, problemi adım adım parçalayıp promptlara açıklık kattığımda en iyi sonuçları aldım
AI hata yapabiliyor ya da döngüye girebiliyor (özellikle uygulama yönlendirmesi gibi konularda); böyle anlarda aktif bir “pair programming” yaklaşımıyla ilerlemek faydalı oluyor
Dikkatimi çeken başka bir nokta da kod tekrarını yasaklama gibi ilkeleri eskisine göre çok daha kolay koruyabilmek
Aksi takdirde AI bir yeri değiştirip ilişkili dosyaları atlayabiliyor
Bu sadece programlama mantığı için değil, UX ve uygulama davranışı için de geçerli
AI ile birlikte, eskiden haftalar süren işleri artık saatler içinde keyifle bitirebiliyoruz
Gemini’ye bir kişilik kazandırabilmek ve GEMINI.md dosyasını farklı cihazlar arasında taşıyıp aynı ayarla kullanabilmek çok büyük avantaj