Oyun hazırlıyorum.
John HATTAN’ın makalesinden çeviri:
Hangi Dili Kullanmalıyım
Bu soru her Oyun Programlama sitesinin Sıkça Sorulan Sorular bölümüde bulunur. Oyun geliştirme forumlarında haftada bir kaç kez sorulur. İyi bir sorudur lakin cevabı kolay değil. Bilgisayar dilleri vardır ki bazı programlar için diğerlerinden daha uygundur. İşte, tanımları, avantajları, dezavantajlarıyla belli başlı programlama dillerinin bir listesi. Umarım bu size bir karar vermenizde yardımcı olur.
C
C yapısal programlayı destekleyen bir dildir. GOTO’larla dolu tek bir blok parçasındansa, aşağı yukarı hareket eden fonksiyon çağırımlarından oluşur. Gerçekte C’de de GOTO vardır, ama bu sınırlıdır ve yapısal çözümlerin çok daha karmaşık olduğu durumlarda son çare olarak kullanılır.
Sistem programlama kökleri sayesinde C’yi assembly dilleriyle birleştirmek kolaydır. Fonksiyon çağırma ara yüzü çok basittir, ve assembly kodu C kodunun içine yerleştirilebilir.
Avantajları: Küçük hızlı programlar yazmak için iyidir. Assembly’le kullanmak kolaydır. Standartlaşmıştır, başka platformlardaki versiyonlarıyla benzerdir.
Dezavantajları: Nesneye yönelik (Object Oriented) programama tekniklerini kolayca desteklemez. Yazımı (syntax) zordur ve kendini karmaşıklaştırır.
C’yle Yazılan Oyunlar: Çok çok fazladır.
C++
C’nin nesneye yönelik tipidir. Nesneye Yönelik programlar (NY), yapısal programların bir adım ötesindedir. NY programlar, fonksiyonlardan ve verilerden oluşan paketlerden (nesnelerden) oluşur. Program yazmayı “program bloklarını bir araya getirmek” kadar kolaylaştıran bir çok nesne kütüphanesi mevcuttur (en azından teoride). Örneğin, nesne toplulukları haline getirilmiş bir çok veri tabanı ve grafiksel arayüz kütüphanesi vardır.
Avantajları: Büyük programlar yazmak için C’den daha uygundur. Nesneye yönelik programlamayı etkin kılıyor. Genel veri yapısı kütüphaneleri sayesinde bizi, bağlı liste (linked list) ve genişleyebilen dizin (grow-able array) gibi alt düzey detaylarla uğraşmaktan kurtarıyor.
Dezavantajları: Çok fazla geniş ve karışık. C gibi, yazımı zor. C’den daha yavaş olabiliyor. Tam olarak doğru derleyebilen derleyiciler fazla değil.
C++’la Yazılmış Oyunlar: Çok çok fazla. Hemen hemen tüm ticari oyunlar C++’la yazılıyor.
C++’I MI ÖĞRENMELİYİM YOKSA C’YLE Mİ BAŞLAMALIYIM?
Bu da ikinci en çok sorulan sorudur. Maalesef cevap çok açık değil. C öğrenerek kendinize çok zaman kazandırabilir, programlar yazabilirsiniz. Ama bunun 2 dezavantajı var:
- Oyununuzdaki verilerin modellenmesinde size çok daha fazla kolaylık sağlayacak bir yolu kaçırıyorsunuz.
- NY programlama öğrenmeyerek, kendinize ileride düzeltemeyeceğiniz kötü programcılık alışkanlıkları kazandırabilirsiniz. Bu konuda bana güvenin.
En büyük ticari oyunlar, first-person shooter’lar dahil, C++’la yapılmakta. Ama programcıları, sadece C kullandıkları halde, NY programlama kullandıklarını iddia etmektedirler. Eğer sadece C öğrenmek istiyorsanız, en azından NY programlama tekniklerini de öğrenin. NY programlama simülasyonlar için mükemmel bir metottur, ve NY programlamayı öğrenmezseniz, işi “zor yolla” yapmayı seçmiş olursunuz.
Visual Basic
6 versiyon sonra Visual Basic gayet başarılı. Kullanıcı arayüzü biraz değişmesine rağmen hala “kullanıcı arayüzüne kod ekle” mantığıyda çalışır. Anında derleme olduğu için mükemmel bir deneme ortamı (environment for prototyping) olanağı sağlar.
Avantajları: Temiz, öğrenmesi kolay. Anında derleme, hızlı ve kolay deneme ortamı sağlıyor. Bir çok eklentiler (add-on) mevcut. DirectX eklenti desteği var.
Dezavantajları: Uygulamalar geniş ve bir çok çalışma zamanı DLL’si (runtime DLL) gerektiriyor. Form ve diyalog tabanlı uygulamalar yapmak kolayken, iyi grafikli uygulamalar yazmak zor. Windows API’leri cagirmak zahmetli. NY özellikleri var ama tam olarak desteklemiyor. Microsoft patentli.
Visual Basic’le yazılmış Oyunlar: Birkaç tane. Bir çok shareware oyun ve bir miktar ticari uygulama var.
John HATTAN
Benim Yorumum:
Aslında VB ile yazılmış programlar bu kadar az değil. Ayrıca DirectX kullanmak çok kolay olduğundan güçlü programlar da yazılabiliyor. Ben bunun örneklerini çok gördüm. Eğer ilgilenirseniz birkaç örnek yollayabilirim. İyi grafikli uygulama yazmak da çok zor değil, DirectX kullanarak çok hızlı ve gelişmiş 3 boyutlu ortamlar yaratmak mümkün.
Sonuç olarak, eğer gerçekten iddialı programlar yazmak, ses getirecek, ilgi çekecek işler başarmak istiyorsanız C++’ı mutlaka öğrenmelisiniz. Diğer taraftan bu da ‘ha’ diyince öğrenilmiyor. Ama internet elimizin altında, Merlin’in Kazanı gibi bir de buluşma noktamız varken bu olanakları değerlendip birbirimize yardımcı olabiliriz. Mühim olan bir ucundan başlamak, üşenmemek, “çok zor” dememek. Azmin elinden ne kurtulmuş!
Eğer “ben çok denedim, bir türlü C++’ı kafam almıyor” diyorsanız, o zaman Visual Basic öğrenin derim. En azından onu kullanarak yapacağınız birkaç güzel uygulama kendinize olan güveni yerine getirecektir. Size bu işin ne kadar kolay olduğunu göstermek için, kendim sağdan soldan öğrendiğim tekniklerle yaptığım manasız bir DirectX çalışmasını gönderebilirim.
Ben sürekli yabancı internet sitelerinde bu işlerle ilgili yazılar okuyorum, insanların yapıp gönderdikleri oyunlara bakıyorum ve sadece hobi olarak yaptıkları oyunları görünce ağzım açık kalıyor. Türkiye’de C++’ı ya da Visual Basic’i bu kadar iyi kullanabilen insanlar yok mu, tabi ki var. Porgramlarını profesyonelce yapan mühendislerin kodlarını gördüm. Tam anlamıyla organize olup müthiş bir şekilde optimize edilmiş programlar yazmışlar. Peki ama bu insanlar neden bilgisayar oyunlarına el atmıyorlar. Bunun nedeni basit, Türkiye’de bu şekilde para kazanılmıyor. Ne kadar çıkış olduysa hepsi de bir şekilde başarısızlıkla sonuçlandı. Ya beklenen ilgiyi görmedi ya kopyaları piyasayı doldurdu ya da alanlar arkadaşlarına kopyaladı; yani el birliğiyle bindiğimiz dalı kestik. Bizim ihtiyacımız olan iyi bir reklam ve insanlarda “bizi destekleyin” bilincini uyandırmak. 2-3 kere McDonalds’ta yemek yemek yerine o parayla yerli yapım bir oyun alsak, ne açlıktan ölürüz ne de iflas ederiz.