bl791/IFDB / games /python /tower.py
bl791's picture
download
raw
11.1 kB
Directions = {
"N": [0, "NORTH"],
"S": [1, "SOUTH"],
"E": [2, "EAST"],
"W": [3, "WEST"],
"U": [4, "UP"],
"D": [5, "DOWN"]
}
class Player:
def __init__(self):
self.inventory = []
self.room = 1
self.counter = 0
self.wantDescription = True
self.coinFound = False
self.ratsAsleep = False
self.computerActive = False
self.manualFound = False
self.computerDead = False
self.loggedIn = False
self.bats = True
self.mountedTape = False
self.copyRunning = False
class Thing:
def __init__(self, description, takable):
self.description = description
self.takable = takable
class Room:
def __init__(self, description, contents, exits):
self.description = description
self.contents = contents
self.exits = exits
def describe(self):
print(self.description)
if len(self.contents) > 0:
print("You see:")
for thing in self.contents:
print(thing.description)
print("Exits are:")
for direction in Directions:
if self.exits[Directions[direction][0]] != 0:
print(direction, end=" ")
print()
Things = {
"RATS": Thing("Hungry rats", False),
"TAPE": Thing("Computer tape", True),
"MACHI": Thing("Vending machine", False),
"TERMI": Thing("Broken-down terminal", True),
"COIN": Thing("Coin", True),
"CANDY": Thing("Candy Bar", True),
"COMPU": Thing("Computer", False),
"BATS": Thing("Bats", False),
"DESK": Thing("Desk", False),
"MANUA": Thing("Computer Manual", True),
"CLOCK": Thing("Elaborate Clockwork", False),
# pseudo-objects
"ROAD": 1,
"DIR": 2,
"ADVEN": 3,
"COPY": 4,
"LOGOU": 5,
"NORTH": 6,
"SOUTH": 7,
"EAST": 8,
"WEST": 9,
"UP": 10,
"DOWN": 11,
}
Rooms = []
Rooms.append(Room("You are nowhere.", [], [0, 0, 0, 0, 0, 0]))
Rooms.append(Room("You are in front of an old factory with a clock tower.", [], [2, 0, 0, 0, 0, 0]))
Rooms.append(Room("You are at the bottom of the stairwell.", [], [3, 1, 0, 0, 7, 0]))
Rooms.append(Room("You are at the top of some basement steps.", [], [0, 2, 0, 0, 0, 4]))
Rooms.append(Room("You are in a damp cellar.", [Things["RATS"]], [0, 0, 5, 0, 3, 0]))
Rooms.append(Room("You are in a storeroom.", [Things["TAPE"]], [0, 0, 0, 4, 0, 0]))
Rooms.append(Room("You are in the cafeteria.", [Things["MACHI"]], [0, 0, 7, 0, 0, 0]))
Rooms.append(Room("You're at a landing on the stairs.", [], [0, 0, 8, 6, 9, 2]))
Rooms.append(Room("Around you is a manufacturing area.", [Things["TERMI"]], [0, 0, 0, 7, 0, 0]))
Rooms.append(Room("You're at a landing on the third floor.", [], [0, 0, 10, 0, 12, 7]))
Rooms.append(Room("You are in the computer room.", [Things["COMPU"]], [0, 0, 0, 9, 0, 0]))
Rooms.append(Room("You are inside the clock tower.", [Things["CLOCK"]], [0, 12, 0, 0, 0, 0]))
Rooms.append(Room("You're at the top of the stairs.", [], [11, 0, 13, 0, 0, 9]))
Rooms.append(Room("You are in a long corridor going east.", [Things["BATS"]], [0, 0, 14, 12, 0, 0]))
Rooms.append(Room("You're at the east end of the corridor.", [Things["DESK"]], [0, 0, 0, 13, 0, 0]))
def parse(command):
words = command.upper().split()[:2] # Convert to uppercase and split words into list
if len(words) <= 0:
return
if len(words) > 0: # Split command into two words and shorten to five characters
verb = words[0][:5]
if len(words) > 1:
noun = words[1][:5]
else:
noun = None
if verb in Directions: # Special treatment for directions
doGo(verb)
elif verb == "GO":
doGo(noun[0])
elif not verb in Verbs:
print("I don't know the verb", verb)
else:
act = Verbs[verb]
if noun == None:
act(None)
else:
if not noun in Things:
print("I don't know the object", noun)
else:
thing = Things[noun]
if verb != "TYPE" and not thing in Rooms[player.room].contents and not thing in player.inventory:
print("It isn't here.")
else:
return act(thing)
def doGo(object):
if Rooms[player.room].exits[Directions[object][0]] == 0:
print("You can't go that way.")
elif player.room == 4 and not player.ratsAsleep:
print("The rats look too fierce.")
else:
player.room = Rooms[player.room].exits[Directions[object][0]]
player.wantDescription = True
return True
def doEat(object):
if not object == Things["CANDY"]:
print("That's silly!")
else:
print("GAG! COUGH! CHOKE! PUKE!")
if Things["CANDY"] in Rooms[player.room].contents:
Rooms[player.room].contents.remove(Things["CANDY"])
if Things["CANDY"] in player.inventory:
player.inventory.remove(Things["CANDY"])
def doKick(object):
if object == None:
print("Please give an object.")
return False
elif object != Things["COMPU"] or player.computerDead:
print("Nothing happens.")
elif player.computerActive:
player.counter = 9
else:
print("The computer starts up!")
print("The console displays: 'PLEASE LOG IN.'")
player.computerActive = -1
return True
def doInsert(object):
if object == None:
print("Please give an object.")
return False
elif object != Things["COIN"]:
print("That's silly!")
return False
elif player.room != 6:
print("You can't do that now.")
else:
player.inventory.remove(Things["COIN"])
Rooms[player.room].contents.append(Things["CANDY"])
print("A candy bar comes out.")
return True
def doType(object):
if object == None:
print("Please give an object.")
return False
elif player.room != 10:
print("You can't do that now.")
elif not player.computerActive:
print("The computer isn't running.")
elif not player.loggedIn:
if object != Things["ROAD"]:
print("'Invalid login ID.'")
else:
print("'ROAD' logged in.'")
player.loggedIn = True
elif not player.copyRunning:
if object == Things["DIR"]:
print("'COPY LOGOU ADVEN'")
elif object == Things["ADVEN"]:
print("'Welcome to Adventure! W#uld Y#$*'")
player.counter = 9
elif object == Things["COPY"]:
print("Mount tape then type filename.")
player.copyRunning = True
else:
print("'Invalid command.'")
else:
player.copyRunning = False
if player.mountedTape:
if object in [Things["COPY"], Things["DIR"], Things["ADVEN"]]:
print("The tape spins...")
print("'File copied.'")
if object == Things["ADVEN"]:
print("Congratulations, you've done it!")
exit()
else:
print("'No such file'")
else:
print("'Error: Tape not mounted'")
return True
def doTake(object):
if object == None:
print("Please give an object.")
return False
elif not object.takable:
print("That's beyond your ability.")
return True
elif object in player.inventory:
print("You already have it!")
return False
elif object == Things["TERMI"] and not player.coinFound:
print("There was a coin underr it.")
Rooms[player.room].contents.append(Things["COIN"])
player.coinFound = True
elif object == Things["TAPE"]:
mountedTape = False
Rooms[player.room].contents.remove(object)
player.inventory.append(object)
print("O.K.")
return True
def doDrop(object):
if object == None:
print("Please give an object.")
return False
elif not object in player.inventory:
print("You don't have it.")
else:
player.inventory.remove(object)
Rooms[player.room].contents.append(object)
if player.room == 4 and object == Things["CANDY"]:
print("The rats devour the candy and get sleepy.")
Rooms[player.room].contents.remove(Things["CANDY"])
Things["RATS"].description = "Sleepy rats"
player.ratsAsleep = True
return True
def doInventory(object):
print("You are carrying:")
if player.inventory == []:
print("Nothing.")
else:
for thing in player.inventory:
print(thing.description)
return True
def doMount(object):
if object == None:
print("Please give an object.")
return False
elif object != Things["TAPE"]:
print("That's silly!")
return False
elif player.room != 10 or player.mountedTape:
print("You can't do that now.")
else:
player.inventory.remove(Things["TAPE"])
Rooms[player.room].contents.append(Things["TAPE"])
player.mountedTape = True
print("O.K.")
return True
def doRead(object):
if object == None:
print("Please give an object.")
return False
elif object == Things["MACHI"]:
print("'INSERT COIN.'")
elif object == Things["MANUA"]:
print("'...USER ID IS ROAD...'")
print("'TYPE DIR FOR LIST OF COMMANDS...'")
print("The rest is illegible.")
else:
print("Nothing is written on it.")
return True
def doFight(object):
print("That won't work.")
return True
def doStart(object):
if object == None:
print("Please give an object.")
return False
elif object == Things["COMPU"]:
print("Nothing happens.")
else:
print("That's silly!")
return False
return True
def doOpen(object):
if object == None:
print("Please give an object.")
return False
elif object == Things["DESK"]:
if player.manualFound:
print("It already is.")
else:
Rooms[player.room].contents.append(Things["MANUA"])
player.manualFound = True
print("Inside it is a manual.")
else:
print("That's silly!")
return False
return True
def doQuit(object):
exit()
def doLook(object):
player.wantDescription = True
return False
def doWind(object):
if object == Things["CLOCK"]:
if player.bats:
print("The clock chimes deafeningly and something flies past.")
player.bats = False
Rooms[13].contents.remove(Things["BATS"])
else:
print("It's fully wound.")
else:
print("That's silly!")
return True
def doExamine(object):
if object == Things["MACHI"] or object == Things["MANUA"]:
print("Something is written there.")
elif object == Things["DESK"] and not player.manualFound:
print("It is closed.")
elif object == Things["TERMI"]:
print("It looks beyond repair.")
elif object == Things["COMPU"]:
print("This is an ancient mainframe with a console.")
elif object == Things["CLOCK"]:
print("There is a large handle for winding the clock.")
elif object == Things["TAPE"] and player.mountedTape:
print("It is mounted on the computer.")
else:
print("You see nothing special.")
return True
Verbs = {
"N": doGo,
"S": doGo,
"E": doGo,
"W": doGo,
"U": doGo,
"D": doGo,
"GO": doGo,
"EAT": doEat,
"KICK": doKick,
"INSER": doInsert,
"DEPOS": doInsert,
"TYPE": doType,
"TAKE": doTake,
"GET": doTake,
"DROP": doDrop,
"THROW": doDrop,
"INVEN": doInventory,
"I": doInventory,
"MOUNT": doMount,
"READ": doRead,
"FIGHT": doFight,
"KILL": doFight,
"START": doStart,
"POWER": doStart,
"OPEN": doOpen,
"QUIT": doQuit,
"LOOK": doLook,
"WIND": doWind,
"EXAMI": doExamine
}
player = Player()
while True:
if player.wantDescription:
Rooms[player.room].describe()
player.wantDescription = False
complete = parse(input("> "))
if complete:
if player.computerActive:
player.counter = player.counter + 1
if player.counter >= 10 and player.room == 10:
print("The computer dies with a loud pop.")
player.computerDead = True
player.computerActive = False
Things["COMPU"].description = "Dead computer"
if Things["BATS"] in Rooms[player.room].contents:
print("A horde of bats carries you out.")
player.room = 1
player.wantDescription = False

Xet Storage Details

Size:
11.1 kB
·
Xet hash:
7d92e2e2c6c4a76900b78d8798e4ef598d7d157a396ff202688d8be276bfdf35

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.