My code is a text based adventure program however, when i am running it and it tries to use variables it breaks since the variables are not getting added to the def as python defines things before it does anything else.
This is my code and the program breaks when you go north twice and open window and enter window and up or east
import time
reset = "yes"
def print_slow(str):
for letter in str:
print(letter),
time.sleep(.3)
def game():
#This sets the commands to be used
inv_command = ["inv", "inventory", "i"]
west = ["west", "w", "go west", "walk west"]
east = ["east", "e", "go east", "walk east"]
north = ["north", "n", "go north", "walk north"]
south = ["south", "s", "go south", "walk south"]
northeast = ["northeast", "ne", "go northeast", "walk northeast"]
northwest = ["northwest", "nw", "go northwest", "walk northwest"]
southeast = ["southeast", "se", "go southeast", "walk southeast"]
southwest = ["southwest", "sw", "go southwest", "walk southwest"]
up = ["up", "u", "go up", "go up stairs", "go up ladder", "up stairs", "up ladder"]
down = ["down", "d", "go down", "go down stairs", "go down ladder", "down stairs", "down ladder"]
take = ["take", "t"]
die = ["die","suicide", "kill myself","kill"]
#This sets the objects
mailbox = 1
house_window = 0
house_bag = 0
knife = 0
lamp = 0
carpet = 0
rug = 0
light = 0
trapdoor =0
#This sets the inventory
class Item(object):
def __init__(self, name, attack, armour):
self.name = name
self.attack = attack
self.armour = armour
class Inventory(object):
def __init__(self):
self.items = {}
def add_item(self, item):
self.items[item.name] = item
def contain_item(self, item):
self.items["Leaflet"] = item
def print_items(self):
print('\t'.join(['Name', 'Atk', 'Arm']))
for item in self.items.values():
print('\t'.join([str(x) for x in [item.name, item.attack, item.armour]]))
time.sleep(1)
inventory = Inventory()
class death():
def kill():
print("You killed yourself")
reset()
game = 1
still_running = 1
while game is still_running:
#This is the spawn area
def spawn():
while game is still_running:
inp = input("You wake up in a field surrounded by trees. The only pathway is going north \n>")
if inp in north:
front_house()
if inp in die:
game.reset()
elif inp in inv_command:
inventory.print_items()
else:
print("<You can't do that>")
#This is the front of the house
def front_house():
while game is still_running:
inp = input("You face the front of a house. The windows are boarded up and the door is closed. In front there is a mailbox, and pathways leading west and further north\n>")
if inp in south:
spawn()
elif inp in inv_command:
inventory.print_items()
elif inp in north:
back_house()
elif inp in west:
west_forest_entrance()
elif inp in "open door":
print("<The door is locked>")
elif inp in "open window":
print("<The windows can't be opened. They seem to be nailed shut>")
elif inp in "read leaflet":
if inventory.contain_item:
print("<Welcome to the text based adventure!>")
print("<When typing commands, please don't use capital letters.>")
print("<have fun!>")
else:
print("<You don't have a leaflet>")
elif inp in "open mailbox":
if mailbox == 1:
print("<The mailbox contains a leaflet>")
else:
print("<The mailbox is empty>")
elif inp in "take leaflet":
if mailbox == 1:
inventory.add_item(Item('Leaflet', 0, 0))
mailbox = 0
print("<You have taken the leaflet>")
else:
print("<There's no leaflet in the mailbox>")
else:
print("<You can't do that>")
#This is the back of the house
def back_house():
while game is still_running:
inp = input("You face the back of the house, which has nothing except one ajar window. There is another pathway heading east \n>")
if inp in inv_command:
inventory.print_items()
if inp in south:
front_house()
if inp == "open window":
house_window = 1
print("<You opened the window enough for you to enter through>")
if inp == "enter window":
if house_window == 1:
kitchen()
else:
print("<The window isn't opened enough to fit through>")
else:
print("<You can't do that>")
#This is the kitchen
def kitchen():
while game is still_running:
inp = input("You are inside the kitchen of the house. On the table there is a bag, there is a staircase leading up stairs and to the east there is a living room \n>")
if inp in inv_command:
inventory.print_items()
elif inp in "read manual":
if inventory.contain_item:
print("<Commands - inventory, take, open, attack>")
print("<Moving commands - go north, go south, go northeast, go northwest, go southeast, go southwest, up, down.>")
print("<Good luck!>")
elif inp in up:
attic()
elif inp in east:
living_room()
elif inp in "exit window":
back_house()
elif inp == "open bag":
print("<The bag contains a manual>")
elif inp == "take bag":
print("<You would much rather take what's inside the bag then the bag itself>")
elif inp == "take manual":
if house_bag == 0:
print("<You took the manual>")
house_bag = 1
inventory.add_item(Item('manual', 0, 0))
else:
print("<You have already taken the manual>")
else:
print("<You can't do that>")
#This is the Attic of the house
def attic():
while game is still_running:
if knife == 0:
if lamp == 0:
inp = input("You are in the attic, you can see a lamp and a knife. You see blood stains and stairs downwards \n>")
else:
inp = input("You are in the attic, you can see a knife. You see blood stains and stairs downwards \n>")
elif knife == 1:
if lamp == 0:
inp = input("You are in the attic, you can see a lamp. You see blood stains and stairs downwards \n>")
else:
inp = input("You are in the attic. You see blood stains and stairs downwards \n>")
if inp in inv_command:
inventory.print_items()
elif inp in down:
kitchen()
elif inp in "take knife":
if knife == 0:
print("You pulled the knife out from the wall and put it in your pocket")
print("<You have obtain a knife>")
knife = 1
inventory.add_item(Item('knife', 3, 0))
else:
print("<You have already taken the knife>")
elif inp in "take lamp":
if lamp == 0:
print("<You have taken the lamp>")
lamp = 1
inventory.add_item(Item('lamp', 0,0))
else:
print("<You have already taken the lamp>")
else:
print("<You can't do that>")
#This is the living room
def living_room():
while game is still_running:
if rug == 0:
inp = input("You are in the living room and you see a rug on the floor.\n>" )
if rug == 1:
inp = input("You are in the living room and you can see a trap door.\n>")
if inp == "move rug":
rug = 1
print("<You have found a trap door to the basement>")
if trapdoor == 1:
if inp in down:
underground_entrance()
if inp in inv_command:
inventory.print_items()
else:
print("<You can't do that>")
#This is the underground entrance
def underground_entrance():
while game is still_running:
if lamp == 1:
if light == 0:
inp = input("It is dark, you can't see anything.\n>")
if inp in up:
living_room()
if inp in inv_command:
inventory.print_items()
if inp == "turn on lamp" or "turn lamp on":
print("<You turned on the lamp>")
light = 1
else:
print("<You can't do that>")
if light == 1:
inp = input("You are below the living room, where you can see a entrance to a underground tunnel north of you.\n>")
if inp in up:
living_room()
if inp in inv_command:
inventory.print_items()
if inp in north:
loop = 12
else:
print("<You can't do that>")
if lamp == 0:
inp = input("It is dark, you can't see anything you need to find a lamp.\n>")
if inp in up:
living_room()
if inp in inv_command:
inventory.print_items()
else:
print("<You can't do that>")
#This is the west forest entrance
def west_forest_entrance():
while game is still_running:
inp = input("You are now in a dense forest. There is a fork in the road going NorthWest and SouthWest \n>")
if inp in inv_command:
inventory.print_items()
elif inp in east:
loop = 2
elif inp in northwest:
loop = 6
elif inp in southwest:
loop = 7
else:
print("<You can't do that>")
spawn()
def reset():
if reset == "yes":
print_slow("Resetting...")
print_slow("Loading...")
time.sleep(5)
game()
game()