2016-03-10 85 views
3

我目前正在爲我的大學的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分類到樹中?

我可以看到我的解釋有點混亂,所以請告訴我他們是不是你不明白的東西。 (或者如果這是我的英文破碎)

感謝您的回答!

+0

嗯。有趣的問題。讓我問你:路徑是絕對的嗎?同樣的選擇總是引領同樣的道路?或者故事和選擇可以相互混合?我可以在故事1中深入5層,然後選擇33作爲我的選擇之一嗎?如果沒有,我認爲JSON可以很好地構建這個結構。 – NoChinDeluxe

+0

嗯,我想保持絕對路徑,而不是相互混合,但我不得不承認,你提出一個有趣的問題,它可以饒了我很多ressources的導致樹的另一個分支。但是我不得不返回一個值,告訴我該去哪裏,因爲它會在樹的完全不同的部分。我不知道JSON,我會盡力去看看,謝謝你的回答! – FloLp

回答

2

通過這個問題思考了一下後腳本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並知道玩家是否死亡。

但願這給你如何爲了便於管理和有組織的一些想法。在這些類型的場景,我總是忍不住,試圖找到處理數據的「聰明」的方式,但更多的,往往不是一種簡單,實用的方法效果要好得多,並讓事情變得更可讀和可管理性。希望這可以幫助!

6

就個人而言,我會將每個場景放在一個JSON文件中,每個選項都有一個指向下一個文件名的鍵,如果不需要翻譯任何資源。您可以在運行時加載第一個文件(或上次保存)。該場景的文件名稱將是「保存」本身。

但是,如果您需要任何故事情節的翻譯,則可能需要將其轉儲到「strings.xml」中,然後在運行時創建樹並引用相應的R.string ID。但是,在這種情況下,R.string id不應該用作保存,因爲它可以在編譯之間進行更改。每個故事的場景也許應該有一個永遠不應該被修改(枚舉將做到這一點)