【问题标题】:Organizing many texts by swapping instances通过交换实例来组织许多文本
【发布时间】:2014-10-20 20:21:08
【问题描述】:

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

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

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

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

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

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

谢谢!

【问题讨论】:

    标签: java json text adventure


    【解决方案1】:

    您的问题非常广泛,很难给出明确的答案。以下是一些想法 - 希望对您有所帮助。

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

    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它变成了灰烬。

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

    【讨论】:

    • 非常感谢您的回复! Inform7好像是自己的开发环境吧?我不能使用它,因为我想开发一个 Android 应用程序,所以我没有那么灵活。我认为对我来说有趣的是模板处理。我可以通过更复杂的模板处理来实现以下内容吗?我需要能够根据不同变量的值填写不同的文本。我正在寻找一些概念来做到这一点。我在我的主要帖子中为此写了一个示例。我希望我的担忧现在更清楚了。
    • Inform 是一门独立的语言,我建议不要将其作为制作 Android 应用的开发工具,而是作为制作文字冒险游戏的一些方法的参考。
    • @Programmer879,我在答案中添加了一些关于模板的建议
    • 再次感谢您。 :) 如果我对某个项目有很长的描述,我会怎么做,例如有 7 个句子的文本。并且根据变量的值,一句话会发生变化。变量的值仅在运行时才知道。我想在 xml 等中定义这句话的替代版本。
    • 你可以用同样的方法——用整个句子替换占位符。
    猜你喜欢
    • 1970-01-01
    • 2017-08-12
    • 1970-01-01
    • 2016-01-13
    • 1970-01-01
    • 2018-07-15
    • 1970-01-01
    • 1970-01-01
    • 2011-09-15
    相关资源
    最近更新 更多