繁体   English   中英

分支故事情节中的编码效率

[英]Coding Efficiency in a Branching Storyline

在过去的3个月中,我一直是python的学生,并且正在尝试满足以下要求的作业。

您必须创建具有4个级别的多文本冒险。

做出的每个选择都必须在下一个级别中导致3个独特的选择。

这意味着分配需要在1 级中 选择3个在2级中选择9个在3级中选择27个在4级中选择81个 对于python来说,我是很陌生的,我发现使这两者高效,有条理和正确地工作很困难。

这是到目前为止我所拥有的一个例子:

while adventure_running:  # the entire branch of choices.. there might be an easier way to do this but I couldn't figure it out
    print_situation('1')
    answer = input().upper()
    if answer == 'A':
        print_situation('2_A')
        answer = input().upper()
        if answer == 'A':
            print_situation('3_A1')
            answer = input().upper()
            if answer == 'A':
                print_situation('4_A1_A1')
                answer = input().upper()
                if answer == 'A':
                    print("FINAL STATEMENT")
                    adventure_running = False
                    answer = 'D'  # I set the answer value to D at the end so the program doesn't save the value throughout multiple runs

适当重复上述代码以适应所有120个选择。

print_situation函数查看字典,并找到与之相关的提示和选择。

我的主要问题是,如果用户输入错误,它将重新启动整个文本浏览过程,而不是再次打印当前情况。

我知道这可能效率非常低,所以我很乐意听取有关上述问题的任何改进建议。

没有面向对象的编程,有没有办法做到这一点?

您可以使用状态机:

state = '1'   
table = {'1':{'A':'2_A'}, '2_A':{'A':'3_A1'}, 
         '3_A1':{'A':'4_A1_A1'}, '4_A1_A1':{'A':'done'}}

while True:
     print_situation(state)
     if state == 'done':
         break
     state = table[state][input().upper()]

这将打印情况。 检查我们是否处于完成状态。 否则,通过查找表进行转换。

请注意,如果您说的话:

级别1中有3个选择,级别2中有9个选择,级别3中有27个选择,级别4中有81个选择。

你有:

>>> 1+3+3*9+3*9*27+3*9*27*81
59809

状态。

这就是为什么存在面向对象编程的原因。 您需要为Choice,Answer和Level提供另一个类,然后构造对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM