Oyun Programlama Kalıpları — Neden öğrenilmelidir?

ÜNOG
ÜNOG
Published in
4 min readAug 6, 2020

--

ÜNOG’a Katıl Bültenimize Abone OlGeçmiş Yayınlarımızı Oku

Bu hafta başlayan yedi bölümlük serimizde oyun endüstrisinde sık sık kullanılan programlama kalıplarını [programming patterns] inceleyeceğiz.

Bu seride ana kaynak olarak Game Programming Patterns [Oyun Programlama Kalıpları] kitabını kullanacağız ve oradaki yazılar üzerinden ilerleyeceğiz. Bob Nystrom, 8 sene Electronic Arts firmasında oyun programcılığı yaptıktan sonra, kazandığı tecrübeleri damıtmak için bu kitabı yazdı.

Bu serimizde altı farklı programlama kalıbını inceleyeceğiz. Bunlar sırasıyla:

  1. Command
  2. Flyweight
  3. Observer
  4. Prototype
  5. Singleton
  6. State

Eğer başka bir sırayla okumak isterseniz ilginizi çeken kalıbın üzerine tıklayarak öğrenebilirsiniz. Bu kalıpların detaylarına dalmadan önce cevaplamamız gereken esas bir soru var:

Oyun programlama kalıpları nedir, neden öğrenilmelidir?

“Programlama kalıpları [programming patterns], çok rastlanan, birbirine benzer sorunları çözmek için geliştirilmiş ve işlerliği kanıtlanmış genel çözüm önerileridir” — Wikipedia

Oyun sektöründe farklı düşman tipleri tasarlayan, değiştirilebilir input sistemi yazan veya achievementları sonradan oyuna entegre etmeye çalışan ilk mühendis siz değilsiniz — bunlar bizden önce birçok geliştiricinin karşılaştığı ve çözdüğü problemler. Programlama kalıpları da sık sık karşılaşılan bu problemlere cevap olarak uygun görülen kod yazma şekilleridir.

Programlama kalıpları size nasıl daha etkili yapay zeka yazacağınızı, game loopunuzu nasıl optimize edeceğinizi veya input sisteminizi nasıl daha keyifli yapacağınızı öğretmez. Bunun yerine programlama kalıpları, bu birbirinden farklı sistemlerin birbirleri ile nasıl konuşacağını belirler. Kısaca, programlama kalıpları kodunuzu organize etmenize yardımcı olur.

Genelleme yapmak gerekirse bir mühendisin hayatını bu flowchart ile belirleyebiliriz.

  1. Mühendisin çözülecek problemi belirlemesi,
  2. Halihazırda yazılmış kodun nasıl çalıştığını öğrenmesi,
  3. Gereken kodu yazması,
  4. Son olarak da yazdığı kodu temizlemesi gerekir.

Her ne kadar akıllarda en çok zaman ve enerji alan adım 3. adım, yani gereken kodu yazmak gibi dursa da, aslında neyi nereye yazacağını bulduktan sonra kodu yazması kolaydır. Genelde en çok zaman alan adım var olan kodu öğrenmektir. Hele ki o kod ile her gün çalışmıyorsanız, hele ki takımınız büyükse ve hele ki yıllardır üzerinde çalışılan bir oyun var ise…

Tabii ki, tüm oyununuzu tek bir dosya içerisinde yazabilirsiniz, oyununuz yine çalışır! Hatta bu şekilde yazdığınız kod ile Steam’de 9.6/10'luk bir oyun bile çıkartabilirsiniz.

Hayali bir oyundan bahsetmiyoruz, Terry Cavanagh’ın geliştiriği dünyaca ünlü VVVVVV oyunu tam olarak böyle geliştirilmiş bir oyun. Eğer işler hiç organizasyon olmadan da yürüyebiliyorsa ne gerek var programlama kalıplarına?

Birlikte bir zihin egzersizi yapalım. Diyelim ki Terry ile çalışacak yeni bir mühendissiniz. İlk göreviniz VVVVVV oyununda küçük bir değişiklik yapmak. Varsayalım ki yapmanız gereken şey oyuna basit bir görsel efekt eklemek. Oyunun kodunu aşağıda bulabilirsiniz. Kodu açıp kısaca bir göz gezdirin ve bu yeni ekleme için stratejinizi aklınızda belirleyin.

7000 satırlık bir dosya olduğunda projeye sonradan dahil olmak zor, değil mi? Kodunuzu doğru organize etmek tam da bu sebeple önemli. Oyun sektöründe asla yalnız başınıza çalışmayacaksınız. Tek başınıza çalışsanız bile aslında yalnız değilsiniz — geçmişteki kendinizle birlikte çalışıyorsunuz.

https://xkcd.com/1421/

Farklı kişiler ile çalışmanın yanı sıra, doğru programlama kalıplarını kullanmak kodunuzun daha esnek olmasını sağlar. Oyun yapmak iteratif bir süreçtir. Yani oyunu geliştirdikçe yeni fikirler gelir, yeni fikirler geldikçe de oyunu geliştirmek gerekir. Durum böyle olduğu için yazdığınız kodun esnek olması ve yeni fikirlerin eklenebilmesine açık olması gerekir. Doğru programlama kalıplarını kullanmak, ileride oyununuza yeni özellik eklemesini çok kolaylaştıracaktır.

Eğer kod organizasyonunu doğru yapmışsanız ateş topu büyüsünün yanına bir buz topu, elektrik topu, ışık topu vs. büyüleri eklemeniz çok kolay olacaktır — ama eğer çok düşünmeden ilerlemişseniz ekleyeceğiniz her yeni tip büyü için ayrı ayrı değişiklikler yapmak zorunda kalabilirsiniz. Bu da belli bir noktada sizi yeni özellik eklemekten alıkoyacaktır veya oyununuz gecikecektir ya da tam potansiyeline ulaşamayacaktır.

Özetlemek gerekirse, programlama kalıplarının kullanılması:

  • Kodunuzu farklı kişilerin kullanabilmesine,
  • Değişiklikleri daha kolay yapabilmenize,

olanak sağlar.

Önümüzdeki haftalarda Command kalıbı ile derinlemesine başlıyoruz. Haftaya görüşmek üzere.

ÜNOG’a Katıl Bültenimize Abone OlGeçmiş Yayınlarımızı Oku

--

--

ÜNOG
ÜNOG
Editor for

Türkiye’nin en güzel oyun geliştirme topluluğu. https://unog.dev