Kullanıcı görüşlerini toplayıp her gün otomatik geliştirilip dağıtılan bir web oyunu yapım hikâyesi
(blog.frogred8.dev)Kullanıcı geri bildirim maddelerini toplayıp ertesi gün dağıtıma çıkan bir konseptle bir web oyunu yapmayı denedim.
Yapay zeka araçlarına alışmak için yaptığım bir projeydi; GitHub da açık, rahatça göz atabilirsiniz.
game: https://spiralwave.frogred8.dev
github: https://github.com/frogred8/SpiralWave
- Proje özeti ve planlama
- Motivasyon ve amaç: Gelişmiş yapay zeka araçlarını (Gemini vb.) kullanarak vibe coding deneyi yapmak ve daha önce kullanmadığım teknolojilerle bir web oyunu geliştirmeyi denemek.
- Geliştirme yönü: Kullanıcı görüşlerinin her gün otomatik olarak yansıtıldığı, 'süre sınırlı kaynak toplama' türünde mini bir web oyunu olarak karar verildi.
- İlk prototipin oluşturulması
- Temel konsept: Rekabetin veya kaybın olmadığı, kaynak toplama ve skill tree kurma oyunu.
- Yapay zeka kullanımı: Kâğıt üzerindeki eskizi prompt'a dönüştürerek TypeScript, Vite ve Phaser tabanlı temel oyun yapısını 30 dakikada kurdu.
- Karmaşık mantığın uygulanmasındaki sınırlar ve doğrudan çözüm
- Skill tree geliştirme: Temel önkoşul skill mantığı yapay zekayla uygulanmış olsa da, ara düğüm iptal edildiğinde alt düğümlerin zincirleme iptal olduğu karmaşık mantık yapay zeka tarafından çözülemediği için doğrudan kendim uyguladım.
- Test kodunun atlanması: Sık tasarım değişiklikleri ve hızlı geliştirme temposu nedeniyle test kodunu bilinçli olarak yazmadan ilerledim.
- Büyük ölçekli refactoring ve yapay zeka debug sürecinin özellikleri
- UI ayırma çalışması: Tek dosyanın aşırı büyümesi nedeniyle UI kodunu ayırdım ancak tutarlılık ve yapısal memnuniyet düşüktü; büyük işlerde prompt'u güçlendirip yeniden çalışma yönteminin etkili olduğunu gördüm.
- Yürütme sırası hatası: Refactoring sonrası ortaya çıkan runtime hatasında (durum güncellemesi ile UI gösterim sırasının tersine dönmesi) yapay zeka sadece gereksiz guard kodları ekledi; sonunda insan geliştirici olarak akışı anlayıp iki satır kodu değiştirerek sorunu basitçe çözdüm.
- Yapay zekanın hatalarının görece insansı olması tuhaf bir his verdi.
- Git otomatik commit ve kılavuz uygulanması
- Prompt kılavuzunun oluşturulması: Tekrarlayan talimatların zahmetini azaltmak için teknik yığını ve çalışma biçimini düzenleyen bir yönerge dosyası (GEMINI.md) eklendi.
- Otomasyon iş akışı: Kod işi tamamlandıktan sonra ajan çalışma süresi, talimat prompt'u ve iş özeti içeren commit mesajlarının otomatik oluşturulacak şekilde ayarlanmasıyla basit inceleme yükü azaltıldı.
- Otomatik güncelleme mimarisinin tasarımı ve optimizasyonu
- Dağıtım yönteminin değiştirilmesi: Başta düşünülen 2 saatte bir gerçek zamanlı otomatik dağıtım, yüksek runtime bug oranı (yaklaşık %25) nedeniyle build kararlılığını düşürdüğü için bırakıldı; bunun yerine ayrı bir günlük test build'i oluşturup dağıtma kararı alındı.
- Cron iş akışı: node:cron kullanılarak 'geri bildirim toplama → arıtma → kod üretimi → build ve release oluşturma → dağıtım' akışına sahip monolitik yapıda bir otomasyon süreci kuruldu.
- Sürüm notlarının güncellenmesi: Docker instance'ları arasında sunucu liste dosyası ortak volume üzerinden paylaşıldı ve yükü kontrol etmek için 5 dakikalık süre sonlu cache uygulandı; ayrıca kullanıcıların çok dilli talepleri İngilizceye arıtılıp yeniden çevrilerek sürüm notlarında gösterilecek şekilde uygulandı.
- Geliştirme sırasında çıkarılan özellikler
- Leaderboard görüş önerme (Like) özelliği (tanımlayıcı eksikliği ve API çağrı maliyeti yükü).
- Gelişmiş skill veri yönetim aracı (hayal gücü sınırları ve JSON'u doğrudan düzenlemenin daha verimli olması).
- Servislere göre ayrılmış Docker dağıtık ortamı kurulumu (işletim ve yönetim karmaşıklığını en aza indirmek için tek imajda birleştirildi).
- Kullanıcı görüşü yansıtıldığında e-posta bildirim özelliği (üyelik olmadan toplanan e-postaların geçerliliği ve kötüye kullanım riski).
- Yan reklam ekleme (platform onay sürecinin yorgunluğu ve düşük birim gelir karşısında yetersiz etki).
- Yapay zeka tabanlı geliştirme üzerine notlar
- Verimlilik ve test arasındaki trade-off: Geliştirme uygulama hızı yaklaşık 10 kat artsa da doğrulama (QA) için gereken zaman ve yorgunluk da orantılı biçimde büyüyen bir sınıra ulaştı.
- Kod kalitesinin özellikleri: Fonksiyon düzeyindeki tamamlanma oranı yüksek olsa da okunabilirlik düşüktü, bu da genel akışı kavramayı zorlaştırdı; ayrıca yerel hard coding'in avantajlı olduğu durumlarda bile gereksiz derecede şişkin genelleme kalıpları ekleme eğilimi görüldü.
1 yorum
Eğlenceliymiş.