2016-11-30 85 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]) 

    def get_next_prompt(self, letter_choice): # this will look at choice and find the prompt associated with it, for example level1 choice A SHOULD return level2_A 
     if letter_choice == 'A': 
      return self.choices[0].next_branch 
     if letter_choice == 'B': 
      return self.choices[1].next_branch 
     if letter_choice == 'C': 
      return self.choices[2].next_branch 

为了说明程序的流程的目的,这里的初始化的对象的样本。

# prompts 
level1 = Level(1, 'PROMPT HERE') 

level2_A = Level(2, 'PROMPT HERE') 
level2_B = Level(2, 'PROMPT HERE') 
level2_C = Level(2, 'PROMPT HERE') 

level3_A1 = Level(3, 'PROMPT HERE') 
level3_A2 = Level(3, 'PROMPT HERE') 
level3_A3 = Level(3, 'PROMPT HERE') 
level3_B1 = Level(3, 'PROMPT HERE') 
level3_B2 = Level(3, 'PROMPT HERE') 
level3_B3 = Level(3, 'PROMPT HERE') 
level3_C1 = Level(3, 'PROMPT HERE') 
level3_C2 = Level(3, 'PROMPT HERE') 
level3_C3 = Level(3, 'PROMPT HERE') 

# choices 
level1.add_choices('CHOICE A', level2_A) 
level1.add_choices('CHOICE B', level2_B) 
level1.add_choices('CHOICE C', level2_C) 

level2_A.add_choices('CHOICE A', level3_A1) 
level2_A.add_choices('CHOICE B', level3_A2) 
level2_A.add_choices('CHOICE C', level3_A3) 
level2_B.add_choices('CHOICE A', level3_B1) 
level2_B.add_choices('CHOICE B', level3_B2) 
level2_B.add_choices('CHOICE C', level3_B3) 
level2_C.add_choices('CHOICE A', level3_C1) 
level2_C.add_choices('CHOICE B', level3_C2) 
level2_C.add_choices('CHOICE C', level3_C3) 

我的程序中的错误来自我班的get_next_prompt方法。我的意图是能够这样称呼它:

level1.get_next_prompt('A') 

并让它返回值:level2_A。这不是简单地将_A添加到关卡名称的末尾,而是应该查看选择的next_branch参数并返回该参数。

让我知道是否有什么不完全清楚。

谢谢!

+0

有你分手的理由在每个提示中将级别分成不同的功能,而不是将历史传递给关卡,并让关卡决定显示哪个提示? 'level4(历史):if history =“ABA”...' – TemporalWolf

+0

究竟是你遇到的错误还是问题? – depperm

+0

我收到一个错误,说选择[0]没有属性'下一个分支'。至于它们如何分解,我只是试图按照计划的命名约定和关卡名称。 – Carcanken

回答

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

self.choices是一个字符串数组:['CHOICE A','CHOICE B', 'CHOICE C'],其不具有任何next_branch属性。

你并没有将next_branch存储在每个选项中,而是将它存储在基本级别中,并且每次添加新选项时都会覆盖它。

我可能将其更改为:

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

那么你选择的文本是self.choices[0][0], self.choices[1][0], self.choices[2][0]和下一个分支存储在self.choices[0][1], self.choices[1][1], self.choices[2][1]

一个更好的选择将是改变等级结构,使您初始化为:

level1 = Level(1, 'CHOICE TO GET HERE', 'PROMPT HERE') 

存储为

self.choice 
self.prompt 

然后,你可以做

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

,并从得到的信息:

print self.choices[0].choice 

或获得的水平

return self.choices[0]