class Scene(object):
def enter(self):
pass
class Beginning(Scene):
def enter(self):
print "Beginning Scene"
return 'troll'
class Troll(Scene):
def enter(self):
print "Troll Scene"
return 'soldier'
class Soldier(Scene):
def enter(self):
print "Soldier Scene"
return 'dragon'
class Dragon(Scene):
def enter(self):
print "Dragon Scene"
return 'treasure'
class Treasure(Scene):
def enter(self):
print "Treasure Scene"
win = True
return 'death'
class Death(Scene):
def enter(self):
if (win == True):
print "Yay! You win!"
else:
print "Sorry. You died."
return 'finished'
class Map(object):
scenes = {
'beginning' : Beginning(),
'troll' : Troll(),
'soldier' : Soldier(),
'dragon' : Dragon(),
'treasure' : Treasure(),
'death' : Death(),
}
scene_name = 'beginning'
final_scene = 'finished'
win = False
while scene_name != final_scene:
current_scene = Map.scenes.get(scene_name)
scene_name = current_scene.enter()
Y2xhc3MgU2NlbmUob2JqZWN0KToKICAgIGRlZiBlbnRlcihzZWxmKToKICAgICAgICBwYXNzCgpjbGFzcyBCZWdpbm5pbmcoU2NlbmUpOgogICAgZGVmIGVudGVyKHNlbGYpOgogICAgICAgIHByaW50ICJCZWdpbm5pbmcgU2NlbmUiCiAgICAgICAgcmV0dXJuICd0cm9sbCcKCQkKY2xhc3MgVHJvbGwoU2NlbmUpOgogICAgZGVmIGVudGVyKHNlbGYpOgogICAgICAgcHJpbnQgIlRyb2xsIFNjZW5lIgogICAgICAgcmV0dXJuICdzb2xkaWVyJwogICAgICAgIApjbGFzcyBTb2xkaWVyKFNjZW5lKToKICAgIGRlZiBlbnRlcihzZWxmKToKICAgICAgICBwcmludCAiU29sZGllciBTY2VuZSIKICAgICAgICByZXR1cm4gJ2RyYWdvbicKICAgICAgICAKY2xhc3MgRHJhZ29uKFNjZW5lKToKICAgIGRlZiBlbnRlcihzZWxmKToKICAgICAgICBwcmludCAiRHJhZ29uIFNjZW5lIgogICAgICAgIHJldHVybiAndHJlYXN1cmUnCiAgICAgICAgCmNsYXNzIFRyZWFzdXJlKFNjZW5lKToKICAgIGRlZiBlbnRlcihzZWxmKToKICAgICAgICBwcmludCAiVHJlYXN1cmUgU2NlbmUiCiAgICAgICAgd2luID0gVHJ1ZQogICAgICAgIHJldHVybiAnZGVhdGgnCiAgICAgICAgCmNsYXNzIERlYXRoKFNjZW5lKToKICAgIGRlZiBlbnRlcihzZWxmKToKICAgICAgICBpZiAod2luID09IFRydWUpOgogICAgICAgICAgICBwcmludCAiWWF5ISBZb3Ugd2luISIKICAgICAgICBlbHNlOgogICAgICAgICAgICBwcmludCAiU29ycnkuIFlvdSBkaWVkLiIKICAgICAgICByZXR1cm4gJ2ZpbmlzaGVkJwogICAgICAgIApjbGFzcyBNYXAob2JqZWN0KToKICAgIHNjZW5lcyA9IHsKICAgICAgICAnYmVnaW5uaW5nJyA6IEJlZ2lubmluZygpLAogICAgICAgICd0cm9sbCcgOiBUcm9sbCgpLAogICAgICAgICdzb2xkaWVyJyA6IFNvbGRpZXIoKSwKICAgICAgICAnZHJhZ29uJyA6IERyYWdvbigpLAogICAgICAgICd0cmVhc3VyZScgOiBUcmVhc3VyZSgpLAogICAgICAgICdkZWF0aCcgOiBEZWF0aCgpLAogICAgfQogICAgCnNjZW5lX25hbWUgPSAnYmVnaW5uaW5nJwpmaW5hbF9zY2VuZSA9ICdmaW5pc2hlZCcgCndpbiA9IEZhbHNlCndoaWxlIHNjZW5lX25hbWUgIT0gZmluYWxfc2NlbmU6CiAgICBjdXJyZW50X3NjZW5lID0gTWFwLnNjZW5lcy5nZXQoc2NlbmVfbmFtZSkKICAgIHNjZW5lX25hbWUgPSBjdXJyZW50X3NjZW5lLmVudGVyKCkKCQk=