前几个月在考古 CL 的游戏引擎时,无意间发现了 Kandria 这款从引擎到逻辑均使用 Common Lisp 编写的游戏,前几天也是在 Reddit 上得知游戏正式发售的消息。需要说明的是,本人并不怎么玩游戏,也不怎么关注游戏新闻,但这位独立游戏开发者以及游戏体现的一些技术还是颇具独特之处的,因为开发这款游戏使用到的包括引擎、图形界面、音频处理在内的外围库都是作者一个人从零使用 CL 编写的,并且基本以 Zlib 协议开源,可以单独用于其他的项目,凭一己之力极大地丰富了 CL 的生态(虽然与其他语言相比还是少得可怜)。这里简单地列举一些这款游戏的技术亮点:
- 使用 CL 实现的 2D 游戏引擎 ,使用 CFFI 访问 GLFW 与 OpenGL 图形接口。
- 使用 CL 实现的 Immediate Mode GUI 框架 ,可使用多种图形 API 作为渲染后端。
- 使用 CL 实现的实时音频处理框架,底层基于作者自己用纯 C 实现并绑定到 CL 的混音器。
- 使用 CL 实现的跨平台库用于访问游戏控制器,使用 CFFI 访问不同操作系统下提供的接口。
- 使用 CL 实现的矩阵运算库,似乎带有 SIMD 加速。
- 游戏数据、配置文件等均使用 Lisp 作为数据载体,秉承了 Lisp 代码即数据的思想(对应于 Emacs 里的
lisp-data-mode
)。
基本游戏(引擎)开发涉及的外围模块,这位作者能用 CL 的都用 CL 实现了一遍,值得一提的是这位作者也是 CL 里众多实现间可移植库的作者,还编写了我个人十分喜欢的单元测试与应用部署的框架,并且自己维护了一套 Quicklisp 发行版 ,总是基本是一人提供一套基于 CL 的应用/游戏开发全家桶。游戏的官网与 Github 仓库放在这,感兴趣的朋友可以支持一下。