微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – Android,存储和检索文本

我正在为我的大学开发一个Android应用程序,让我给你一个快速的演示:

玩家可以阅读一个故事,然后他将有3个选择,他将选择一个,另一个故事将再次显示3个选项,所以它继续……(但每个选择都会导致完全不同故事)

你可以猜到,我有很多文本需要存储,分类和检索.第一页显示一个故事和3个选项,如果玩家选择并点击按钮,则会出现以下故事,但它也可能意味着结束(显然,如果我总是保留3条路径X 3路径X 3路径…它会变得复杂)

_______________我在想什么____________________________

所以我的第一个猜测是使用一个xml文件,一个包含每个故事,另一个包含各种选择.

在应用程序打开时,我将使用解析器来运行该文件并将每个字符串放在树结构中. (故事中有一棵树,我想的是另一棵树)

我想使用数字来构建它,例如,如果你当前在1并且你点击选择2然后你在前一个故事的末尾再添加2,它将变为12,然后如果你点击选择3 ,它变成123等……
我虽然对树更容易,但是,xml只给出一个标签名称,所以我想使用story1,story11,story12,story13等…

What the structure of my xml should look like (or my tree)

但是因为我想使用数字,所以已经很难在树中对它进行分类,我必须得到一个带有parser.parName()的字符串,然后我需要子字符串来获取最后的数字,并且只是为了检索节点应该采取一些资源.

在其他方面,我越是想到它,我就越想到复杂的想法,所以我需要一些聪明的人来告诉我去哪里. (我明显迷失在路上)

__________________________________ 我的问题 ____________________________

如果你觉得这个很聪明,这是我的问题

你会用什么来存储文字一个Xml文件?那之后你会用一棵树吗?你会怎么做,有效地将xml分类到树中?

我可以看到我的解释有点混乱,所以请告诉我他们是否是你不理解的东西. (或者如果是我破碎的英语)

谢谢回答 !

解决方法:

在仔细思考这个问题之后,我基本上想出了一个与Kenny Byun的答案类似的想法,但我想用一些实际的代码来充实它,以向你展示它是如何工作的.

首先,我会将每个故事存储在自己的JSON对象中.我不知道他们需要像Kenny建议的那样在单独的文件中,因为它们可以很容易地包含在单个文件中的JSON数组中的单独对象中.结构如下.

数组中的每个对象都是“故事”对象.这包含一个索引或某种id,以将其标识为一个独特的故事.然后它包含它的故事文本和3个“选择”对象的数组.选择对象是相似的,因为它们每个都包含一个id或索引,一些文本和一个“leads_to_story”值,它基本上标识了这个选择导致的故事.看起来像这样……

[
    {
        "story_index" : 0,
        "story_text" : "It was a dark and stormy night. Three doors stand before you. You must choose one.",
        "choices" : [
            {
                "choice_index" : 0,
                "choice_text" : "Door 1",
                "leads_to_story" : 1 
            },
            {
                "choice_index" : 1,
                "choice_text" : "Door 2",
                "leads_to_story" : 2
            },
            {
                "choice_index" : 2,
                "choice_text" : "Door 3",
                "leads_to_story" : 3
            }
        ]
    },
    {
        "story_index" : 1,
        "story_text" : "You choose door 1 and enter cautIoUsly. You find a bunny rabbit.",
        "choices" : [
            {
                "choice_index" : 0,
                "choice_text" : "Pet the bunny rabbit.",
                "leads_to_story" : 4 
            },
            {
                "choice_index" : 1,
                "choice_text" : "Kill the bunny rabbit.",
                "leads_to_story" : 5
            },
            {
                "choice_index" : 2,
                "choice_text" : "Ask the bunny rabbit its name.",
                "leads_to_story" : 6
            }
        ]
    }
]

现在您已经以有条理的方式存储了所有故事和选择数据,我将创建两个类来存储此数据以便在运行时进行访问.所以我会创建一个Story类和一个Choice类.他们可能看起来像这样……

public class Story {
    public int index;
    public String text;
    public Choice[] choices;

    public Story(int index, String text, Choice[] choices) {
        this.index = index;
        this.text = text;
        this.choices = choices;
    }
}

public class Choice {
    public String text;
    public int leads_to_story;

    public Choice(String text, int leads_to_story) {
        this.text = text;
        this.leads_to_story = leads_to_story;
    }
}

这将允许您将所有故事数据加载到有组织的对象中,然后可以从按数字顺序放置的Story对象数组中访问这些对象.因此,当您需要某个故事时,您只需从数组中调用该索引即可.您的工作流程可能看起来像这样……

//if this is a new game...

//Load and parse the JSON into a local array,
//placing the stories in numerical order
ArrayList<Story> stories = getStories();

//Present story 0, since this is a new game...
TextView textView = (TextView) findViewById(R.id.story_text);
Story story = stories.get(0); 
String storyText = story.text;
textView.setText(storyText);

//The player makes his choice, so you Now
//get the leads_to_story value to find out
//where to go next...
int playerChoice = 1; //whatever they choose
int nextStory = story.choices[playerChoice].leads_to_story;

//New screen loads or is initialized,
//and we load the new story...
Story story = stories.get(nextStory);
//...repeat the process...

对于“死亡”场景,我可能只有一个索引为-1的故事对象或类似的东西.那么你可以随时测试lead_to_story< 0并知道玩家是否死亡. 希望这能为您提供一些如何使事情易于管理和组织的想法.在这些类型的场景中,我总是试图找到处理数据的“聪明”方式,但通常情况下,简单实用的方法可以更好地工作,并使事物更易读和易于管理.希望这可以帮助!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。