Яка функціональна мова найбільше підходить для створення ігор? [зачинено]


19

Я деякий час придивлявся до функціональних мов програмування, але вагаюся, чи дійсно в них потрапляти. Але я думаю, що саме час я принаймні почав дивитись у цей напрямок, щоб переконатися, що я готовий до всього.

Я бачив розмови про Haskell, F #, Scala тощо. Але я не маю поняття, що відрізняється між мовами та їхніми спільнотами, і мене це особливо не хвилює; за винятком контексту розвитку ігор.

Отже, з точки зору розвитку ігор, яка функціональна мова програмування має найбільше можливостей, що підходять для ігрового програмування? Наприклад, чи існують бібліотеки / двигуни / рамки чи графічні двигуни для функціональних мов для функціональних мов? Чи існує мова, яка краще обробляє певні структури даних, які зазвичай використовуються при розробці ігор?

Підсумок: яка функціональна мова програмування найкраща для функціонального ігрового програмування і чому?

Я вірю / сподіваюся, що це запитання визначить найкращою мовою, тому я не відзначив її CW, незважаючи на її суб'єктивну тенденцію.


2
"Що ви маєте на увазі, 2D ігри чи 3D ігри?" "Так? Я не знаю - Aieeee "
Циклоп

@Cyclops е-е, що? Я не розумію ...
Ricket

@Ricket, частково це був запит уточнити, про який тип гри ви говорите, 2D або 3D (а може бути в режимі реального часу чи покрокової). Частково це жарт Монти-Питона затьмарила першу частину. Вупи. :) І я думаю, що конкретизувати тип гри є корисним - якщо немає єдиної функціональної мови, яка ідеально підходить для всього , то різні мови можуть бути кращими для різних речей.
Циклоп

Я не вірю, що 2D або 3D впливає на вибір мови, за винятком різноманітності двигунів / бібліотек, доступних для мови. Мене особисто цікавлять і 2D, і 3D, тому я не думав про те чи інше, коли писав це питання. Але в цілому 2D та 3D ігри мають багато загальних систем та структур даних (наприклад, аудіо, вхід, AI, структура програми, цикл ігор), і є багато 3D-ігор, які можна перенести на 2D або навпаки. І так, я не бачив Monty Python, тому я його зовсім не зрозумів. :)
Ricket

1
Я не думаю, що однозначної відповіді щодо найкращої мови немає.
Вей Ху

Відповіді:


12

F # є частиною сім'ї Microsofts .net має доступ до XNA, що є фантастичною базою для створення ігор. Трохи гугл з'являється підручники, відео та статті. Великі документи XNA також повинні допомогти.

Був певний рух в іграх і для Haskell, дивіться тут . Можливо, ви будете використовувати прив'язки openGL.

Оскільки Scala грає на землі Java, вона інтегрується з усіма доступними двигунами / прив'язками Java, дивіться цю публікацію SO .

Я думаю, що це зводиться до переваг, хоча я грав лише з Haskell, я думаю, що кожна функціональна мова має власні ідіосинкразії. Можливо, варто згорнути невелику тестову гру в кожній і побачити, яка з них вам краще.

Як я вже говорив, у мене є лише мінімальний досвід роботи Haskell, тому я не можу коментувати найкраще, але ці ресурси повинні сподіватися на вас.


2
Між проблемами з JVM і незрілістю реалізації компілятора, я вважав, що продуктивність Scala неприйнятна при використанні функціонального стилю, хоча сама мова її добре підтримує. Це закінчується так само швидко, як, скажімо, Python або Ruby, а не F # або OCaml. (Швидкість Scala є конкурентоспроможною для більше OO / процедурних стилів.)

Насправді у мене є проект F # під керуванням XNA (тобто порожнє вікно XNA з волошками синього кольору, тільки код був F #, а не C #.
RCIX

8

Я б сказав Лісп.

Він був використаний в іграх як сценарій мови, принаймні, у Naughty Dog (або це я думаю), і це дуже зріла мова.

Перевага Lisp полягає в десеріалізації, яка є основною частиною того, що ми називаємо управління активами. Десеріалізація lisp тривіальна, код і дані - одне ціле. Це полегшує формат файлу для активів та поведінки. Це не так, як ви один у json / xml / yaml / bin та один файл F # для AI. Ви можете зберегти все як s-вирази, що значно спростить конвеєр активів.


Я б рекомендував проти цього. Мови скриптування не тільки для розробника, який він може використовувати; модери захочуть модифікувати гру, і нічого, що відлякує їх швидше, ніж (() ()))) () ((()). Крім того, навіть якщо це стосується функціональних мов, Lisp є езотеричним.
RCIX

7
Якщо відлякування моддерів викликає занепокоєння, перехід на функціональну мову, мабуть, не є правильним кроком.
Пол Вікс

3
@RCIX & @Joe - Активні сили некротів. У всякому разі, схема буде використовуватися в якості мови навчання. SICP - це щось на зразок половини ступеня КС в одній книзі, і його використовує купа шкіл (включаючи MIT до недавнього часу), а HTDP - менш жорстке введення.
Джессі Мілікан

1
@RCIX & Joe справді. Lisp & схема - це вступні мови в багатьох університетах.
oberhamsi

1
Lisp - це не те, що ти хочеш використовувати. У Naughty Dog був один, єдиний програміст Lisp, і коли він вийшов, вони перевели всі свої двигуни на C ++. Не маю уявлення, чому застарілий двигун однієї компанії постійно витягується як яскравий приклад =)
Патрік Хьюз

8

Набравшись практичного досвіду з цим, я би проголосував за Clojure - вже написав одну маленьку гру в ній, і планую робити більше.

Причини:

  • Продуктивність - Clojure - це динамічна мова. Він має чудові функції для інтерактивної розробки в стилі REPL, наприклад, ви можете використовувати REPL для запиту або зміни стану в запущеному екземплярі ігрової програми. Код у Clojure також часто смішно стислий. Я б здогадався, що я в 3-5 разів продуктивніший у Clojure, ніж у Java або C #.
  • Неясне - хоча я ціную красу і витонченість таких функціональних мов, як Haskell, ігрове програмування - це безладний шлях, де перемагає прагматизм. Я хочу мати можливість побічних ефектів у своїх функціях, коли вони мені потрібні, і Clojure дозволяє це. Сказавши це, ідіоматичний стиль Clojure повинен бути чисто функціональним більшу частину часу .
  • Метапрограмування - Ліспська спадщина Clojure як гомонічна мова робить його чудовим для метапрограмування / генерації коду. Легко "розширити мову", щоб створити власні DSL або усунути біолітер. Ви можете легко використовувати Clojure як свою власну мову сценаріїв ігор, а динамічний збір коду означає, що ваші сценарії працюватимуть так само швидко, як і ваш основний ігровий механізм.
  • Доступ до бібліотек Java . Ви можете використовувати всі звукові / графічні / AI / мережеві бібліотеки від Java, що є величезною перевагою порівняно з більшістю інших функціональних мов (де вам доведеться писати це з нуля або розробити безліч хитромудрого коду). Це може бути рятівником життя.
  • Крос-платформа - це безкоштовно від запуску на JVM, але це приємний бонус.
  • Продуктивність - для динамічної функціональної мови Clojure працює настільки ж швидко, як ви можете. Він завжди складений JIT, ніколи не інтерпретується. за допомогою інтелектуальної оптимізації ви можете зіставити швидкість чистого низькорівневого коду Java у Clojure. Наприклад, ви можете використовувати примітивні масиви Java або надавати підказки типу, щоб переконатися, що компілятор виробляє статично набрані функціональні виклики в критичному для продуктивності коді.
  • Паралельність - Clojure має чудову модель управління одночасним станом, підтримувану вражаючою системою операційної пам'яті програм. Варто переглянути це відео, щоб дізнатися, як це працює.

Єдиний раз, коли я б не вважав Clojure, це було б, якби я писав найсучаснішу графічно інтенсивну гру, де потрібна найсучасніша продуктивність (де я все ще думаю, що тобі потрібен C / C ++).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.