英文命令[文字RPG] - python

时间:2013-07-08 06:59:13

标签: python

我正在创建一个文本RPG,从老文本冒险中获取灵感,玩家输入英文命令;比如'拿起剑'之类的东西。 我建立了一个简单的;输入'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!"

当我运行代码时,无论我输入什么内容,它总是与'sleep'选项一起使用。 我可能只是犯了一些简单的错误! 你能帮我解决我做错了什么以及如何解决它。

2 个答案:

答案 0 :(得分:5)

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

您正在通过

控制循环
while bed_time == False:

但是你从未在循环中将bed_time设置为True(仅在else子句中,但该子句仅在循环正常退出时执行,当它正在通过break退出时,正如您现在所做的那样 - 因此bed_time永远不会改变。

此外,通常不赞成直接比较布尔值。习惯的方式(在大多数语言中,不仅仅是Python)将是while not bedtime:

在开始这样一个大项目之前,您应该阅读一些初学者的编程书籍和/或Python tutorial。您的代码中存在一些问题,这些问题表明您确实需要掌握一些基本的编程原则和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只接受一个参数)。

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

等等...

答案 1 :(得分:2)

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

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

因此,当您编写bedside时,如果条件正确,则会进入sleep选项,因此您的回答错误。

你应该写:

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

P.S:我假设您已导入time模块。 P.P.S:我检查了代码并输入table它工作正常。