• 文章
  • 命令行是糟糕的游戏开发介质
发布者:
2010年9月14日 (最后更新: 2010年9月14日)

命令行是糟糕的游戏开发介质

评分: 4.1/5 (384 票)
*****
在这些论坛上,我经常看到人们询问如何在命令行中制作游戏,或者询问如何在命令行中完成与游戏制作相关的特定任务。例如清屏、移动光标、更改字体颜色、让程序“在后台”运行而不等待用户输入等等。

底线是,命令行并非为这类事物设计,您不应该将它用于这些类型的程序。

您可以让它工作,但最终结果在很多方面都会很糟糕

- 您将不得不编写 hacky 代码,将控制台 I/O 从其正常功能扭曲成您想要的功能。
- 您必须妥协您的目标,以适应命令行的局限性。
- 您的程序将无法像其他方式那样打磨。
- 它将比替代方案困难得多。


我写这篇文章是为了说服人们在开始制作简单游戏时远离命令行

在本文中,我将使用 SFML 作为示例(获取地址:http://www.sfml-dev.org)。我喜欢 SFML,因为它对我来说特别对初学者友好,而且速度非常快,文档齐全,跨平台,拥有活跃的用户群,并且正在积极开发中。然而,它并非您的唯一选择。还有其他库可用,例如 Allegro 或 SDL。

如果您对游戏开发感兴趣,我建议您获取 SFML 并开始尝试。您可能需要一些折腾来安装和设置它,但这是一个一次性的过程。一旦您掌握了它,您就不必再重复了,并且能够轻松地制作未来的游戏。这是一个小小的代价。


而且因为对我来说更有趣…我将以问答的形式写这篇文章!

问)但是图形很复杂。对于初学者来说,命令行难道不更简单吗?
第一个说法是谬论。不,您会惊讶于简单的图形库有多么容易。有了正确的库,绘制图像就像这样简单

1
2
3
4
5
6
7
8
9
// load the image
sf::Image imagefile;
imagefile.LoadFromFile("myimage.png");

// put the image in a "sprite" (basically a rectangle of something we want drawn)
sf::Sprite mysprite(imagefile);

// draw that sprite to the screen
mywindow.Draw(mysprite);


图形的难度被严重高估了。


问)但是,先从命令行开始,然后将所学的知识应用到图形上,难道不是更好吗?
不是。

命令行开发和游戏开发是完全不同的世界,拥有完全不同的风格。

通过先进行命令行开发,您唯一能学到的是语言基础知识(什么是变量、什么是类、C++ 的规则等)。但这些基础知识任何目标介质都可以轻松学习。命令行只是人们最常接触到的,因为它也是标准库唯一支持的。

您从命令行学到的其他东西(如何构建程序流程、如何轮询和获取用户输入、如何向用户显示内容)在游戏领域几乎没有应用。游戏必须以完全不同的方式进行。您最终将不得不“忘记”命令行教给您的许多东西,并重新学习一种全新的做事方式。所以您最好不要浪费这个步骤。

问)但我不想使用图形。我只想使用 ASCII 符号和一个简单的网格风格地图(用于制作 roguelike 或类似的东西)。命令行会不会更好?
可能不会。如果您使用文本来表示图形可以表示的内容,那么使用图形可能更好(而且同样容易)。

如果您真的不想使用图形…例如,如果您喜欢 ASCII 风格…您可以使用图形库,然后只绘制 ASCII 符号作为图形,这样看起来就像您在打印文本,但实际上并不是。

这听起来可能很愚蠢,但它提供了许多好处

- 游戏库在获取用户输入方面有更合适的方法。
- 游戏库还有您可能想要的其他功能,例如背景音乐或音效。
- 游戏库没有命令行相同的限制,例如可以显示的颜色,以及游戏运行的分辨率。

问)但我只想做一个简单的基于文本的冒险游戏,您输入“向东移动”之类的指令,它会打印描述。命令行会不会更好?
嗯,您可能不应该制作那种游戏(参见下一个问题)。但是对于那种游戏…是的。命令行可能会更简单。只要

- 您确定您不想要任何伴随图形。请记住,您可能稍后会改变主意,想要在描述文本上方显示当前位置的简单图片。
- 您不想要任何背景音乐 (BGM)
- 游戏将等待用户输入(它不会“在后台运行”)

问)你为什么说我不应该制作基于文本的冒险游戏?它们有什么问题?
它们不容易制作。事实上,它们是你可能制作的最难的游戏之一。

解析文本输入并理解它的工作本身就很难。再加上基于文本的冒险游戏中涉及的繁重事件和复杂性,您就得到了一个初学者可能无法处理的项目。

信不信由你,简单的实时动作游戏,带动画和图形(例如简单的 Galaga 或 Space Invaders 克隆),制作起来要容易得多

初学者想尝试基于文本的游戏,因为他们认为它会更容易,因为他们认为图形很困难。但他们错了!


问)但我试过了,我不明白动画,而且我知道如何做命令行。坚持我所知道的难道不是更好吗?
那是因为您学习的是命令行编程而不是游戏编程。请记住,它们是不同的世界,在一个领域有经验并不一定能为您准备好另一个领域。

如果您已经固执己见,并且真的不想学习新东西,那就算了。做任何让您觉得最有趣的事情。

但是,如果您发现自己问一些命令行不打算做的事情……请停止。与其学习错误的方法,为什么不学习正确的方法呢?我是说,既然您总是在学习新东西……




总之,这就是我今天要说的。希望我能在出现类似情况的帖子中链接到此文。