我正在使用C#开发一个“Zork”风格的文字冒险游戏,它将有相当多的不同区域和描述以及环境修饰符。除非数据库确实是最佳方式,否则我不想使用数据库。
我需要关于存储/加载这些数据的最佳方法的建议。
它将包括:
- 区域描述 - 环境修饰符(窗户打开/破损,门关闭) - 默认情况下存在的物品
我需要关于存储/加载这些数据的最佳方法的建议。
它将包括:
- 区域描述 - 环境修饰符(窗户打开/破损,门关闭) - 默认情况下存在的物品
我会建议你放弃使用C#,改用Inform7来编写程序。Inform7是我曾经见过的最令人惊叹的编程语言,而且它专门设计用于解决您的问题。
关于Inform7最棒的事情在于,你可以使用类似文本冒险游戏的语言来编写自己的文本冒险游戏。例如,这是一个示例冒险游戏源代码的片段:
The iron-barred gate is a door.
"An iron-barred gate leads [gate direction]."
It is north of the Drawbridge and south of the Entrance Hall.
It is closed and openable.
Before entering the castle, try entering the gate instead.
Before going inside in the Drawbridge, try going north instead.
Understand "door" as the gate.
这将向游戏中添加一个对象——门,这个门被称为“铁栅栏大门”。门被理解为连接两个房间,在这种情况下是吊桥和入口大厅。如果玩家尝试“进入吊桥”,那么游戏逻辑会知道这与“向北走”相同,然后门的逻辑将确定门是否关闭等等。这使得编写文本冒险游戏变得非常容易。
您有特别的原因想要使用C#而不是像Inform7这样的领域特定语言吗?如果您的目标是学习如何编写C#代码或构建解析器等,那么请自行进行。如果您的目标是编写文本冒险游戏,那么我建议使用专为此设计的语言。
我知道你不希望使用数据库,但是你看过SQL Server Compact Edition了吗?它可能正好可以满足你的需求。
将您的冒险脚本化为一个大文本文件,听起来怎么样?然后让您的应用程序解析此文件,在类中构建冒险并从那里运行?
这意味着您可以使用简单的文本编辑器编辑冒险。我想象当多个决策可以从单个源中进行时,可能会变得棘手难以可视化链接。但是,在没有一些专门的前端的情况下,这在数据库中也很棘手。
更新:
或者您考虑过XML吗?
<area id="DarkRoom1">
<description>Dark Room</description>
<item>Bucket</item>
<item>Spade</item>
</area>
然后使用它来填充内存中的类。
你可以将数据存储在文件系统中(zip文件或文件夹)。
每个选项都可以存储为一个文件夹,而所有描述、修饰符和其他数据都可以存储为文本文件(XML?)。当用户做出决定时,您可以进入相应的文件夹并按照情节进行操作。
例如:
你想要:
如果用户选择打开门,您就会进入门文件夹,并从该文件夹中的数据文件中读取数据。
优点:
缺点: