作者:Jonathan Whiting
原文:https://jonathanwhiting.com/writing/blog/games_in_c/
▍为什么我用C编写游戏
我是不走寻常路的人。我最近制作的所有个人项目游戏都是用'vanilla' C
语言编写的。因此,我可以解释为什么这样做可能很有趣。
▍我从语言中需要什么
有些事情是不能避而不谈的。首先,这款语言必须可靠,我不能花时间去处理那些不是我自己造成的错误。
我的许多游戏都是为Flash编写的,现在Flash已接近暮年,我不想花时间将旧游戏移植到新平台,我想制作新游戏,我需要一个可以相信一段时间的平台。
同样,我想避免将自己绑定到特定的操作系统,并且理想情况下,我希望可以选择开发控制台。因此,重要的是我的编程语言是可移植的,并且具有良好的可移植库支持。
▍我想要一种语言
在我想要的但不是必需的列表上,最重要的是简单性。我发现查找语言功能,以及古怪的“聪明”API令人厌烦。我可以记住一种理想的语言,然后再不必查找任何东西。
处理错误将会消耗许多创造其他代码的时间,我希望产生更少的错误,所以我想要严格的键入,强烈的警告消息和静态代码分析。我希望更容易发现错误,所以我想要好的调试器和动态分析。
我对高清并不感兴趣,但我仍然对性能有所关注。拥有更多可用周期可以拓宽的工作范围。探索现代功能强大的计算机带来的影响尤为有趣。
甚至比我更关心编译器的速度,我不是禅宗大师,等待10秒钟以上是浪费时间,是的,但更重要的是,这破坏了我的精力。我跳到Twitter,突然超过5分钟消失了。
我不是OOP转换者。我一生的大部分时间都用于处理类和对象,但是花费的时间越多,对您为什么要如此严格地结合代码和数据的理解就越少。我想将数据作为数据进行处理,并编写最适合特定情况的代码。
▍替代方案
C++仍然是编写游戏的最常用语言,并非没有道理。目前来说,我手头仍然拥有很多合同是要用C++编写的,但我非常不待见它。
C++满足了我的需求,但严重挫败了我的需求。这个语言极其复杂,尽管它真是个不错的工具,但还是很容易创建隐匿的错误。与C相比,它的编译速度也较慢。它是高性能的,并且提供了C所没有的功能。但是我不想要的功能,而且成本很高。
C#和Java也有类似的问题。它们是冗长而复杂的野兽,我正在寻找一种简洁,简单的生物。他们俩都为使程序员发展成为我反对的强烈的OOP风格做了很多工作。按照大多数高级语言,它们倾向于隐藏复杂性,而实际上并不能阻止它对您的困扰。
我非常喜欢Go。考虑到自发布以来多年以来所学到的内容,在很多方面都对C进行了重新审视。我想使用它,但是有很多障碍阻碍了我。窗口停止工作对于游戏来说是一个很大的痛苦,窗口停止工作是您真正负担不起的事情。游戏的库支持非常差,尽管您可以包装C库而没有很多麻烦,但是这样做会增加很多工作量。利基市场足以使我对长期的相关性感到担忧。
为网络制作东西会很不错,但是感觉就像一个快速发展的可怕环境。随着闪存的死亡,这尤其令人恐惧。我真的不喜欢javascript,它是如此宽松,以至于人们可以在其中编写大量软件。我对尝试没有兴趣。
Haxe比大多数替代品更有前途。如果我再次做网络工作,我将在这里潜水。有一些很好的库支持。我有点担心它的相对年轻,它会持续吗?我对此没有太多要说的,我只是涉足表面。
有人我说拧,我会写自己的语言,即我想使用的语言。我对此很佩服,有时我也想这样做。放弃所有现有的库支持并为将来的兼容性承担全部责任实在太大了。这也是非常困难的,当归结为现实时,我宁愿做游戏,也不愿编程语言。
▍为什么C仍然是我的最佳选择
C很危险,但是很可靠。一把非常锋利的刀既可以割伤手指,也可以割伤蔬菜,但如此简单,要学会谨慎使用它并不难。
它的速度很快,在编译时我想不出什么更快的方法。
它可以在几乎任何东西上运行。通常这比较容易。很难想象会出现这种情况。
-END-
领取专属 10元无门槛券
私享最新 技术干货