Help again! I am writing a game for my daughter and I was trying to get the game to ask a random riddle, but I get an error in the process. Please help! I will include the whole program in case the error is in another part of the code. The error is happening in the Cellar class . I went through the prcoess of testing the game: open window, climb into window, grab bone, go through doorway,
give dog the bone, grab lantern, approach dragon. Please let me know what I can do. Thanks in advance.
Here is the code:
from sys import exit
from random import randint
from textwrap import dedent
class Scene(object):
def enter(self):
print("This scene is not yet configured.")
print("Subclass it and implement enter().")
exit(1)
class Engine(object):
def __init__(self, scene_map):
self.scene_map = scene_map
def play(self):
current_scene = self.scene_map.opening_scene()
last_scene = self.scene_map.next_scene('finished')
while current_scene != last_scene:
next_scene_name = current_scene.enter()
current_scene = self.scene_map.next_scene(next_scene_name)
current_scene.enter()
class Riddle:
riddle = ' '
class FirstRiddle(Riddle):
def first_riddle():
Riddle.riddle = "What is always on its way, but never arrives?"
class SecondRiddle(Riddle):
def second_riddle():
Riddle.riddle = "What thrives when you feed it, but dies when you water it?"
class ThirdRiddle(Riddle):
def third_riddle():
Riddle.riddle = "What do you hold but never keep? If you take your last, make it deep."
class FourthRiddle(Riddle):
def fourth_riddle():
Riddle.riddle = "I don't breathe flames, but I light the night, guiding sailors with my steady sight. I stand tall on cliffs, where dragons might dwell, but I save lives with every bell. What am I?"
class FifthRiddle(Riddle):
def fifth_riddle():
Riddle.riddle = "They come out at night without being asked yet lost in the day without being stolen. What are they?"
class Location:
location = ' '
class First(Location):
def first_def():
Location.location = 'start'
class Second(Location):
def second_def():
Location.location = 'dark_woods'
class Third(Location):
def third_def():
Location.location = 'outside_house_without_bone'
class Fourth(Location):
def fourth_def():
Location.location = 'outside_house_with_bone'
class Fifth(Location):
def fifth_def():
Location.location = 'foyer'
class Sixth(Location):
def sixth_def():
Location.location = 'living_room'
class Seventh(Location):
def seventh_def():
Location.location = 'cellar'
class Death(Scene):
def enter(self):
if Location.location in ('start', 'dark_woods', 'outside_house_without_bone', 'outside_house_with_bone'):
print("Day becomes night and you're devoured by wolves.")
elif Location.location in ('foyer', 'living_room'):
print("The dog chews your leg off and you bleed to death.")
elif Location.location == 'cellar':
print("The dragon burns you to a crisp.")
else:
print("You are turned into a rodent and eaten by an owl.")
print("You're dead! Better luck next time!")
exit(1)
class Start(Scene):
def enter(self):
First.first_def()
print(dedent("""
Welcome to Arcamadius, where magic and creatures exist.
You come to a house in the dark woods.
There is a window on the east wall and a door on the
South wall. The house is surrounded by woods. What
would you like to do?
"""))
action = input("> ")
if action == 'open window':
print(dedent("""
You open the window. It makes a squeaking noise.
What do you wnat to do now?
""" ))
action = input("> ")
if action == 'climb into window':
print("You enter the window into the kitchen.")
return 'kitchen'
else:
print("You just stand there!")
return 'death'
elif action == 'open door':
print("You enter the door into the Foyer")
return 'foyer'
else:
return 'death'
class OutsideHouseWithoutBone(Scene):
def enter(self):
Third.third_def()
have_bone = False
print(dedent("""
You are at a house in the dark woods.
There is a window on the east wall and a door on the
South wall. The house is surrounded by woods. What
would you like to do?
"""))
action = input("> ")
if action == 'open window':
print(dedent("""
You open the window. It makes a squeaking noise.
What do you wnat to do now?
""" ))
action = input("> ")
if action == 'climb into window':
print("You enter the window into the kitchen.")
return 'kitchen'
else:
print("You just stand there!")
return 'death'
elif action == 'open door':
print("You enter the door into the Foyer")
return 'foyer'
else:
return 'death'
class OutsideHouseWithBone(Scene):
def enter(self):
Fourth.fourth_def()
have_bone = True
print(dedent("""
You are at a house in the dark woods.
There is an open window on the east wall and a door on the
South wall. The house is surrounded by woods. You are
carrying a bone. What would you like to do?
"""))
action = input("> ")
if action == 'climb into window':
print("You enter the window into the kitchen.")
return 'kitchen_with_bone'
elif action == 'open door':
print("You enter the door into the Foyer")
return 'foyer_with_bone'
else:
return 'death'
class Kitchen (Scene):
def enter(self):
have_bone = False
print(dedent("""
There is a doorway ahead. There is also a table
with a bone on it. What do you wnat to do?
"""))
action = input("> ")
if action == "go through doorway" and have_bone == True:
return 'living_room'
elif action == "grab bone" and have_bone == False:
print("You grab the bone")
return 'kitchen_with_bone'
elif action == "climb out window":
return 'outside_house_without_bone'
else:
print("I'm not sure what you are saying.")
self.enter(self)
class KitchenWithBone(Scene):
def enter(self):
have_bone = True
print(dedent("""
There is a doorway ahead. There is also an empty
table. What do you wnat to do?
"""))
action = input("> ")
if action == "go through doorway" and have_bone == True:
return 'living_room'
elif action == "climb out window":
return 'outside_house_with_bone'
else:
print("I'm not sure what you are saying.")
self.enter(self)
class Foyer(Scene):
def enter(self):
Fifth.fifth_def()
have_bone = False
print(dedent("""
A huge dog is staring and growling at you
What do you do?
"""))
action = input("> ")
if action == "flee":
print(dedent("""
You managed to get away from the dog chasing you and the
dog goes back into the house.
"""))
return 'outside_house_without_bone'
elif action == "give dog the bone" and have_bone == False:
print("you have no bone.")
return 'death'
else:
print("I have no idea what that means.")
return 'foyer'
class FoyerWithBone(Scene):
def enter(self):
have_bone = True
print(dedent("""
A huge dog is staring and growling at you and you are
carrying a bone. What do you do?
"""))
action = input("> ")
if action == "flee":
print(dedent("""
You managed to get away from the dog chasing you and the
dog goes back into the house.
"""))
return 'outside_house_with_bone'
elif action == "give dog the bone" and have_bone == True:
print(dedent("""
You give the dog the bone.
The dog wants to play. You play with the dog for awhile.
Now back to business. The entrance to the living room
is ahead.
"""))
return 'living_room'
else:
print("I have no idea what that means.")
return 'foyer_with_bone'
class LivingRoom(Scene):
def enter(self):
Sixth.sixth_def()
have_bone = True
print(dedent("""
You are in the living room. There is a trap door in the floor.
There is a mantle with an electric lantern on it. A huge dog
is staring and growling at you. You are carrying a bone. What
would you like to do?
"""))
action = input("> ")
if action == "give dog the bone" and have_bone == True:
print(dedent("""
You give the dog the bone.
The dog wants to play. You play with the dog for awhile.
The dog goes asleep. You are in the living room. There is
a trap door in the floor. There is a mantle with an electric
lantern on it. What would you like to do?
"""))
action = input("> ")
if action == "grab lantern":
print(dedent("""
You grab the lantern and turn it on. You are in the
living room. There is a trap door in the floor.
There is an empty mantle. You open the trap door.
"""))
return 'cellar'
else:
print(dedent("""
The dog wakes up from its slumber and is hungry. It
growls and snarls at you.
"""))
return 'death'
else:
return 'death'
class DarkWoods(Scene):
def enter(self):
pass
class Cellar(Scene):
def enter(self):
Seventh.seventh_def()
print(dedent("""
You open the open the door to the cellar and a foul
stench is coming from the darkness. You head into
the cellar. In the corner, you see a dragon laying
on a bed of gold. On top of the gold is a nest and
in the nest is five dragon eggs What would you like
to do?
"""))
action = input("> ")
if action == "grab some gold":
print(dedent("""
The dragon awakens in a fury and says, 'How dare
thee take my gold! For that you will perish!'
"""))
return 'death'
elif action == "grab an egg":
print(dedent("""
The dragon awakens in a fury and says, 'How dare
thee take one of my eggs! For that you will perish!'
"""))
return 'death'
elif action == "approach dragon":
print(dedent("""
You approach the dragon and ask the dragon, 'How may I
obtain an egg from you?' The dragon says, '
You must first answer a riddle. Then you will get an egg'
"""))
else:
print("I'm not sure what you mean.")
return 'cellar'
riddle_number = f"{randint(1,5)}"
guesses = 1
if riddle_number == 1:
print(FirstRiddle.first_riddle())
guess = input("[your answer]> ")
answer = "Tomorrow"
elif riddle_number == 2:
print(SecondRiddle.second_riddle())
guess = input("[your answer]> ")
answer = "Fire"
elif riddle_number == 3:
print(ThirdRiddle.third_riddle())
guess = input("[your answer]> ")
answer = "A breath of air"
elif riddle_number == 4:
print(FourthRiddle.fourth_riddle())
guess = input("[your answer]> ")
answer = "A lighthouse"
else:
print(FifthRiddle.fifth_riddle())
guess = input("[your answer]> ")
answer = "Stars"
while guess != answer and guesses < 3:
print("Try again!")
guesses += 1
guess = input("[your answer]> ")
if guess == answer:
print(dedent("""
You have answered correctly. You carefully chooose
an egg. The dragon speaks some magic words and you
are teleported to the Dark Woods.
"""))
return 'dark_woods'
class WitchHouse(Scene):
def enter(self):
pass
class Finished(Scene):
def enter(self):
pass
class Map(object):
scenes = {
'start': Start(),
'outside_house_without_bone': OutsideHouseWithoutBone(),
'outside_house_with_bone': OutsideHouseWithBone(),
'kitchen': Kitchen(),
'kitchen_with_bone': KitchenWithBone(),
'foyer': Foyer(),
"foyer_with_bone": FoyerWithBone(),
'living_room': LivingRoom(),
'dark_woods': DarkWoods(),
'cellar': Cellar(),
'witch_house': WitchHouse(),
'death': Death(),
'finished': Finished(),
}
def __init__(self, start_scene):
self.start_scene = start_scene
def next_scene(self, scene_name):
val = Map.scenes.get(scene_name)
return val
def opening_scene(self):
have_bone = False
return self.next_scene(self.start_scene)
a_map = Map('start')
a_game = Engine (a_map)
a_game.play()