7 puan yazan gogoj2 2026-01-19 | 14 yorum | WhatsApp'ta paylaş

2004 yazında, askerde terhise sayılı günler kala boş zamanlarımda ne yapacağımı düşünürken oyun tasarlamaya başladım. O sırada kardeşim oyun grafik tasarımı okuyordu; terhis olduktan sonra birlikte bir şeyler yapmanın güzel olacağını düşünmüştüm. (Ah... ben sıradan bir sözelciyim. Teknik bilgi hiç yok.)

Amatör bir deneme olduğu için küçük ve basit bir şey yapmak istedim. En erişilebilir oyunlardan biri olan tuğla kırma (Arkanoid) oyununu temel alıp buna yeni bir karşılaşma biçimi ekledim. Zaten sayısız kişi bu oyunun yeni sürümlerini yapmıştı ama benim yaptığım gibi bir örneğe rastlamamıştım.

Terhis olduktan sonra kardeşimle ve onun arkadaşlarıyla iddialı bir ekip kurduk ama çok geçmeden herkesin kendi koşulları ortaya çıkınca ekip kısa sürede dağıldı. “Bir gün fırsat olursa yaparım” dedim ama o fırsat bir daha gelmedi. Yıllar geçti; çalışırken bile ara sıra aklıma geliyordu. Bir dönem biraz Python öğrenmeyi hedeflediğimde de bunu amaç edinmiştim ama benim için fazla zor bir görevdi.

Derken zaman geçti geçti, geçen yaz yani 20 yılı aşkın bir süre sonra, bir toplantının ardından birlikte akşam yemeği yerken toplantıya katılan şirket temsilcileri AI ile yapılabilecek şeylerin ne kadar arttığından söz edip herkesin yeniden girişim kurmak istediğini söyledi. O gün bundan etkilenip gece eve döndüğümde yalnızca adını duyduğum Claude Code'u kurdum. Ve 2 saat sonra... bam!!

Claude Code'a ilk proje olarak ne yaptırsam diye düşünürken 20 yıl önceki fikrimi yeniden toparlayıp tarif ettim; yaklaşık 2 saat sonra gözlerimin önünde raket ve top hareket ediyor, tuğlaları kırıyordu. O anki heyecanı anlatamam. Bu tür tanıklıklar(?) artık o kadar çoğaldı ki size tanıdık gelecektir ama aradan yarım yıl geçtikten sonra artık Claude Code olmadan yaşayamayan biri oldum.

Oyunu bu süre boyunca yavaş yavaş geliştirdim ve artık en azından demo diye sunabileceğim bir seviyeye geldiğini düşünerek cesaret edip paylaşıyorum. Üstelik bugüne kadar sadece sessizce takip ettiğim GeekNews'te!! Aslında bunu 2 kişilik rekabetçi bir oyun olarak tasarlamıştım ama çok oyunculu özellik benim için fazla yüksek bir duvar olduğu için bilgisayara karşı oynanan bir biçimde yaptım.

Kısaca tanıtmak gerekirse,

  • Bilgisayar için tasarlandı. Mobil desteği henüz yok.
  • Aynı alanda sırt sırta duran 2 kişinin oynadığı bir tuğla kırma oyunu. Tuğlaların hepsini önce kıran taraf kazanır.
  • Topu kaçırırsam top rakibin alanına geçer. Rakip kaçırırsa bana geri gelir.
  • Gerçek dünyadaki fizik kavramları eklendi; ağırlık, darbe, ivme ve eylemsizlik var. Düşündüğünüzden daha zor.
  • Demo sürüm olduğu için tek maçtan sonra yeniden başlatıp oynamaya devam edebilirsiniz.
  • Eski atari salonlarındaki gibi rekor yaparsanız adınızı yazdırabilirsiniz.

Geliştirme sürecinden çıkardığım dersleri de yazacak olursam,

  • Refactoring! Refactoring! Refactoring!
  • Sadece adını duyduğum refactoring’in ne olduğunu gerçekten anladım ve cehennemler arasında “refactoring cehennemi” diye bir yerin olabileceğini düşünmeye başladım.
  • Başta büyük hayaller kurup Battle.net benzeri bir yapıyı düşleyerek işlevleri aşırı bölüp şişirdim; sonra hata seli içinde hepsini sıfırladım, yeniden böldüm, yeniden birleştirdim... Bu, Opus 4.5 çıkmadan önceydi.
  • Böyle küçücük bir şeyi yaparken bile bu kadar zorsa, programcılara karşı büyük bir saygı duymaya başladım.

Neyse ki şimdi sınırlarımı biraz daha iyi biliyorum; işleri küçük parçalara ayırıp workflow belgeleri hazırlayan, geliştirme günlüklerini ve Git commit'lerini dikkatle takip eden biri oldum. En büyük kazancım ise artık yapmak istediğim şeylerin gerçekten çok artmış olması. Çalışırken ihtiyaç duyduğum araçları doğrudan kendim yapabilmek için epey kafa yoruyorum.

Bu oyunla ne yapmam gerektiğini düşünüyorum. Şu anki koşullarımda bunu tam anlamıyla geliştirmem zor ama öte yandan tamamen rafa kaldırmaya da kıyamıyorum. Çocukların keyifle oynayabileceği bir oyun olmasını diliyorum.

GeekNews'teki haberlerden her zaman çok şey öğreniyorum ve hepsini minnetle takip ediyorum. Teşekkürler.

14 yorum

 
colus001 2026-01-22

Konsept eğlenceli ama kontrol hissi çok kötü. Bu tür bir oyunda kontrollere atalet uygulamak iyi bir fikir gibi görünmüyor. Sanırım bu, zorluktan biraz farklı bir mesele.

 
gogoj2 2026-01-28

Görüşünüz için teşekkürler. Belirttiğiniz noktaları düşündüm ve kontrolü biraz daha kolaylaştırmak için ataleti yarıya indirdim. Önceliği aklımdaki fizik konseptine vermiştim, ancak oyunun kontrol hissi ve çarpışma anlarında nasıl olması gerektiği üzerine daha fazla düşünmeye başladım. Düzeltmeye devam edeceğim. (Asıl işim yoğunlaştığı için yansıtmakta geciktim.)

 
gogoj2 2026-01-20

FURY'nin kim olduğunu bilmiyorum ama gelip inanılmaz bir skor bırakmış.;;

 
bsh998 2026-01-20

Gerçek dünyanın fizik kavramları oyuna eklenmiş; ağırlık, çarpışma, ivme ve eylemsizlik var. Düşündüğünüzden daha zor.

Oyun fiziği konusundaki kavrayışın zayıf kaldığını hissettiren bir ifade olduğu için, biraz daha doğal olacak şekilde düzeltilirse iyi olur.

 
cucumber9 2026-01-20

Bunu kendiniz biraz düzeltin haha, sözelci birinin önünde artistlik yapmayın.

 
gogoj2 2026-01-20

Edebiyatçıların kalbini düşündüğünüz için teşekkür ederim. haha ^^

 
bsh998 2026-01-20

İfadenizi düzenlemekte zorlanmamın nedeni, yazdığınız kodu görmediğim için fizik motorunu hangi şekilde uyguladığınızı bilmememdir.

 
bsh998 2026-01-20

İstemeden yaptığım eleştiri için özür dilerim.
Birçok kişi ürün tanıtımı yapıyor ama bunu yapay zeka ile yaptıkları ya da uygun olmayan açıklamalar ekledikleri durumlar sık olduğu için yorum bırakıyorum. Yazdığım yorum sizi kızdırmak için değildi.

 
gogoj2 2026-01-20

İlginiz için teşekkür ederim. Hiç rahatsız olmadım. Tavsiyelere her zaman minnettarım. Hatta daha çok, tam olarak nereyi nasıl düzeltmem gerektiğini anlayamadım; bu yüzden biraz daha ayrıntılı açıklarsanız sevinirim.

Gerçekçi fizik uyguladığım kısmı biraz daha açıklayayım: Bu tür oyunlar genelde yalnızca çok basit çarpışma algılama ve yansıma uygular. Ama ben, gerçek bir pinball oyunu gibi top ya da tuğla çarpıştığında, gerçek ağırlık hissiyle hızdan doğan çarpışma enerjisinin hissedilmesini istedim. Bu yüzden oyun kütüphanesi yerine biraz daha hassas olduğunu düşündüğüm Planck.js'yi bulup kullanmaya başladım. Tuğlaya top çarptığında darbenin etkisiyle itilmesini ve dönmesini ifade ettim. Ayarlarda topun ağırlığı, tuğlanın ağırlığı, çarpışma enerjisinin sönümlenmesi, direnç gibi şeyleri değiştirilebilecek şekilde yaptım; böylece ayara göre farklı bir deneyim ortaya çıkıyor.
(Benim "çılgın mod" dediğim bir ayar var; topun ağırlığını en yükseğe çıkarıp tuğlanın ağırlığını en aza indirirseniz çok dinamik bir oyun oluyor.)

Kodlar da GitHub'da mevcut.
https://github.com/gogodevelop2/mirror-breakout

 
bsh998 2026-01-20

Evet, yorum yapacak olursam,
öncelikle çarpışma tasarımı ve esneklik katsayısı ayarları gibi konularda daha fazla emek vermişsiniz gibi görünüyor.
Ayrıca özellikle çarpışmaların her bir kütle ve esneklik katsayısına göre hesaplanıp gerçekleşecek şekilde kurulmuş olduğunu anlıyorum; ancak hedeflediğiniz şeyden farklı olan noktaları söylemek gerekirse

paddle ya da brick tarafındaki kütle veya hız gibi değerler aslında yalnızca ball'ın momentumunu etkilediği için, özünde
çarpışma yöntemini bir fizik modelinden esinlenerek
top ile (tuğla, paddle, duvar) arasındaki çarpışmaları ayrı ayrı kurgulamış olmanıza daha yakın duruyor.

Bu nedenle buna gerçek dünya fiziği demektense, bir fizik motorunun bazı unsurlarını ödünç alarak çarpışma ve momentum değişimini dinamik biçimde tasarladığınızı söylemeniz daha uygun görünüyor.

Özellikle çarpışma süreci gerçekçi olmadığı için momentumun değiştiği durumlara hız düzeltmesi uygulamışsınız; bu da kontrol hissi açısından gizli bir kural gibi algılanabilir ya da oldukça kullanıcıya kapalı bir taraf gibi hissedilebilir.

 
bsh998 2026-01-20

Biraz daha kolay açıklamak gerekirse,
fiziksel formüller ve hesaplama yöntemleri kullanılmış olsa da sonuç olarak gerçekçi olmayan bir
model söz konusu ve gerçekçi olmayan kısımlarda ortaya çıkan sorunları oyun mekanikleriyle engellemek için (sonsuz hız, durma, yön kontrolü vb.) epeyce düzeltme eklenmiş.

 
gogoj2 2026-01-20

Ayrıntılı açıklama için teşekkür ederim. Çok iyi anladım. Oyun yapımını ilk kez denediğim için oyun fiziği diye bir dünyanın varlığını ve terimlerin ne kadar uygun kullanılması gerektiğini pek bilmiyordum; bu yüzden açıklamam yanlış anlaşılmaya yol açacak şekilde yazılmış. Açıklamayı dinleyince, bu işi profesyonel olarak yapan insanların ortaya çıkan sonuçlara hangi düzeyde baktığını biraz anlayabildiğimi düşünüyorum. Ana metni nasıl düzenleyeceğimi bulamadım... araştırıp düzelteceğim. Teşekkürler.

 
[Bu yorum gizlendi.]
 
gogoj2 2026-01-20

Teşekkürler. haha Ben de hobi etkinliklerini destekleyeceğim!