0

我正计划开发一个类似冒险的游戏。为此,我将有很多具有不同文本(基本上是字符串)的类实例。

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

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

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

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

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

谢谢!

4

1 回答 1

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);

该函数将从目录中获取字符串,搜索占位符(%%)的出现并用参数顺序替换它们,因此在消息中您将得到: The Fire Gem touches old map and in 5 seconds it变成骨灰。

总的来说,我建议您查看一些专门为创建冒险游戏而设计的系统。Inform 7 将是一个很好的起点:http: //inform7.com/learn/

于 2014-10-28T14:39:14.847 回答