哪种功能语言最适合用来创建游戏?[关闭]


19

我对函数式编程语言已经有一段时间了,但是对于实际使用它们感到犹豫。但是我认为现在是时候至少开始扫视那个方向,以确保我为任何事情做好了准备。

我看过有关Haskell,F#,Scala等的话题。但是我不知道这些语言及其社区之间的区别,我也不在乎。除了游戏开发方面。

那么,从游戏开发的角度来看,哪种功能性编程语言最适合游戏编程?例如,是否有针对功能语言的功能性游戏开发库/引擎/框架或图形引擎?是否有一种语言可以更好地处理游戏开发中常用的某些数据结构?

底线:哪种函数式编程语言最适合函数式游戏编程,为什么?

我相信/希望这个问题将宣告清楚的最佳语言,因此尽管有主观倾向,但我并未将其标记为CW。


2
“您是指2D游戏还是3D游戏?” “嗯?我不知道-aieeee
独眼巨人

@Cyclops呃,什么?我不明白...
里奇(Ricket)2010年

@Ricket,部分原因是为了澄清的请求类型你所谈论的,2D或3D(也许实时或回合制)的比赛。一部分是蒙蒂-Python的笑话,掩盖了第一部分。真是的 :)而且我确实认为指定游戏的类型很有用-除非只有一种适用于所有情况的功能语言,否则不同的语言在不同的事情上可能会更好。
独眼巨人

我不相信2D或3D会影响语言的选择,除非会为语言提供多种引擎/库。我个人对2D和3D都感兴趣,因此在编写此问题时我没有想到一个或另一个。但是总体而言,2D和3D游戏共享许多常见的系统和数据结构(例如,音频,输入,AI,程序结构,游戏循环),并且有很多3D游戏可以移植到2D或反之。是的,我还没有看过Monty Python,所以这就是为什么我根本不了解它的原因。:)
Ricket

1
我认为最好的语言没有确定的答案。
胡虎2010年

Answers:


12

作为Microsoft .net家族的一部分,F#可以访问XNA,这是构建游戏的绝佳基础。进行一些谷歌搜索会发现一些教程,视频和文章。出色的XNA文档也应提供帮助。

Haskell的游戏也有所发展,请参见此处。您可能会使用openGL绑定。

由于Scala在Java领域发挥作用,因此它与所有可用的Java引擎/绑定集成在一起,请参阅此SO帖子。

我认为这取决于偏好,虽然我只玩过Haskell,但我想每种功能语言都有其自己的特质。可能值得在每个游戏中编写一个小型测试游戏,然后看看哪个对您感觉更好。

就像我说过的,我只有很少的Haskell经验,所以我无法评论最好的,但是这些资源应该可以帮助您入门。


2
在JVM问题和编译器实现的不成熟之间,我发现使用函数样式时Scala的性能是不可接受的,即使该语言本身很好地支持了它。最终它的运行速度与Python或Ruby差不多,而不是F#或OCaml。(Scala的速度对于更多的OO /过程样式而言具有竞争力。)

我实际上得到了一个运行XNA的F#项目(这是一个空的XNA窗口,带有矢车菊蓝色,只有代码是F#而不是C#。)
RCIX 2010年

8

我会说Lisp。

至少在Naughty Dog中(或者我认为),它已在游戏中用作脚本语言,并且是一种非常成熟的语言。

Lisp的优势在于反序列化,这是我们所谓的资产管理的重要组成部分。反序列化Lisp很简单,代码和数据是一个。这使资产和行为的文件格式更容易。这不像您在json / xml / yaml / bin中使用一个,在AI中使用一个F#文件。您可以将所有内容另存为s表达式,这将大大简化资产管道。


TBH我建议不要这样做。脚本语言不仅仅供开发人员使用。MOD制作者希望国防部的比赛中,并没有什么,将他们吓跑比(()())))()((())另外,甚至远函数式语言去,Lisp是深奥的更快。
RCIX

7
如果吓坏改装者会让您感到不安,那么选择功能语言可能不是正确的选择。
保罗·威克斯

3
@RCIX和@Joe-Necro激活ACTIVATE。无论如何,Scheme 用作教学语言。SICP相当于一本书中一半的CS学位,并且被许多学校(包括MIT直到最近使用)所采用,而HTDP的介绍则较为宽松。
杰西·米利坎

1
@RCIX和乔确实。Lisp和Scheme是许多大学入门语言。
oberhamsi 2011年

1
Lisp不是您要使用的东西。Naughty Dog只有一个Lisp程序员,当他辞职时,他们将所有引擎都转换为C ++。不知道为什么总是将一个公司的过时引擎拖出来作为一个光辉的例子=)
Patrick Hughes

8

在获得一些实践经验之后,我将投票支持Clojure-已经在其中编写了一个小游戏,并计划做更多。

原因:

  • 生产力 -Clojure是一种动态语言。它具有交互式REPL风格开发的强大功能,例如,您可以使用REPL来查询或更改正在运行的游戏应用程序实例内部的状态。Clojure中的代码通常也非常荒谬。我猜我在Clojure中的生产率是Java或C#的3-5倍。
  • 不纯 -尽管我欣赏像Haskell这样的纯函数式语言的优美和优雅,但是游戏编程却是杂乱无章的追求,实用主义赢得了胜利。我希望能够在需要的时候在我的函数中添加副作用,而Clojure允许这样做。话虽如此,惯用的Clojure风格在大多数情况下纯粹是实用
  • 元编程 -Clojure的Lisp传统语言是一种谐音语言,非常适合元编程/代码生成。“扩展语言”以制作自己的DSL或消除biolerplate很容易。您可以轻松使用Clojure作为其自己的游戏脚本语言,而动态代码编译意味着您的脚本将与核心游戏引擎一样快地运行。
  • 访问Java库。您可以使用Java中的所有声音/图形/ AI /网络库,这与大多数其他功能性语言相比是一个巨大的优势(您必须从头开始编写这些代码或开发许多棘手的接口代码)。这可以挽救生命。
  • 跨平台 -这可以从JVM上免费运行,但这是一个不错的奖励。
  • 性能 -对于动态功能语言,Clojure的运行速度要尽可能快。它始终是JIT编译的,从未解释过。通过智能优化,您可以在Clojure中匹配纯净的低级Java代码的速度。例如,您可以使用Java基本数组或提供类型提示,以确保编译器在对性能有严格要求的代码中生成静态类型的函数调用。
  • 并发性 -Clojure具有出色的模型来管理并发状态,并具有令人印象深刻的软件事务存储系统的支持。值得观看此视频,以获取有关其工作原理的更多见解。

我唯一考虑Clojure的情况是,如果我正在编写最先进的图形密集型游戏,而该游戏需要最先进的性能(但我仍然认为需要C / C ++)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.