Matematik ve Oyun Programlama - Missile Command - Final

Hiçbir ödül veya karşılık beklemeden kendinizi iyi hissetmek adına en son ne yaptığınızı hatırlıyor musunuz? Bu öyle değişik bir iç motivasyon ki kendinizi bir amaca adayarak hareket etmenizi sağlıyor. Karşılaşılan engeller engel olmaktan çıkıyor ve anlamak istediğiniz şeyler haline geliyor. En azından ben birkaç haftadır böyle hissediyorum. Cevval bir oyun programcısı olmak ya da akademide bu alana dair dersler vermek gibi bir amacım yok ama çok güçlü bir iç motivasyonum var; öğrenmek…

İşte bu düşüncelerle çıktığım yolda çocukluğumdan hayal mayal hatırladığım popüler Atari oyunlardan birisi olan Missile Command arkasındaki matematiği keşfetmeye çalıştım. Kimi enstrüman(son bölümde de göreceğiniz üzere) son derece basit fonksiyonlardan ibaretti ama çözdüğü problem oyunun akıcılığı adına gerçekten büyüleyiciydi. Üstelik ciddi olarak ele aldığım bu ilk antrenmanda sadece birkaç matematik enstrümanı kullanarak etkileyici dinamikleri nasıl harekete geçirebileceğimi de görme şansım oldu. Pek tabii oyun geliştiricileri adına önem arz eden bir çok konu var. Ben bu alanda ahkam kesebilecek birisi değilim lakin birkaç anahtar noktayı rahatlıkla ifade edebilirim.

  • İyi oyun geliştiricilerin iyi seviyede lineer cebir bildiğine inanıyorum.
  • Oyun geliştiricisi olmak için kuvvetli bir iç motivasyona sahip olmak gerektiğini düşünüyorum.
  • Bir şeyler öğrenirken geçilen her adımın, varılan her sonucun bir sonraki aşamayı kuvvetlendirecek donanımı sağlayacağını biliyorum.

Lafı fazla uzatmadan son bölümün anlatımını buraya bırakayım. Bu bölümde Clamping isimli çarpışma tekniğini kullanarak patlama noktasına temas eden füzelerin sahneden kaldırılmasını inceliyoruz.

Konu ile ilgili örneği Rust programlama dilini kullanarak geliştiriyorum. Github hesabımdan ilgili kaynak kodlara ulaşabilirsiniz. Oyun motoru olarak hafifsiklet olanlardan Macroquad'ı tercih ettim.

Bir sonraki hedefim Commodore 64 ile çokça oynadığım 1942 oyunu arkasındaki matematiği keşfetmek. Ama iş bununla bitmiyor. Takip ettiğim pek çok kaynak bazı efsane oyunların klonlarını yazmaya çalışmamızı öğütler nitelikte. Karakterinizi farklı yapay zeka dinamikleri ile takip eden hayaletlerin yer aldığı Pacman, zıplama ve yerçekimi gibi etkenleri hesaba kattığınız Super Mario, vektör ve açıları etkin şekilde kullandığınız Missile Command ve benzerleri. Yine de bunlardan hangisi olursa olsun yazmaya başlamadan önce belli başlı matematik konuları çalışmak/hatırlamak gerekiyor. Böylece geldik bir programın daha sonuna. Tekrardan görüşünceye dek hepinize mutlu günler dilerim.

Yorumlar (8) -

  • Merhaba, Burak Bey.
    Konu dışı bir şey sormak istiyorum.  DevExpress gibi Component Satıcıları bize sunduğu arayüzlerin dışında base class'larına injection yaparak maniplasyon yapıldığında , bu telif sıkıntısına yol açar mı? Mesela Gridview'in Designer'ının  belli bir katmanında private işaretli alana kendi kodumu eklemek ya da değer atayabilmek için reflect ile değer ataması yapıyorum. Bu ticari anlamda bir soruna yol açar mı?  Teşekkürler.
    • Merhaba Mehmet Bey,
      Bu konuda çok fazla fikrim yok ancak DevExpress'in lisanslama modelinde kaynak kodlarını değiştirilip kullanılmasına ilişkin bir madde var mıdır sanıyorum onu öğrenmek lazım. Diğer yandan buna izin veriliyor olsa bile yapılan güncellemeler sizin ortamına özel olacağından component update'lerinde conflict'ler yaşanabilir gibime geliyor. Dediğim gibi tam detayına hakim değilim ama açık kaynak bileşenler kullanıyor olmanın avantajları da burada kendini gösteriyor sanki ;) Oradaki lisanslama modellerinin çok daha esnek olduğunu düşünecek olursak...
  • Burak hocam, yazınızı okurken heyecanlandım. Ben de yazılıma ilk başladığım yıllarda (2019) da izometrik 2D haritalarda nasıl bir algoritma çalışıyor diye merak ederek bir şeyler çiziktirmeye başlamıştım, defterdeki kareleri kullanarak. İlk defa 4x4 bir görüntüyü render ettiğimde çok heyecanlanmıştım. Bir yerden almadan, tamamen sıfırdan bir şey geliştirmenin heyecanı cezbedici. Endüstriyel olarak doğru bir yaklaşım olmasa bile benim de hobi olarak böyle şeylerle uğraşmaya ihtiyacım oluyor. Daha sonra o çalışmayı ilerlettim:
    https://github.com/kzlsahin/mySociety
    • Değerli yorumlarınız için çok teşekkürler. Github projesini biraz inceleme fırsatım oldu. Çok kıymetli bir çalışma olmuş emeğinize sağlık. Güzel bir katkı da oldu. Daha da büyür umarım ki.
  • Hocam çok güzel bir yazı olmuş bir çırpıda okudum emeğinize sağlık teşekkür ederiz.
  • merhaba burak hocam, konudan bağımsız, hazır bu proje de tamamlanmışken, gRPC hakkında bir şeyler mi anlatsanız diyorum, WCF öldü bu kısım biraz öksüz kaldı Smile
    belki rust ile gRPC yaparsınız.

Yorum ekle

Loading