Oyun oluşturmak için en uygun dil hangisidir? [kapalı]


19

Bir süredir işlevsel programlama dillerine göz attım, ama aslında onlara girmekten çekiniyorum. Ama sanırım her şeye hazır olduğumdan emin olmak için en azından bu yöne bakmaya başlamanın zamanı geldi.

Haskell, F #, Scala, vb. Konularını gördüm. Ama diller ve toplulukları arasındaki farklar hakkında hiçbir fikrim yok, özellikle umrumda değil; oyun geliştirme bağlamında hariç.

Peki, bir oyun geliştirme açısından, hangi fonksiyonel programlama dili oyun programlama için en uygun özelliklere sahiptir? Örneğin, işlevsel diller için işlevsel oyun geliştirme kitaplıkları / motorları / çerçeveleri veya grafik motorları var mı? Oyun geliştirmede yaygın olarak kullanılan belirli veri yapılarını daha iyi işleyen bir dil var mı?

Alt satır: işlevsel oyun programlama için hangi işlevsel programlama dili en iyisidir ve neden?

Bu sorunun en iyi dili açıklayacağına inanıyorum / umuyorum, bu yüzden öznel eğilimine rağmen CW'yi işaretlemedim.


2
"Ne demek istiyorsun, 2D oyunlar veya 3D oyunlar?" "Ha? Bilmiyorum - aieeee "
Cyclops

@ Tepegöz uh, ne? Anlamıyorum ...
Ricket

@Ricket, kısmen, ne tür bir oyundan bahsettiğinizi, 2D veya 3D'yi (ve belki de gerçek zamanlı veya sıra tabanlı) açıklamak için bir istekti . Kısmen, ilk kısmı gizleyen bir Monty-Python şakasıydı. WUPS. :) Ve oyunun türünü belirtmenin yararlı olduğunu düşünüyorum - her şey için mükemmel olan tek bir fonksiyonel dil yoksa farklı diller farklı şeylerde daha iyi olabilir.
Cyclops

2D veya 3D'nin bir dil için mevcut olan çeşitli motor / kitaplık haricinde bir dil seçimini etkilediğine inanmıyorum. Şahsen hem 2D hem de 3D ile ilgileniyorum, bu yüzden bu soruyu yazarken birini ya da diğerini düşünmüyordum. Ancak, genel olarak, 2D ve 3D oyunlar çok sayıda ortak sistemi ve veri yapısını paylaşır (örneğin ses, giriş, AI, program yapısı, oyun döngüsü) ve 2D'ye taşınabilen veya tersine birçok 3D oyun vardır. Ve evet Monty Python'u görmedim, bu yüzden hiç anlamadım. :)
Ricket

1
En iyi dil hakkında kesin bir cevap olduğunu sanmıyorum.
Wei Hu

Yanıtlar:


12

Microsofts .net ailesinin bir parçası olan F #, oyun oluşturmak için harika bir temel olan XNA'ya erişebilir. Biraz googling bazı öğreticiler, videolar ve makaleler ortaya çıkarır. Büyük XNA belgeleri de yardımcı olmalıdır.

Haskell oyunlarında da bazı hareketler oldu, buraya bakın . Muhtemelen openGL bağları kullanacaksınız.

Scala Java ülkesinde oynadığından, mevcut tüm Java motorları / bağları ile entegre olur, bu SO yazısına bakın .

Bence tercihler aşağıya iniyor, ben sadece Haskell ile oynadığım sırada, her fonksiyonel dilin kendine has kendine has hayalleri olduğunu hayal ederdim. Her birinde küçük bir test oyunu kırmaya ve hangisinin size daha iyi geldiğini görmeye değer olabilir.

Dediğim gibi sadece en az Haskell deneyimim var, bu yüzden en iyisi hakkında yorum yapamam, ama bu kaynaklar umarım başlamanızı sağlamalıdır.


2
JVM'lerle ilgili sorunlar ve derleyici uygulamasının olgunlaşmamışlığı arasında, dilin kendisini iyi desteklemesine rağmen, fonksiyonel bir stil kullanırken Scala'nın performansını kabul edilemez buldum. Nihayetinde F # veya OCaml değil, Python veya Ruby kadar hızlı olur. (Scala'nın hızı daha fazla OO / prosedür tarzı için rekabet edebilir.)

Aslında XNA çalıştıran bir F # projesi var (
Peygamber Çiçeği

8

Lisp diyebilirim.

Oyunlarda en azından senaryo dili olarak, en azından Yaramaz Köpek'te (ya da sanırım) kullanıldı ve çok olgun bir dildir.

Lisp'in avantajı, varlık yönetimi dediğimiz şeyin önemli bir parçası olan serileştirmededir. Lisp'in serileştirilmesi önemsizdir, kod ve veriler birdir. Bu, varlıklar ve davranışlar için bir dosya biçimine sahip olmayı kolaylaştırır. AI için json / xml / yaml / bin'de bir tane ve bir F # dosyası gibi değil. Her şeyi varlık ifadesini basitleştirecek olan s-ifadeleri olarak kaydedebilirsiniz.


TBH buna karşı tavsiye ederim. Komut dosyası dilleri yalnızca geliştiricinin kullanması için değildir; modüller oyunu modifiye etmek isteyecekler ve onları (() ()))) () ((()) 'den daha hızlı korkutacak hiçbir şey
yok.Ayrıca

7
Modemleri korkutmak sizi endişelendiren bir şeyse, fonksiyonel bir dile gitmek muhtemelen doğru hareket değildir.
Paul Wicks

3
@RCIX & @Joe - Necro güçlerini ETKİNLEŞTİRİR. Neyse, Şema olan bir öğretim dili olarak kullandı. SICP , bir kitaptaki CS derecesi gibi bir şeydir ve bir grup okul tarafından kullanılır (yakın zamana kadar MIT dahil) ve HTDP daha az sert bir giriştir.
Jesse Millikan

1
@RCIX ve Joe gerçekten. lisp & şeması olan üniversiteler bir sürü tanıtım diller.
oberhamsi

1
Lisp kullanmak istediğiniz bir şey değildir. Yaramaz Köpeğin TEK, tek Lisp programcısı vardı ve bıraktığında tüm motorlarını C ++ 'a geçirdiler. Neden bir şirketten eski bir motorun sürekli parlayan bir örnek olarak sürüklendiğine dair bir fikriniz yok =)
Patrick Hughes

8

Bununla ilgili pratik bir deneyim kazandıktan sonra, içinde zaten küçük bir oyun yazmış ve daha fazlasını yapmayı planlayan Clojure'a oy verirdim.

Nedenleri:

  • Verimlilik - Clojure dinamik bir dildir. Etkileşimli REPL tarzı geliştirme için harika özelliklere sahiptir, örneğin çalışan bir oyun uygulaması örneğindeki durumu sorgulamak veya değiştirmek için REPL'i kullanabilirsiniz. Clojure'daki kod da genellikle gülünç derecede özlüdür. Clojure'da Java veya C # 'dan 3-5 kat daha üretken olduğumu tahmin ediyorum.
  • Saf olmayan - Haskell gibi saf fonksiyonel dillerin güzelliğini ve zarafetini takdir ederken, oyun programlama pragmatizmin kazandığı dağınık bir arayıştır. İhtiyacım olduğunda işlevlerime yan etkiler koymak istiyorum ve Clojure buna izin veriyor. Bunu söyledikten sonra, deyimsel Clojure tarzı çoğu zaman tamamen işlevsel olmaktır .
  • Metaprogramlama - Homokonik bir dil olarak Clojure'un Lisp mirası metaprogramlama / kod üretimi için mükemmeldir. Kendi DSL'lerinizi yapmak veya biyo-plakayı ortadan kaldırmak için "dili genişletmek" kolaydır. Clojure'u kendi oyun komut dosyası dili olarak kolayca kullanabilirsiniz ve dinamik kod derlemesi, komut dosyalarınızın çekirdek oyun motorunuz kadar hızlı çalışacağı anlamına gelir.
  • Java kitaplıklarına erişim . Java'nın tüm ses / grafik / AI / ağ kitaplıklarını kullanabilirsiniz, bu da diğer birçok işlevsel dile göre büyük bir avantajdır (bunları sıfırdan yazmak veya çok zor arayüz kodu geliştirmek zorunda kalacaksınız). Bu hayat kurtarıcı olabilir.
  • Çapraz platform - bu JVM'de çalıştırmaktan ücretsiz olarak gelir, ancak güzel bir bonus.
  • Performans - dinamik bir işlevsel dil için Clojure alabileceğiniz kadar hızlıdır. Her zaman JIT derlenir, asla yorumlanmaz. akıllı optimizasyon ile Clojure'daki saf, düşük seviyeli Java kodunun hızıyla eşleşebilirsiniz. Örneğin, Java ilkel dizilerini kullanabilir veya derleyicinin performans açısından kritik kodda statik olarak yazılan işlev çağrıları üretmesini sağlamak için tür ipuçları sağlayabilirsiniz.
  • Eşzamanlılık - Clojure, etkileyici bir yazılım işlemsel bellek sistemi tarafından desteklenen eşzamanlı durumu yönetmek için harika bir modele sahiptir. Bunun nasıl çalıştığı hakkında daha fazla bilgi için bu videoyu görmeye değer .

Ben sadece zaman olmaz Sana (Hala C / C ++ gerek) kenar kesme performansı gereken bir state-of-the-art grafik yoğun bir oyun yazıyordu eğer Clojure olacağını düşünün.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.