通过交换实例来组织许多文本

时间:2014-10-20 20:21:09

标签: java json text adventure

我打算开发一款类似冒险的游戏。 为此,我将有很多具有不同文本的类实例(基本字符串)。

我不想对这么多文本进行硬编码,所以我正在寻找一种更好的方法。

此视频中的人(https://www.youtube.com/watch?v=8CDePunJlck)正在使用json手动为每个类实例编写文本文件,并自动将其解析为实例。这是正确的方向。

我正在寻找有关它的更多信息,那么如何调用此过程? 它在视频中说,这也适用于数据库?

有没有办法用这样的东西设计一些更复杂的东西?

E.g。我有这样的情况,我想输出不同的文本,例如,本地或全局变量超过阈值等。我可以在没有硬编码的情况下执行此操作并为每个建议的实例编写自己的类吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

你的问题非常广泛,很难给出明确的答案。以下是一些想法 - 希望您觉得它有用。

你是对的,你不想硬编码字符串。替代方法是将字符串存储为外部资源,并在开始时将它们加载到游戏中。资源的组织方式有很多种;选择取决于您的编程平台,游戏架构等。例如,您可以使用简单的名称 - 值方法:

AREA_1_DESCRIPTION: You stand next o a small white house. 
ITEM_22_DESTRUCTION: The nasty snake disappears with a loud "Bang!"

使用JSON或XML将为您提供更多结构化存储,这可以提供很大帮助,因为您可以组织文本,以便在代码中更容易使用它们:

<item id="375" name="Great Sword">
    <short_description>A Great Sword of Darkness</short_description>
    <long_description>The sword has almost black blade with some unknown runes engraved</long_description>
</item>

如果您的编程系统可以访问数据库,那么您可以执行类似的操作并在表格中存储文本;但是,这可能会使以后编辑文本变得更加困难。如果你想这样做,我仍然建议使用XML或JSON来存储文本,并在第一次运行时让游戏在DB中导入文本。

您可能还需要某种简单的模板处理引擎才能重用某些字符串。您可以从创建Java String.format()方法的版本开始。您的方法可能会将字符串目录中字符串的ID作为第一个参数,并使用一些简单的占位符作为参数。假设您的目录中有以下条目:

FIRE_GEM_ACTION: "The Fire Gem touches %% and in %% seconds it turns into ashes."

然后你可以编写一个类似这样的方法:

int delaySeconds = 5;
String message = MyTemplateProcessor.process(FIRE_GEM_ACTION, "old map", delaySeconds);

该函数将从目录中获取字符串,搜索占位符的出现次数(%%)并按顺序将它们替换为参数,因此在消息中您将获得:Fire Gem触及旧地图并在5秒内它变成了灰烬。

一般情况下,我建议您查看一些专门用于创建冒险游戏的系统。 Inform 7将是一个很好的起点:http://inform7.com/learn/