如何用 C 语言编写文字冒险游戏
目录
1. 介绍 2. 主循环 3. 地点 4. 对象 5. 背包 6. 通道 7. 距离 8. 东西南北 9. 代码生成 10. 更多属性 11. 条件 12. 打开和关闭 13. 解析器 14. 多个名词 15. 光明与黑暗 16. 存档 17. 自动化测试 18. 缩写 19. 对话 20. 战斗 21. 多人游戏 22. 客户端-服务器 23. 数据库 24. 语音 25. JavaScript
如何用 C 语言编写文字冒险游戏
作者:Ruud Helderman r.helderman@hccnet.nl 基于 MIT License 许可。
1. 介绍
这并非 C 语言教程,网上有很多。 读者应具备一些基本的编程知识,最好是 C 编程语言的知识。 也许你刚刚读完某个教程,并且希望通过学习其他人的源代码来了解更多关于编程的知识。 还是说,你真的对从头开始编写文字冒险游戏的古老艺术感兴趣? 也许你只是对过去的美好时光感到怀旧,那时生活很简单,软件也很简单。 无论哪种情况,你都来对了地方。 在 20 世纪 80 年代,文字冒险 是一种受人尊敬的电脑游戏类型。 但时代变了:在 21 世纪,与具有 3D 引擎的现代 MMORPG 相比,它们显得苍白无力。 就像书籍在电影兴起后幸存下来一样,基于文本的游戏迅速输掉了与图形游戏的战斗。 '交互式小说' 由一个活跃的社区维持着,但它的商业价值早已消失。 但这也有光明的一面:现在可以免费获得专业质量的创作工具。 这也是如果你打算编写自己的冒险游戏,我可以给你的最大建议:使用许多专门的 开发系统 之一。
为什么选择 C
但是,为什么要写这个教程呢? 为什么使用 通用编程语言 编写冒险游戏? 因为这样做可能既有趣,又具有挑战性和教育意义。C 编程语言可能不是编写文字冒险最明显的选择。 它与基于 LISP 的语言(如 MDL 和 ZIL)截然不同。 有些人会声称 C 甚至不是一种通用语言。 我不同意。 也许它 不应该 成为一种通用语言,但它确实成为了。 是的,在可维护性和可靠性方面,有一些通用编程语言比 C 更好。 这里提出的想法同样适用于这些语言。 如果你更喜欢 Java、C# 或 Python 而不是 C,那么翻译我的代码示例应该不会太难。 我选择 C 是出于个人原因。 我很了解这门语言,而且非常喜欢它。 但更重要的是,C 更接近底层。 我一直很钦佩像 Scott Adams 这样的先驱者,他们设法将冒险游戏类型带到早期的 家用电脑 上,尽管存在极端的内存限制。 这些尝试中最好的都是用 汇编语言 编写的,所以我很好奇在一种最初被设计为汇编语言的可移植替代方案的语言中,我能走多远。 这可能感觉像作弊:大多数 8 位 计算机没有(优化的)C 编译器。 但是,假设我们不会依赖高级 库,即使你必须手动执行此操作,C 也能很好地映射到汇编。
增量开发
我将尽量使这个故事对广泛的读者来说都是可读的,而不会有太多的离题阐述。 对于可能需要进一步解释的术语,请点击超链接到相关的 Wikipedia 文章。 在本教程中,我们将开发一个功能齐全的文字冒险游戏。 这将以 增量 方式完成。 每章都会向我们的程序添加一些代码。 每次增量,无论多么小,都会为游戏增加一些价值。 并且每次,结果都是一个可以运行的程序,准备好用适当的 C 编译器 构建。 我们从只有 9 行代码开始; 它只不过是一个简单的 “Hello World” 程序。 如果你甚至无法使这个简单的例子工作,你应该先寻求一些帮助,然后再准备好进入下一章。 示例输出
Welcome to Little Cave Adventure. It is very dark in here. Bye! main.c
- #include <stdio.h>
- int main()
- {
- printf("Welcome to Little Cave Adventure.\n");
- printf("It is very dark in here.\n");
- printf("\nBye!\n");
- return 0;
- }
对于那些不太熟悉 C 的人的一些解释:
- 第 1 行:文字冒险不需要花哨的库; C 标准库 已经足够了,并且广泛可用。 但是,你可以随意用你喜欢的任何 用户界面 库替换它,例如 Glk。
- 第 3 行:函数 main 是典型 C 程序的起点。
- 第 5-7 行:将文本输出到屏幕; 转义序列
\n
表示 换行符。 - 第 8 行:函数 main 返回零 退出代码 以指示程序已成功完成。
虽然可能微不足道,但该程序确实演示了任何文字冒险 最 重要的方面:描述性文本。 一个好的故事是构成一个好的冒险游戏的因素之一。 我故意在我的代码示例中保持简短。 我将专注于游戏的编程方面,其余的留给你的想象力。 ⭳ 下载源代码 🌀 在 Repl.it 上运行
下一章:2. 主循环