Oyun Programlama Nedir
« : Eylül 20, 2008, 13:32:37 ÖS »
Teşekkür Et
Oyun programlama , oyun yapımının bir alt branşıdır. Coğu profesyonel ve orta seviye oyun programcıarı bu işe hobi olarak başlamışlardır. Genelde Programlama ve bilgisayar mühendisliği öğrencileri oyun yapmayı , programlama dillini öğrenmenin ve bilgisayarın yapısını anlamak için en yöntemlerden biri olduğunu söylerler, ben de bu görüşe tamamen katılıyorum. Unix sistemleri ve C programlama dili, orjinal programcıları oyun oynama isteği yüzünden yarattıkları da bir gerçektir. Peki nedir oyun programlama, işte bu yazının amacı da, oyun programalanın ne olduğunu size anlatmaya calışmak. Oyun programlayı anlatmak için, onu parçalara bölüp, her birini açıklamanın daha doğru olacağını düşünüyorum.
1 Oyun Geliştirme
1.1 Prototip üretme
1.2 Oyun dizayn
1.3 Programalama dilli
1.4 API. Arayüzler ve yardımcılar
1.4.1 Grafik arayüzleri
1.4.2 Diger arayüzler
1.5 Oyun döngüsü
1.6 Üretim
1.7 Kilometre Taşları
1.9 E³ demo
1.10 Oyunu bitirme
1.11 Oyuna daha sonradan eklemeler
2 Kültür
3 Araçlar
4 Yapım zamanı
5 Hobi olarak oyun programlama
Oyun Geliştirme
Profesyonel oyun geliştirme genelde oyun dizaynı ile başlar. Burada asıl önemli olan oyun fikrinin doğru seçilmesidir. Oyunun en önemli yapı taşlarından biri oyunun fikridir, isterseniz grafikleriniz, ses sisteminiz mükemmel olsun, sağlam bir fikre dayanmayan oyunların yasam süreleri fazla olamaz. Tetris oyununu ele alalım, Tetris oyunu için kimse mükemmel grafikleri var yada ses harika diyemez. Ama bir kaç saat oynadıktan sonra alışkanlık bile yapabilir. Bir dönem Türkiye'de ne kadar popüler idi. Sanırım oyun fikrinin ne kadar önemli olduğu anlamışsınızdır. Bu işle ilgileniyorsanız, ve oyun fikirleriniz var ise bunları küçük bir deftere yazın, müthiş bir oyun fikrim var diye hemem programlamaya başlamayın. Birden fazla fikir üretin, bunu arkadaşlarınızla paylaşın bakalım onlar ne diyor. Unutmayın oyun programlama zaman ve enerji gerektiren, doğru bir fikir ile yola çıkmazsanız, ileride saatlerce uğraşıp bundan vazgeçebilirsiniz. Profesyonel firmalarda durum biraz daha farklı bunun için özel uğraşan bölümler var, bunlar sürekli fikir üretiyorlar, sonuçta son kararı veren, asıl maaşları veren kişi.
Prototip Üretme
Prototip yazma, oyun programlamanın en önemli parçalarından biri, bu oyunla ilgili fikirlerin, algoritmaların ve önemli özelliklerin test edilmesini sağlıyor. Prototip üretme genelde oyun üretimi öncesinde başlıyor, özellikle oyun dizaynı oluşmadan, bunun nedeni de oyunla ilgili detayların değişmesinde ve gelişmesinde büyük yardımı olması. Ayrıca prototip üretme oyunun yapım aşamasında da devam ediyor, yeni oluşan fikileri test etme, gerekli ve gereksiz özelliklerin belirlenmesi için. Prototip yazdığınız programlama dilinin asıl oyun programlama dili ile aynı olması önemli değil , sonuçta amaç test etmek. Oyun fikrinin testi grafiklerin ve sesin değil. Oyun programcılarının bunu yapmak icin geliştirdikleri araçlar var. Bu konuya ilerde geri döneriz.
Oyun Dizaynı
Profesyonel firmalarda oyun programcılarının ve grafik artislerinin asıl işi oyun dizayn değildir, onlar sadece fikirsel olarak bu işe katılırlar. Aslında oyun dizaynırı diye bir kavram da coğu firmada yoktur sonucta bu bir takım oyunu ve bu işte calışan bütün kişilerin fikirleri önemlidir. Electronic Arts gibi büyük firmalar hariç.
Oyun dizaynı sürekli değişen bir yapıdadır ve esnek olması gerekir, Biraz amatör programcılar için oyun dizaynı nedir basitçe inceleyelim bakalım.
Bu size oyunun hangi ana temeller üzerine dayandığına dair bir yol haritası oluşturur.
Oyun Taslağı için en güzel yöntem kendinize sorular sormaktır. örneğin;
* karakterler kim ve kim ne kadar büyük?
* karakterler neye benziyor?
* Oyun alanı nekadar büyük?
* Oyun grafikleri nasıl olacak 2D / 3D?
* oyun hızı nasıl olacak?
* Nasıl leveller olacak?
* karakterler , kötü adamlarla karşılaştığında nasıl geçecekler(basitçe)?
* Kontrol nasıl olacak , gamepad, klavye?
* yapay zeka nasıl olacak
* kötü adamlar nasıl ve neye göre hareket edecek
* Oyunun puanlaması nasıl olacak yada olacak mı?
Bir tek kelime kod yazmadan bunların hepsini yazmanız gerekir
Çok fazla da detaya girmeyin ama ana hatları belirlemekte büyük fayda var , çok fazla detaya girerseniz, oyunu bitmeyen bir döngü içine sokarsınız. Çünkü daha neyin nasıl olacağı ortada yok.
Bir oyunun dizaynını nasıl yaparsınız
A) Oyununuza bir kod adi verin .
Bu genelde oyunuzun asıl adı da olamayabilir. İleride oyunu bitirdiğinizde oyun adını tekrar kararlaştırırsınız.
B) Genel açıklama -
Bu genelde oyunun neye benzediğini, hangi karakterler olduğunu yukardaki soruların yanıtları. Yada şöyle düşünün , 6 yaşında bir küçük kardeşiniz var. Sizin yaptığınız oyunu merak ediyor. Siz ona bir mektup yazacaksınız ve oyununuzu anlatacaksınız. 6 yaşındaki bir çocuğa anlatırmış gibi olsun. Okusun ama sıkılamasın, ve olayı anlasın
C) ekran detayları ve kullanıcı ara yüzü
Gelelim daha detaylı kısma. Ekran çözünürlüğü ne olacak. Kullanacılar ekranı nasıl görecek. yardım tuşları ve güç seviyesi , vs vs nerelerde olacak. Bazı ufak detaylar daha , oyununuzda her zaman çabuk çıkış yolu olsun, escape her zaman her zaman çalışsın. Oyunun kaydı falan nerede olacak. Çok sevdiğiniz bir oyunu alın ve onun ekranda gördüğünüz özelliklerine dikkat edin. Oyun kullanıcı ile nasıl konuşuyor. Bu gibi küçük detaylar oyunun albenisini artırır.
D) Sanatsal detaylar
- hangi grafikleri kullanacağınızı yazın . herhangi bir grafik motoru kullanacaksanız ondan biraz bahsedin. Hangi karakter çizimlerine ihtiyacınız var, Ekranadaki yazılar , hangi renkte ve ne büyüklükte çizimle ilgili diğer detaylar.
E) Müzik ve ses detayları
- Nasıl ses efektleri kullanacaksınız (SFX) - Oyun müziği nasıl olacak - oyun muziği ve ses efektleri için hangi programları kullanacaksınız. -Unutmayın ses ve müzik çok önemli. En sevdiğiniz oyunu bir de sesiz oynayın bakalım aynı zevki alabiliyor musunuz.
F) Proje uygulama detayları
- Bu projeyi nasıl yürütmeyi düşünüyorsunuz -hangi aşamalardan geçecek. - Bir takımla beraber calışıyorsanız aranızda iletişim nasıl sağlanacak. -Sorumluluklar nasıl bölüşülecek. Burası biraz önemli, sözde kalmayın herkesin sorumluluklarını yazın. Herkes neyi ne zaman yapacak bilsin. Hatta imzalatın. Oyunu programlamaya nasıl başlanacak. kendinize yada takımınıza bir yol haritası/ajanda çizin. Birinci bölum ne zaman bitecek. Son tarih ne zaman. İlk bölüm şu tarihte, II. bölüm şu tarihte bitecek diye.
G) Yapay zeka detayları
- Hangi karakterler var nasıl tepki veriyor, - Oyunnun kontrol ettiği karakterler neye göre reaksiyon veriyor ve ne yapıyorlar. - karakterler neler yapmakla sınırlılar.
Programlama Dili
Bazı oyun programlama dilleri. Aşağıda programla dilleri ile ilgili bilgileri bir araya topladım. Seçerken dikkat etmeniz gereken konular. 1. Güç
2. Taşınabilirlik
3. Hız
4. Kullanabilirlik 5. Nesne oriyantasyonu (object oriented)
1. Güç = Programlama dillinde güç o programlama dillinin hangi gelişmiş matematik operasyonlarını sağladığı pointerları destekleyip desteklemediği, hatalarla nasıl başa çıktığı vb konulardır.
2. Taşınabilirlik= ismindende anlaşılabileceği gibi programlama dilinin başka systemlerde çalışıp çalışamayacağı, örneğin windowsta yazdığınınz kodu linuz tada çalıştırabilirmişiniz vb.
3. Hız= programlama dillinindeki kodu ne kadar hızlı bir sürede işlemci tarafından yürütüldüğü.
4. Kullanabilirlik= öğrenmesi ve okunması kolaymı,
5. Object oriented (OOP) ile ilgili yazımı okuyun. Burada kısaca değinmesi zor.
1'den 5'e kadar puanlandırılmıştır 1=cok kotu. 5= cok iyi
Diller
GUC
Tasinabilirlik
Hiz
Kullanilabilirlik
ObjectOriented
Toplam
Java
3
5
3
4
5
20
C
4
5
4
2
0
15
C++
5
4
4
3
5
21
.NETC#,VB
4
3
3
4
5
20
Assembly
1*
0
5
1
1
8
Python
3
3
2
4
4
16
Visual Basic
2
0
2
5
3
12
Bazı önemli noktaları da eklemek gerekir , örneğin java her nekadar yüksek skor alsa da oyun konsolları için o kadar uygun değildir. C ve C++ da derleyicinin özelliklerine göre farklılıklar oluşturur.
. Programlama dili seçerken dikkat edilecek noktalardan biri de hangi platforma hitap edildiğidir. Örneğin windows ya da playstation gibi. Bugün oyun piyasasında nesne oriyantasyonu nedeniyle en cok seçilen dil C++’dır. Ama bunun yanında java ve C de bir çok firma tarafından kullanılır. C# ve Ada yada pyton gibi diller oyun sektörü üzerinde çok fazla bir etki yapmayı başarabilmiş değiller. Assembly bazı oyun konsollarında hızı artırmak için bazı bölümlerde kullanılmakta. C# ve pyton genelde bu dili iyi bilen hobi olarak bu işle ugraşanlar tarafından kullanılmakta.
Günümüzde bir çok programcı kendi geliştirdikleti dilleri script yazmakta kullanmaktadırlar, Örneğin, QuakeC, Unrealscript gibi , onun yanında bazı firmalar hali hazırda bulunan Lua ve python gibi dilleri seçmekteler. Bunun nedenleri arasında yeni bir script dillinin başlangıçtan yaratılmasının zorluğu ve firmaya yeni gelenlere öğretilmesi için zamanın gerekliliği.
Vertex ve pixel shaders oyunlarda çok kulanılmaya başladı bu yüzden nVidia’nın Cg‘side bu tarz programlamada başı çekenler arasında.
API ( application Program Interface) arayüzler
Önemli noktalardan biri de hangi API lerin seçileceğidir. Belirlenen işler için uzmanlaşmış bir sürü Api bulunmakta. Bunlar genelde oyunun bir bölümünü geliştirmek için kullanılmakta, örneklerle açıklamaya çalışacağım, sanırım o zaman ne demek istediğimi daha iyi anlayacaksınız. Bir de bunları sıralamaya başlamadan küçük bir detaya daha değinmek istiyorum. Örneğin Windows için seçtiğiniz bir API ilerde bu oyunu playstation da geliştirmek için uygun olamayabilir. Bu yüzden taşınabilir bir API yani cross platform bir API seçmek her zaman daha karlıdır.
Grafik API
Civilization III, her nekadar geniş 2 boyuta dayanan bir oyun olsa da bugün grafikleri renderlemek için OpenGL'i kullanmakta. 90'larda bütün oyunlar hemem hemem 2 boyuttaydı, bugün ise hemen hemem ticari anlamda başarı yapmış “2 boyutlu oyun bulunmamakta. (yanılıyor da olabilirim.) Günümüzde satılan bilgisayarların %90'ın içinde windows kurulu gelmekte, bu yüzden oyun firmaları için en çok tercih edilen grafik API directx ve openGL dir.
DirectX'i kısaca anlatmak gerekir ise sadece bir grafik APi değildir. Birbirinden farklı diğer API'lerin bir araya gelmesinden oluşur. DirectX SDK'yı Microsoft'tan ücretsizce temin edebilirsiniz. DrectX'in grafiklere bakan api ismi direct3D'dir. DirectX'teki tek sorun Microsoft'un Direct3D'ye sahip olaması ve değiştirilmesinin güçlüğü. Bir de DirectX'in sadece Microsoft ürünleri için tasarlanmış olması. Artı bir özellik olarak directx OpenGl'e göre daha çok gözden geçirilip özellikler eklenmekte. Bununla beraber yeni nesil grafik kartlarında DirectX OpenGL'e göre daha hızlı olmakta.
OpenGL’i kısaca anlatmak gerekirse taşınabilir bir grafik API‘dir. Yani Windows'ta yazdığınız bir OpenGL kodunu MAC’e yada Linux platformuna taşıyabilirsiniz. OpenGL'in standartları vardır ve kimse OpenGL'in sahibi değildir. d not ARB topluluğu bir araya gelip OpenGL standartları gözden geçirmekte ve yenilikler var ise bunları standartlara dahil etmektedirler. Üniversitelerde ve okullarda sıklıkla kullanıldığı için , üniversite mezunu programcılar bu dili iyi tanımakta ve calışmaya başladıklarında OpenGL tavsiye etmektedirler. Dezavantaj olarak ARB nin fazla sıklıkla bir araya gelmemesini sayabiliriz.
Diger API’ler
Günümüzde değişik görevler için geliştirilmiş yüzlerce API bulunmakta, windows ortamında kullanılan DirectX için de ses effektleri, müzik, network oynama için videoları göstermek için geliştirilmiş Api'ler vardır. DirectX ücretsizdir ve sıklıkla firmalar tarafından kullanılır. Dediğim gibi API'ler oldukça fazla değişik API'leri ve bunları nereden temin edebiliceğinizi sıraladım. Buradaki linkten bunlari gorebilirsiniz
Oyun Döngüsü
Oyun programlamayı, diğer programlamalardan ayıran en büyük farklılık, oyunun döngüsüdür. Bu ne demek kısaca açıklayım. Örneğin bilgisayarınızda bulunan Microsoft Word‘ü ele alalım, programı çalıştırdığınızda zaman program siz ona bir şey yazmadıkça yada bir düğmeye basmadıkça orada bekler durur , sadece kullanıcının isteğine göre hareket eder. Ama bunun yanında oyun siz oyuna basladıktan sonra siz birşey yapsanız yada yapmasanız da oyun işlemeye devam eder. En basit oyun loop unu kısaca şöyle yazabiliriz.
while( Kullanıcı yok iken )
kullanıcının girdilerini kontrol et
yapay zekayı çalıştır-
düşmanları hareket ettir
çarpışmaları hesapla grafikleri çiz
Müzik çal.
end while
Bir oyun döngüsünde birbirden ayrı ve birbiriyle çalışan bir sürü görev ve işlem vardır. Bunları iyi bir şekilde kavaramak için threadle rve processler ile ilgili başka bir yazı yazmayı planlıyorum, sanırım bu konuya orada daha ayrıntılı bir şekilde değineceğim.
Üretim Aşaması
Üretim aşamasında programcılar oyun dizaynına göre kodu bilgisayara tuşlamaya başlarlar. Bu işlem oyun senaryosundaki değişiklikler , programcının yetenekleri ve elinde bulunan imkanlara göre farklılıklar götermekte bunun yanında saydığım özellikler ayrıca oyun yapımının nekadar süreceğini de belirleyen özelliklerdir.
Bunun yanında karşımıza bu aşamada lead programmer diye bir kavram çıkıyor. yani lider programcı, bu kişi genelde programlama bölümünün başında bulunan programcıdir. Bu kişi bu konuda deneyimi en çok olan programcılar arasından seçilir bu liderin oyunun tamamına etkisi vardır. Hatta sınırlar koyar yapabilecekleri ve yapamayacakları belirler. Örneğin oyun dizyanırı yada artist 1000 tane birbirinden farklı kişiden oluşan bir savaş ordusunun internet üzerinden online olarak oynanabileceği bir oyun fikriyle gelirse , "orada bir dur arkadaşım !!" diyecek kişidir. Ayrıca oyun programcılarının fikirlerini de bir üst mekana ileten kişi de lider programcıdır. Bunun yanında oyunların içinde kullanılacak grafikler ve yapay zeka gibi konular bu bölümde ilgili kişiler ve programcılar tarafından sürekli haftalık toplantılarda tartışılarak üretim aşaması devam eder.
Kilometre Taşları
Oyun Assets (varlıkları) nedir
Oyun varlıkları oyunun içine girecek ‘şeylerdir’. Bunlar oyun kodları tarafından kullanılır. Buna bazı örnekler 3 boyutlu modeller , yapılar , oyun videoları sayabiliriz.
Oyun yapımı aşaması bazı kilometre taşları ile belirlenir. Bunlar başlangıçtan belirlenen zaman çizelgeleridir, örneğin ilk demo ne zaman çıkacak. Birinci level ne zaman tamalanacak gibi. Sponsorlarla yada başka firmalarla bir arada çalışılıyorsa bunların önemi daha da artmaktadir. X oyunu bir internet sitesinde şubatın 3. günü demosunun yayınlanacağını söylemişse bu oyunun demosunun o tarihe yetiştirilmesi gerekelidir, eğer yetiştirilmez ise bu o internet sitesinin güvenilirliğini sarsacağından , firmamızın da itabarı sarsılır , bunun yanında imzalanmış bir sözleşme var ise firmanın tazminat ödemesi bile gerekebilir. İste bu zamanlar programcılar için sıkıntılı zamamlardır, çoğu zaman yemeğinizi bilgisayarın başında yemek ücretsiz fazla mesailer gibi durumlar.
E³ demo
E³ demo en son demodur ve büyük önem taşımaktadır, bu artık oyunun promosyonunun yapıldığı zon aşamadır , bundan sonraki aşama oyunun cd veya Dvd’lere basılıp dağıtılması aşaması gelmektedir, Bazı büyük firmalar bu aşamada bütün diğer projeleri askıya çekip, herkesi bir tek oyunun başına bile toplamaktadırlar. Tabi planlanmış şeyler zamanında gerçekleşmemiş ise.
Bitirmeye Yaklaşırken
İşte bütün sinirlerin gerildiği noktalardan bir tanesi, Artık oyun bitirmeye yakın bütün iş bitti derken test raporları gelmeye başlıyor. Bu aşamada artık betalar hazır. Betalar genelde oyunun bütün özelliklerini taşıyan baskıya girmeden önceki son halidir , firmadaki beta testerlar tarafından test edilip hatalar belirlenir. İşte bu aşama da ‘bug’larla uğraşılan aşamadır, aslında böcek demek , bu kodtaki küçük hataların tamamamına verilen isimdir. Ayrıca bu aşamada beta testler network tarzı bir oyun ise serverlarda test de edilir. Test aşaması sadece bu aşamada değil oyunun bütün aşamalarında geçerlidir, bir kilometre taşı biter testler başlar. Bütün bug’lar temizlendikten sonra yada minumuma indirildikten sonra oyun piyasaya çıkmaya hazır demektir.
Oyuna sonradan eklemeler.
Console'lardaki (playstation, ve xBox) oyunlara sonradan eklemeler yapma şansınız neredeyse hiç yoktur, o yüzden çoğu oyunun console versiyonu daha sonradan çıkar. Bilgisayar ortamı için patch (yama) dediğimiz kavram ortaya çıkıyor, genelde bunlar ikiye ayrılır, birincisi hataları düzeltmek için yapılan yamalar yada oyunun özeliklerini değiştirmek yada yeni senaryolar yapmak için yapılan yamalar.
Araçlar
Araclar kısmını da ayrıntılı bir şekilde anlatmıştım o yazımı okuyabilirisiniz.
Zaman
Günümüzün modern oyunlarında ilk aşamadan yani dizayndan , oyun cd sini bassılmasına kadar olan süre yaklaşık 3 yıldır. Sanırım bu işin okadar kolay olmadığını anlamışsınızdır.
Hobi olarak oyun yapanlar için
Hobi olarak oyun yapanlar için imkanlar biraz kısıtlı console oyun yapmak için gerekli araçları almak gerçekten pahalı ve bunları kullanmak için özel lisanslar gerekiyor, Bu yüzden en uygun olan windowsta oyun yapmak,
"Bu Konuya Teşekkür Edenler":
AdmiN