【问题标题】:Good resources on using functional programming in game development? [closed]在游戏开发中使用函数式编程的好资源? [关闭]
【发布时间】:2009-07-30 20:20:27
【问题描述】:

我对这种函数式编程范式很陌生,但到目前为止我喜欢它。由于我从事游戏开发,因此我想尝试以纯函数式编程风格编写一些游戏。我不介意这种语言——无论是 Erlang、Haskell、Lisp 还是 Ruby(我发现它支持函数式编程特征)。

嗯,很明显,学习函数式编程(事实上,任何东西)最好的建议就是学习函数式语言并在其中进行大量编程。但我正在寻找一些关于在游戏和游戏引擎(2D 或 3D)中使用函数式编程的资源。

那么,您是否知道任何函数式编程文章/书籍/博客/无论在实际游戏中使用它,或使用函数式编程语言设计简单的游戏引擎,以及在此函数式环境中游戏与游戏引擎之间的所有交互?

请不要建议诸如“刚开始用函数式编程简单的东西,然后它会逐渐出现”之类的建议。正如我之前所说,这很明显,但我在这里要问的是有关该主题的一些资源,如果有的话。谢谢!

【问题讨论】:

  • Ocaml 可能是一种有趣的函数式语言替代方案。

标签: haskell functional-programming erlang lisp


【解决方案1】:

好吧,你可能比研究其中一些 haskell games 的代码更糟糕。

其中一些使用 FRP(函数式反应式编程),有些人正在将其作为一种纯粹的高级技术用于游戏和其他事物。但大多数都是典型的高效代码和纯函数代码的混合体。

有相关内容的博主包括James Hague

请注意第一个链接中的 FunGEn - 虽然没有积极维护,但它是一个带有工作示例的 2D 游戏引擎。

还有一种简洁的语言,它是game library and nice screenshots

【讨论】:

【解决方案2】:

好吧,我主要是一名 Haskell 程序员,所以我只能建议尝试使用 Haskell 库,例如 Gtk2hs。它主要用于 2D 应用程序和用户界面,但它可以帮助您入门 :) 一个更简单的库是 HGL,但它有点错误和过时。如果您想尝试更混乱(但更酷!)的东西,那么请使用 Haskell 的 OpenGL 库,它可以在 here 找到。我从未尝试过使用 Haskell 和 OpenGL,但如果您查看 Simon Michael 提交的答案,Hackage 的游戏部分中有使用 OpenGL 的示例游戏。

很抱歉没有链接所有库,但我是新用户,不允许使用多个超链接。如果你用谷歌搜索它们,它们应该很容易找到。

【讨论】:

    【解决方案3】:

    如果您对游戏的网络方面感兴趣,Joel Reymont 已经写了关于他在在线Poker server 上编码的经历。我认为他至少做了三种不同的实现(Lisp、Erlang、Haskell)。不幸的是,他的资料散落在互联网上。以下是您可能会发现有用的两个指针:

    编辑:

    以下是上述文档中已更改的一些后续指针和链接。

    编辑二:

    Joel 显然已经卖掉了他的扑克代码,因此它不再以 open source 的形式提供。

    【讨论】:

    • 最后一个链接似乎把解析器搞糊涂了。希望我没有因为不参考网络档案而把事情搞砸了。
    • 也许你可以使用 tinyurl 或类似的东西 :)
    【解决方案4】:

    有点过时,但this 是关于如何将 F# 与 XNA 游戏开发框架一起使用的系列文章中的第一篇。您可能还会发现博客 F# for Game Development 有一些有用的材料。

    【讨论】:

      【解决方案5】:

      Frag 是一款由 Mun Hon Cheong 用 Haskell 编写的 3D 第一人称射击游戏。它是根据 GPL 许可的。 Frag 的设计和实现在 Mun 的本科论文“函数式编程和 3D 游戏”中有所描述。

      【讨论】:

        【解决方案6】:

        试试这个 Casting SPELs

        【讨论】:

          【解决方案7】:

          Wings3D 是用于绘制线框形状的 Erlang 包。我认为它用于游戏,但那不是我的包......

          【讨论】:

          • wings3d中使用了github.com/dgud/esdl/tree/master库,但是作者推荐使用wxerlang来获取opengl。
          【解决方案8】:

          好吧,我不确定这有多大帮助,您可能已经听说过,但似乎是一个明显的开始:这是 Jak 和 Daxter 的 article

          【讨论】:

          • 虽然 GOAL 是一个 Lisp,但我不认为它的功能性很强。所有的代码示例看起来都很必要,我记得在某个地方读到过它们是如何手动管理内存的,因为 GOAL 垃圾收集器太慢了。 (不过,文章确实总结了 Lisp 的许多其他优点——宏、运行时评估等)
          • 另一个使用 Lisp 的游戏是“滥用”,现在是公共领域。不过,再一次,可能不是 Lisp 最实用的用法。
          • Lisp 并不是那种纯粹的“函数式编程语言”。通常它是多范式并支持包含许多其他范式(逻辑、规则、关系、约束、代理等)。所以任何真正的 Lisp 程序都会很乐意混合命令式、函数式、面向对象和其他编程风格。
          • 我确实读过这篇文章,很久以前,以至于我忘记了它的全部内容:)
          【解决方案9】:

          正如 Nathan Sanders 上面所说的(来自我自己在“haskell 游戏 gc”上的谷歌搜索),有一段时间 Haskell 有(?)一些非常严重的 GC 问题...this old article(6 岁,我知道) ,另见this question。既然Frag 已经存在,我猜他们肯定在 GHC 的更高版本中至少修复了一些问题。

          【讨论】:

            猜你喜欢
            • 2014-05-27
            • 1970-01-01
            • 2010-11-04
            • 2013-02-28
            • 2023-03-31
            • 1970-01-01
            • 2010-09-06
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多