Ünite 5: Oyun Programlama

Oyun Kavramı

Oyun, bir faaliyete ilişkin düşünce ve duyguları ortaya çıkaran, eğlence odaklı bir aktivitedir. Bu aktivite içerisinde bir kurallar bütünü bulunması ve temel olarak bir nesne belirtilmiş olması gerekmektedir.

Bir dijital oyunun kendi içerisinde kurallar bütünü olmalıdır. Bu kurallar kimi zamanlarda belli veya belirsiz olabilmelidir. Belirli olan açık kuralların herkes tarafından anlaşılır olması gerekmektedir. Ancak belirli olmayan kuralların da oyuncunun oyuna olan ilgisini kaybetmesine neden olacağını görmek gereklidir. Belirsiz olan kuralların bağlayıcı bir niteliği olmamalıdır. Bazı durumlarda gizli kurallar, oyuncular arasında rekabetin artmasına sebep olmaktadır. Oyunun oynanma isteğinin artmasına neden olabilmektedir.

Kimi durumlarda ise gizli kurallar oyunun temelini oluşturabilmekte ve oyunun içeriğine bağlı olarak oluşturulabilmektedir.

Belirsizliklerin oluşmaması için, aynı girdi için çıktının sabit olduğu bir sistemin olması tercih edilmektedir. Bir dijital oyunun, belirleyici özelliklerinin çok olup, belirsizliklerin az olması tercih edilen bir durumdur.

Her oyunun temel bir dayanak noktası olmalı ve bu nokta bir modelle birlikte pekiştirilmelidir.

Dijital Oyun Türleri

Kısaca dijital oyun türlerini şu şekilde sıralamak mümkündür:

  • Aksiyon oyunları,
  • Birinci şahıs nişancı oyunları (First Person Shooter-FPS),
  • Macera oyunları,
  • Dövüş oyunları,
  • Platform oyunları,
  • Bilmece oyunları,
  • Bulmaca / Zekâ oyunları,
  • Rol yapma oyunları,
  • Simulasyon oyunları,
  • Strateji oyunları,
  • Spor oyunları,
  • Mantıksal oyunlar,
  • Matematik oyunları,
  • Eğitsel oyunlar,
  • Çevrimiçi oyunlar.

Dijital Oyun Geliştirme

Dijital oyun geliştirme aşamaları; fikir ve senaryo belirleme, hedef kitle, hikaye, oynanabilirlik, rekabet ortamı ve donanım kaynakları tüketimi olarak ifade edilebilir. Bir dijital oyunu meydana getirmek için en önemli aşama fikir ve senaryo aşamasıdır.

Fikir kısmı oyunun ana temasını oluşturmaktadır. Yani, konunun ne üzerine gerçekleşeceğinin belirlenmesidir.

Fikir ortaya atıldıktan sonra ikinci önemli adım, o fikrin nasıl işleneceğinin belirlendiği “senaryo” dur. Senaryo, oyunun başlangıcından final sahnesine kadar bütün aşamaların detaylandırıldığı yapıdır. Basit fikirler bazen çok önemli sonuçlar doğurabilmektedir. Önemli olan o fikrin nasıl sunulacağıdır.

Dijital Oyun yapımı içerisinde hedef kitle mutlaka göz önünde bulundurulmalıdır. Oyunun yaş, ırk ve cinsiyet grupları için sınırlanmaması gerekmektedir.

Dijital oyunlarda alışıldık öğelerden ilham alınması ancak monotonluktan uzak bir tasarım yapılması tercih edilmelidir. Bu durumda fikirlerin değişik bir hikâyeyle süslenmemesi, oyunun benzeri oyunlar arasında kaybolmasına neden olacaktır. Ayrıca, oyunlardaki karakterlerin ve ortamın itici olmaması, kendini kullanıcıya sevdirerek akılda kalmasını sağlayacaktır.

Dijital oyunun senaryosundaki hikâye kısmının uzun görsellerle anlatılması kullanıcıyı bunaltacaktır. Özellikle mobil oyunlarda kullanıcının önünde, oyun hakkında fikir sahibi olacağı pek fazla zaman yoktur. Bu zamanı iyi kullanmak gereklidir. Aynı şekilde oyunun oynanış biçimi de önemlidir. Oynanabilirlik, bir oyunu rahat ve kolay bir biçimde oynayabilmektir. Oyunun nasıl oynandığını sade ve çok az sayıda görselle anlatmak en ideal olanıdır

Kullanıcıyı oyalamayan, karmaşık menülerle uğraştırmayan ve bir an önce oyuna başlayabilecek şekilde olan tasarımlar tercih edilmelidir. Kullanıcı arayüzü (User Interface-UI) ve kullanıcı deneyimine (User ExperienceUX) dikkat edilmelidir.

Kullanıcılar genellikle bir oyuna başladıktan sonra o oyun içerisinde kullanılacak olan yapıları veya skor bilgilerini görebilmek ister. Örneğin, ekranın bir köşesinde yapılan en yüksek skor ve anlık skorunun görünmesi düşünülebilir.

Bir dijital oyunun oynanışının da mümkün olduğunca basit olması gerekir. Özellikle mobil cihazlarda, hemen hemen her oyun bölümünde, oynanabilirlik derecesinin yüksek olması tercih edilmelidir.

Bir dijital oyunda rekabet ortamının kullanıcıya yansıtılması gerekir. Kullanıcının kendi rekorlarını kırması yetmeyebilir, sürekli puan kazanma arzusu tetiklenmelidir. Bu bağlamda yüksek puan almaya çalışacağı bir sistemin oluşturulması gereklidir. Oyunda bir hedefin olması ve kullanıcının ona ulaşmaya çalışması sağlanmalıdır.

Diğer bir önemli husus donanım kaynakları ve bu kaynakların tüketimidir. Özellikle mobil oyunlarda donanım denildiğinde akıllara ilk gelen bileşenler pil ve ekrandır. Çünkü oyun oynarken mobil cihazın pili de tüketilmektedir. Cihazın pilinin yetmediği durumlarda cihazın kapanması ve oyuncunun oyun içerisindeki bölüm için vermiş olduğu çabanın boşa gitmesi gibi istenmeyecek bir durum oluşabilir.

Cihazın pilinin tükenmesi her dijital oyunda farklı derecede olmaktadır. Pil tüketimini, oyun içerisinde yer alan görseller, kodlama aşamasında kullanılan metotlar vb. unsurlar etkilemektedir. İşlemci çalıştıkça da pil tüketimi artmaktadır. Benzer şekilde yazılacak metotlardaki matematiksel yapılar içinde pil ömrü daha az tüketilecek şekilde kodlanabilir.

Dijital Oyun Tasarımı ve Programlama

Bir dijital oyunun geliştirme aşamasının temelinde, geliştirilmesi düşünülen oyun türünün yapısına uygun bir “oyun motoru” seçilmesi yatmaktadır. Oyun motoru, kişilerin veya şirketlerin oyun yapımında kullandıkları ücretli veya ücretsiz yazılımlara verilen genel bir isimdir. Bu yazılımlar, çok sayıda kütüphane dosyalarını içeren yapılardan oluşmaktadır.

Dijital oyunun geliştirme sürecinde ilk olarak oyunun ne amaçla ve hangi türde yapılacağı kararlaştırılmalı ve doğrultuda gerekli yöntemler izlenmelidir. Bu geliştirme sürecini basit düzey ve ileri düzey olarak ayırabiliriz. Basit düzey olarak düşünülen süreçte modeller, kaplamalar, ses dosyaları ve oyun motorunun programlama dilinde hazırlanan kodlar bölüm editöründe birleştirilir. Hazırlanan bölümler grafiksel kodlarla desteklenerek oyun tamamlanma aşamasına getirilmektedir.

İleri düzey oyun geliştirme sürecinde ise detaylanmış modeller, kod kütüphaneleri, bölüm editörü, model editörü, kaplama ve kod editörlerinde düzenlenerek programlanır.

Tamamlanmış bölümlere uyarlanacak grafik ve sistem kodları kullanılabilecek hale getirilir. Bu süreç son olarak, ek grafik kodlarının eklenmesi, harici kütüphanelerin oluşturulması ve oyun motoruna eklenmesiyle tamamlanmaktadır.

Modellemenin üç boyutlu ortamlarının gerçeğe yakın ve oyun türüne uygun olacak şekilde hazırlanması için bünyesinde barındırdığı “model editör” kullanılmaktadır. Hedeflenen ortamların fotoğraflarının dijital ortama aktarılmasından sonra üç boyutlu (3D) modellerin birleştirilmesiyle, oyun içi ortam modelleri oluşturulmaktadır. Oluşturulan modeller, detay seviyesi (“level of detail-LOD”) olarak ifade edilen biçimdedir. Detay seviyesi, kameraya yakın modellerin daha detaylı görünmesi, uzakta olan modellerin detay seviyesinin daha düşük olması mantığına dayanmaktadır. Oyun tasarımı ve programlama yapısını kısaca dört kısımda toplamak mümkündür:

  • Modelleme (modeling): Varlık, poligon sayısı, üçgen, dörtgen, gerek zamanlı sonuçlandırma, iyileştirme, detay modelleri, silüet.
  • Kaplama (texturing): UV haritası, dağılım haritası, yükselti haritası, normal harita, yansıma haritası, saydamlık haritası, yerdeğişim haritası, yayılma haritası, ışık haritası, doku döşeme, çıkartmalar, kaplamalar, doku çözünürlüğü.
  • Animasyon (animation): Donatma, giydirme, tek animasyon, döngüsel animasyonlar, soket, eklenebilen animasyonlar.
  • Programlama (programming): Oyun motoru, fizik motoru, oyun döngüsü, oyun durumu, kullanıcı arayüzü, yapay zeka, yol işareti, kod yazma.

Günümüz Popüler Oyun Motorları

Üç boyutlu oyun motoru olan Unity, gelişmiş özelliklere sahip üç boyutlu dijital oyunların cihaza kurulmadan oynanmasını sağlayan bir yapıya sahiptir. Unity 3D motorunu kullanan oyunlar, Unity Web Eklentisi sayesinde hiçbir kurulum işlemi olmadan bir tarayıcı üzerinden çalışabilmektedir.

Unity’nin oyun programcılarına sağladığı başka bir kolaylık ise, Unity kullanılarak geliştirilen dijital oyunun herhangi bir altyapı değişikliğine gerek olmadan farklı platformlara (PC, Mac, Web, PS4, iOS, Android, Windows Phone) uygun olarak derlenebilmesidir.

Epic Games firması tarafından geliştirilen Unreal Engine, piyasadaki çoğu birinci şahıs nişancı (FPS) türü oyunların yapımında kullanılmıştır. Programlama dili olarak C++ kullanılsa da birçok kütüphane ve script dillerini desteklemektedir.

CryEngine; üç Türk kardeşin kurduğu Crytek adlı firma tarafından geliştirilmiş oyun motorudur. Yüksek grafik kalitesini sağlarken dışarıdan fizik motoru veya kütüphane ihtiyacının duyulmaması CryEngine motorunu popüler yapan özelliklerindendir. Öte yandan dezavantaj olarak, geliştirilen dijital oyunların yüksek kapasiteli donanım gereksinimi olması gösterilebilir. CryEngine 4 ile bu optimizasyon sorunları indirgenmiş olsa da hala piyasada donanım altyapısı açısından yüksek gereksinim isteyen oyun motorlarından biridir. Diğerlerine nazaran zor bir arayüze sahip olan CryEngine, grafik olarak daha gelişmiş yapısıyla C++ dil yapısını iyi bilmeyi gerektirmektedir.

CopperCube; Ambiera firması tarafından geliştirilen oldukça yeni grafik editörü ve oyun motorudur. Piyasadakilerden farklı olarak hiçbir teknik kodlama ve profesyonel üç boyut bilgisi gerektirmeden üç boyutlu dijital oyunlar oluşturulabilmesini sağlamaktadır. Yapay zekâ davranışlarının da bu ortamda hazırlanabildiği editörde Windows, Android, iOS, HTML5, Adobe Flash ve WebGL uyumlu dijital oyunlar tasarlamak mümkündür.

XNA, 2006 yılında Microsoft tarafından oyun programlama üzerine .NET çatısını kullanarak iki boyutlu ve üç boyutlu oyunlar geliştirmek için piyasaya sürdüğü bir başka çatıdır. XNA, bir programlama dili olmayıp içerisinde yüzlerce sınıf barındırmaktadır. Bu sayede nesneye yönelik programlama yapısıyla sınıflar sunacak şekilde yapılandırılmıştır. .NET dillerinden herhangi birinin (C#, VB.NET, C++.NET) bilinmesiyle XNA ile oyun programlamaya başlanabilecek bir ortam sunulmuştur.