1

我正在创建一个文本角色扮演游戏,灵感来自于玩家输入英语命令的旧文本冒险;比如'拿起剑'之类的。我建立了一个简单的;输入“A”执行此操作并输入“B”执行此操作,但我想扩展我的系统以获得更多自由。我需要创建一个系统;当玩家输入命令时,程序会挑选出关键词。我认为这可以通过“in”命令来实现。这是我的代码:

print "What would you like to do??"
input_loop_sleep = str('')
choice_sleep = raw_input(str('>>>'))
loop_sleep = False
table_time = False
bed_time = False
error_time = False



while loop_sleep == False:


    if str('sleep') in choice_sleep or str('bed') in choice_sleep or str('goodnight') in choice_sleep or str('Sleep') in choice_sleep or str('tired') in choice_sleep:
        while bed_time == False:
            print "you decide to go back to sleep"
            time.sleep(1)
            print "..."
            time.sleep(1)
            print ""
            time.sleep(1)
            print "darkness"
            time.sleep(1)
            print ""
            print "you wake up..."
            time.sleep(1)
            print "it is now 9:15am"
            time == int(9.15)
            time.sleep(1)
            print "You are standing in your room, slightly more refreshed."
            time.sleep(1)
            print "there is a table with some things on it, stairs, and a wardrobe... with the doors wide open..."
            time.sleep(1)
            print "that's strange... you swear that they were shut when you went to sleep..."
            break
        else:
            bed_time == True
        break
        bed_loop_choice = raw_input('>>>')



    elif str('bedside') in choice_sleep or str('table') in str(choice_sleep):
        while table_time == False: 
            print "You rub your eyes and pick up some belongings from a"
            print "bedside table."
            time.sleep(1) 
            print "Map added!"
            time.sleep(1)
            print "100 gold added!"
            time.sleep(1)
            print "Leather Bag added!"
            cash == int(100)
            time.sleep(1)
            Map == str('map of', str(province))
            Inventory == [str(Map)]
            container == str('leather bag')
            print "your", str(container), str("contains a"), str(Map), str('and'), str(cash)
            break
        else:
            table_time == True
        break

    else:
        print "invalid command!"

当我运行代码时,无论我输入什么,它总是带有“睡眠”选项。我可能只是犯了一些简单的错误!你能帮我解决我做错了什么以及如何解决它。

4

2 回答 2

5

要回答您关于为什么sleep循环一直重复的问题:

您正在通过以下方式控制循环

while bed_time == False:

但是您从未在循环中设置bed_timeTrue(仅在else子句中,但该子句仅在循环正常退出时执行,而不是在通过 退出时执行break,就像您现在正在做的那样-因此bed_time永远不会改变)。

此外,与布尔值的直接比较通常是不受欢迎的。惯用的方式(在大多数语言中,不仅仅是 Python)是while not bedtime:.

在开始这样一个大项目之前,您可能应该阅读一些初学者的编程书籍和/或Python 教程。您的代码中有几个问题给人的印象是您确实需要掌握一些基本的编程原则和 Python 习语。

例如,

int(9.15)

不是存储时间的好方法 - 结果将是9

然后您使用time == int(9.15),这意味着“将模块time与整数进行比较9”。我猜您的意思time = int(9.15)是由于上述原因,这已经很糟糕了,但还有另一个问题:您将覆盖模块名称time,这将导致后续time.sleep(1)命令失败并显示AttributeError.

您的代码中不需要大多数str()调用,因为您在已经字符串的对象上使用它。如果你不在,那是不正确的:str('map of', str(province))将提高TypeErrorstr只接受一个论点)。

您对不是类实例的对象使用大写变量名。

等等等等……

于 2013-07-08T07:52:43.870 回答
2

我认为这应该足以解决问题

 In [1]: str('bed') in "bedside"
 Out[1]: True

因此,当您编写bedside它时,它会进入sleep选项 if 条件,因此您会得到错误的答案。

你应该写:

 if str('bed') == choice_sleep or *other conditions* :
    then got inside the sleep option 

PS:我假设你已经导入了time模块。PPS:我检查了代码并输入table它工作正常。

于 2013-07-08T07:55:43.620 回答