我用 C(是的,C)写游戏(2016)

发布: (2026年2月8日 GMT+8 01:45)
6 分钟阅读

Source: Hacker News

为什么我用 C(是的,C)写游戏

我是一只不寻常的野兽。最近我独立制作的所有游戏都使用 vanilla C 编写。没有人这么做,所以我觉得解释一下我的原因可能会很有趣。

枯燥的编程语言观点即将到来,已警告

我对语言的需求

有一些不可协商的要求。

  • 可靠性 – 我不能把时间花在处理我自己没有造成的 bug 上。
  • 持久性 – 我的许多游戏是为 Flash 编写的,而现在 Flash 正在消亡。我不想把时间花在把旧游戏移植到新平台上;我想制作新游戏。我需要一个我有信心能够长期存在的平台。
  • 可移植性 – 我想避免绑定到特定的操作系统,理想情况下 我希望能够有开发主机游戏的选项。因此,编程语言的可移植性以及它拥有良好的可移植库支持非常重要。

我对语言的需求

最重要的(但非必须)条件是 简洁性。我发现查找语言特性和奇怪的“巧妙”API非常耗费精力。理想的语言应该是我能记住并且不需要再查阅的。

  • 严格类型 & 静态分析 – 更少的 bug,强大的警告信息,以及帮助快速发现问题的工具。

  • 优秀的调试器 & 动态分析 – 让排错不再是创意的消耗。

  • 性能 – 我并不追求高保真真实感,但更多的循环可以拓宽你能做的事物范围,尤其在现代强大的计算机上。

  • 快速编译 – 等待 10 秒以上会打断我的思路;我需要一个能跟上我思考速度的编译器。

  • 数据中心化的方式 – 我不是 OOP 的拥护者。我更倾向于把数据当作数据来处理,编写适合情境的代码,而不是把所有东西都强行塞进类和对象。

  • C++ – 仍然是游戏中最常用的语言,这并非没有理由。我几乎所有的合同工作都用它,但我非常不喜欢它。它满足我的需求,却严重不能满足我的欲求:它极其复杂,容易产生隐蔽的 bug,且相较于 C 编译速度更慢。

  • C# 和 Java – 冗长且复杂的怪兽,把程序员硬塞进我反感的强 OOP 风格。它们以一种并不能真正防止的方式隐藏复杂性。

  • Go – 作为 C 的现代化实现很有吸引力,但全停顿的垃圾回收对游戏来说是个大痛点,库支持不足,我也担心它的长期价值。

  • Web 开发 – 环境变化极快,尤其在 Flash 退出后更是如此。我非常不喜欢 JavaScript;它太松散,以至于我惊讶人们还能用它写大型软件,我也没有兴趣去尝试。

  • Haxe – 相比大多数替代方案更有前景,拥有一些不错的库支持,但我担心它相对年轻且寿命未知。我只浅尝辄止。

  • 自己写语言 – 我欣赏这个想法,有时也会玩玩,但抛弃现有库支持并承担未来兼容性的全部责任感觉负担太大。它也非常困难,我宁愿做游戏而不是编程语言。

为什么 C 仍然是我的最佳选择

  • C 很危险,但它可靠——像一把非常锋利的刀,既能切蔬菜也能割到手指,却又足够简单,只要小心学习就能使用。
  • 它很快,在编译速度方面我想不出更快的了。
  • 它几乎可以运行在任何平台上,通常只需要相对容易的工作。很难想象有一天会出现例外。
  • 库和工具链的支持强大且持续更新。

我带着些许悲伤地说,但它仍然是我的语言。

我绝对 不是 在说“嘿,你也应该使用 C”。我的偏好相当具体且不寻常。我已经写了比大多数人更多的 原生 C 代码,这当然也是我舒适感的一部分。

所以,就这样 :-)

0 浏览
Back to Blog

相关文章

阅读更多 »

我用 C 写游戏(是的,C)

为什么我用 C(是的,C)写游戏?我是一只不寻常的怪物。最近我所有的 solo‑project 游戏都是用 vanilla C 编写的。没有人这么做,所以我……

Python–TypeScript 合约

《The Python–TypeScript Contract》封面图片 https://media2.dev.to/dynamic/image/width=1000,height=420,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to...

关于生成 C 的思考

静态内联函数实现数据抽象。当我学习 C 时,正值 GStreamer 的早期阶段 https://gstreamer.freedesktop.org/,哦,保佑它的心——它仍然……