2016-11-28 22 views
0

我正在處理一個任務,涉及創建一個分支故事線的文本冒險。文本冒險與分支故事情節類方法

它的工作原理是這樣的:

  • 等級1具有1個提示和3個選擇
  • 等級2具有3個提示和9個選擇
  • 等級3具有9個提示和27點的選擇
  • 4級有27個提示和81個選項

每個選擇導致一個新的和獨特的提示下一個級別與3個更多的選擇。

我有一個基本的類設置是這樣的:

class Level: 
    def __init__(self,level_num, level_prompt): 
     self.level_num = level_num 
     self.level_prompt = level_prompt 
     self.choices = [] 

    def add_choices(self, choices, next_branch): 
     self.choices.append(choices) 
     self.next_branch = next_branch 

    def print_situation(self): 
     print("Level " + str(self.level_num)) 
     print(self.level_prompt) 
     print("[A] " + self.choices[0]) 
     print("[B] " + self.choices[1]) 
     print("[C] " + self.choices[2]) 

而且我初始化出發這樣的水平:

level1 = Level(1, 'PROMPT HERE') 
level1.add_choices('CHOICE A', '2_A') 
level1.add_choices('CHOICE_B', '2_B') 
level1.add_choices('CHOICE_C', '2_C') 

level2_A = Level(2, 'PROMPT HERE') 
level2_A.add_choices('CHOICE A', '3_A1') 
level2_A.add_choices('CHOICE_B', '3_A2') 
level2_A.add_choices('CHOICE_C', '3_A3') 

level2_B = Level(2, 'PROMPT HERE') 
level2_B.add_choices('CHOICE A', '3_B1') 
level2_B.add_choices('CHOICE_B', '3_B2') 
level2_B.add_choices('CHOICE_C', '3_B3') 

level2_C = Level(2, 'PROMPT HERE') 
level2_C.add_choices('CHOICE A', '3_C1') 
level2_C.add_choices('CHOICE_B', '3_C2') 
level2_C.add_choices('CHOICE_C', '3_C3') 

我無法找出如何關聯的每個選擇與下一個「水平」。我在「add_choices」方法中有「next_branch」參數,但是我很難找出如何跟進這個問題。

我希望它的工作方式是在第一級選擇A,然後程序將打印與「level2_A」相關的提示和選擇。請記住,這將不得不在後面的級別中支持大量單獨的選擇和提示,所以我試圖找到一種有效的方法來管理分支故事情節。

讓我知道如果有什麼不太明白..

非常感謝!

+0

Python中的典型方式對事物聯想到一起是使用一本字典。在這種情況下,'add_choices()'方法可以通過每次被調用時(假設一個'self.mapping_dict = {}'在執行類似'self.mapping_dict [選擇] = next_level'添加到這樣的詞典中的條目類'__init __()'方法最初創建一個空字典)。 – martineau

回答

1

不是傳遞一個字符串「2_A」的方法,你可以定義level2_A實例第一然後直接傳遞對象的方法:

level1 = Level(1, "PROMPT HERE") 
level2_A = Level(2, "PROMPT HERE") 

level1.add_choices("CHOICE A", level2_A) 

在這種情況下,你會定義所有先定義你的級別,然後定義它們是如何相互關聯的。

隨着指數增長這樣,你的遊戲會很快變得非常龐大。您可能會更容易將定義存儲在數據文件中,並通過從文件中加載數據自動構建級別對象。這會將你的內容與你的遊戲邏輯分開,讓事情變得更容易。需要思考的東西!

+0

感謝您的迴應!你有任何想法如何編排故事情節?例如,我想避免編寫100個嵌套的if語句(如果choice = a然後打印level2_A)。 – Carcanken

+0

我會將每個關卡的文本存儲在關卡本身的屬性中。當您運行關卡時,顯示故事片段,然後提示用戶選擇。然後,你可以調用相應級別的print_situation()方法。 –

+0

這樣,您的功能就包含在課程中,並與您的內容分開。 –