def inside( command, state) :
if "yes" in command:
state[ "won" ] = True
elif "no" in command:
state[ "hp" ] = - 100
else :
print( "Unknown command" )
def outside( command, state) :
if "use" in command and "key" in command:
if state.get ( "has_key" ) == True:
print ( "You use the key and enter inside the building." )
print ( "Now that you are inside, do you want to win?" )
state[ "location" ] = inside
else :
print ( "You do not have a key and you get shocked for trying (-1hp)" )
state[ "hp" ] -= 1
elif "look" in command:
if "key" in command:
print ( "The key is nice and shiny" )
elif "door" in command:
print ( "The door is nice and strong" )
else :
print ( "You are standing outside. There is a key and a door" )
elif ( "get" in command or "pick" in command) and "key" in command:
state[ "has_key" ] = True
print( "You got the key" )
else :
print ( "Unknown command" )
def intro( command, state) :
print( "Welcome to the text adventure tutorial. You are standing outside. There is a key and a door" )
state[ "location" ] = outside
state = { "hp" : 3 , "location" : intro, "won" : False}
command = ""
state[ "location" ] ( command, state)
while state[ "hp" ] > 0 and state[ "won" ] == False:
command = input( "Command? " ) .lower ( )
state[ "location" ] ( command, state)
if state[ "hp" ] <= 0 :
print ( "You died." )
elif state[ "won" ] == True:
print ( "You win! (hp:" , state[ "hp" ] , ")" )
ZGVmIGluc2lkZShjb21tYW5kLCBzdGF0ZSk6CglpZiAieWVzIiBpbiBjb21tYW5kOgoJCXN0YXRlWyJ3b24iXSA9IFRydWUKCWVsaWYgIm5vIiBpbiBjb21tYW5kOgoJCXN0YXRlWyJocCJdID0gLTEwMAoJZWxzZToKCQlwcmludCgiVW5rbm93biBjb21tYW5kIikKCmRlZiBvdXRzaWRlKGNvbW1hbmQsIHN0YXRlKToKCWlmICJ1c2UiIGluIGNvbW1hbmQgYW5kICJrZXkiIGluIGNvbW1hbmQ6CgkJaWYgc3RhdGUuZ2V0KCJoYXNfa2V5IikgPT0gVHJ1ZToKCQkJcHJpbnQgKCJZb3UgdXNlIHRoZSBrZXkgYW5kIGVudGVyIGluc2lkZSB0aGUgYnVpbGRpbmcuIikKCQkJcHJpbnQgKCJOb3cgdGhhdCB5b3UgYXJlIGluc2lkZSwgZG8geW91IHdhbnQgdG8gd2luPyIpCgkJCXN0YXRlWyJsb2NhdGlvbiJdID0gaW5zaWRlCgkJZWxzZToKCQkJcHJpbnQgKCJZb3UgZG8gbm90IGhhdmUgYSBrZXkgYW5kIHlvdSBnZXQgc2hvY2tlZCBmb3IgdHJ5aW5nICgtMWhwKSIpCgkJCXN0YXRlWyJocCJdIC09IDEKCWVsaWYgImxvb2siIGluIGNvbW1hbmQ6CgkJaWYgImtleSIgaW4gY29tbWFuZDoKCQkJcHJpbnQgKCJUaGUga2V5IGlzIG5pY2UgYW5kIHNoaW55IikKCQllbGlmICJkb29yIiBpbiBjb21tYW5kOgoJCQlwcmludCAoIlRoZSBkb29yIGlzIG5pY2UgYW5kIHN0cm9uZyIpCgkJZWxzZToKCQkJcHJpbnQgKCJZb3UgYXJlIHN0YW5kaW5nIG91dHNpZGUuIFRoZXJlIGlzIGEga2V5IGFuZCBhIGRvb3IiKQoJZWxpZiAoImdldCIgaW4gY29tbWFuZCBvciAicGljayIgaW4gY29tbWFuZCkgYW5kICJrZXkiIGluIGNvbW1hbmQ6CgkJc3RhdGVbImhhc19rZXkiXSA9IFRydWUKCQlwcmludCgiWW91IGdvdCB0aGUga2V5IikKCWVsc2U6CgkJcHJpbnQgKCJVbmtub3duIGNvbW1hbmQiKQoJCQkKZGVmIGludHJvKGNvbW1hbmQsIHN0YXRlKToKCXByaW50KCJXZWxjb21lIHRvIHRoZSB0ZXh0IGFkdmVudHVyZSB0dXRvcmlhbC4gWW91IGFyZSBzdGFuZGluZyBvdXRzaWRlLiBUaGVyZSBpcyBhIGtleSBhbmQgYSBkb29yIikKCXN0YXRlWyJsb2NhdGlvbiJdID0gb3V0c2lkZQkKCgkKc3RhdGUgPSB7ImhwIjogMywgImxvY2F0aW9uIjogaW50cm8sICJ3b24iOiBGYWxzZX0KY29tbWFuZCA9ICIiCgpzdGF0ZVsibG9jYXRpb24iXShjb21tYW5kLCBzdGF0ZSkKd2hpbGUgc3RhdGVbImhwIl0gPiAwIGFuZCBzdGF0ZVsid29uIl0gPT0gRmFsc2U6Cgljb21tYW5kID0gaW5wdXQoIkNvbW1hbmQ/ICIpLmxvd2VyKCkKCXN0YXRlWyJsb2NhdGlvbiJdKGNvbW1hbmQsIHN0YXRlKQoJCmlmIHN0YXRlWyJocCJdIDw9IDA6CglwcmludCAoIllvdSBkaWVkLiIpCmVsaWYgc3RhdGVbIndvbiJdID09IFRydWU6CglwcmludCAoIllvdSB3aW4hIChocDoiLCBzdGF0ZVsiaHAiXSwiKSIp