通過這個問題思考了一下後腳本ID,我基本上想出了一個類似的想法肯尼卞的答案,但我喜歡用一些實際的代碼來展示它如何工作。
首先,我想每一個人的故事存儲在它自己的JSON對象。我不知道他們需要像Kenny所建議的那樣使用單獨的文件,因爲它們可以很容易地包含在單個文件中的JSON數組中的單獨對象中。結構如下。
數組中的每個對象將是一個「故事」的對象。這包含一個索引或某種標識來將其標識爲獨特的故事。然後它包含它的故事文本,以及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時,你只需從Array中調用該索引即可。你的工作流可能是這個樣子......
//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或類似的東西,一個故事的對象。所以你可以隨時測試leads_to_story < 0
並知道玩家是否死亡。
但願這給你如何爲了便於管理和有組織的一些想法。在這些類型的場景,我總是忍不住,試圖找到處理數據的「聰明」的方式,但更多的,往往不是一種簡單,實用的方法效果要好得多,並讓事情變得更可讀和可管理性。希望這可以幫助!
嗯。有趣的問題。讓我問你:路徑是絕對的嗎?同樣的選擇總是引領同樣的道路?或者故事和選擇可以相互混合?我可以在故事1中深入5層,然後選擇33作爲我的選擇之一嗎?如果沒有,我認爲JSON可以很好地構建這個結構。 – NoChinDeluxe
嗯,我想保持絕對路徑,而不是相互混合,但我不得不承認,你提出一個有趣的問題,它可以饒了我很多ressources的導致樹的另一個分支。但是我不得不返回一個值,告訴我該去哪裏,因爲它會在樹的完全不同的部分。我不知道JSON,我會盡力去看看,謝謝你的回答! – FloLp