Skip to content

Instantly share code, notes, and snippets.

@sma
Created July 1, 2009 10:16
Show Gist options
  • Save sma/138713 to your computer and use it in GitHub Desktop.
Save sma/138713 to your computer and use it in GitHub Desktop.
# encoding: UTF-8
rooms = {}
class Room(object):
def __init__(self, name, description):
self.name, self.description, self.exits, self.items = name, description, {}, []
rooms[name] = self
def look(self):
print
print self.name
print self.description
if self.exits: print u"Ausgänge: %s" % ", ".join(self.exits.keys())
if self.items: print u"Gegenstände: %s" % ", ".join(item.name for item in self.items)
class Item(object):
def __init__(self, name, *aliases):
self.name, self.aliases = name, aliases
class Exit(object):
def __init__(self, direction, name, success=None, failure=None):
self.direction, self.room = direction, rooms[name]
self.success = success or "Du gehst nach %s." % Exit.names[direction]
self.failure = failure or "Dahin führt kein Weg."
names = {'n': u'Norden', 'w': u'Westen', 'e': u'Osten', 's': u'Süden'}
class Actor(object):
def __init__(self, room):
self.room, self.items = room, []
def look(self):
self.room.look()
def go(self, direction):
exit = self.room.exits[direction]
if self.room != rooms[u'Innenhof'] or self.has(u'Palastschlüssel'):
self.room = exit.room
print exit.success
return
print exit.failure
def has(self, name):
for item in self.items:
if name == item.name or name in item.aliases:
return True
def search(self):
if self.room.name == u'Innenhof':
print u"Du findest einen alten Schlüssel."
self.room.items.append(Item(u'Palastschlüssel', u'schlüssel'))
def take(self, name):
for item in self.room.items:
if name == item.name.lower() or name in item.aliases:
self.room.items.remove(item)
self.items.append(item)
print u"Du nimmt: %s" % item.name
return
print u"Da ist nichts."
def inventory(self):
print u"Du besitzt: %s" % (", ".join(item.name for item in self.items) or u"Nichts")
Room(u'Vor dem Burgtor', u'Du stehst vor einem großen mit eisernen Banden verstärktem Tor.')
Room(u'Innenhof', u'Du steht in einem engen und schmutzigen Hof dessen Ecken im Schatten liegen.')
Room(u'Palastsaal', u'Du siehst einen ehemals prächtigen, doch jetzt zerfallenen Saal.')
def connect(room, exit): rooms[room].exits[exit.direction] = exit
connect(u'Vor dem Burgtor', Exit('n', u'Innenhof',
u'Du gehst durch das Tor als es krachend hinter dir zufällt.\nDer Weg ist versperrt.'))
connect(u'Innenhof', Exit('w', u'Palastsaal',
u'Der Schlüssel öffnet die Tür und betrittst den Palastsaal.',
u'Eine verschlossene Tür versperrt dir den Weg.'))
connect(u'Palastsaal', Exit('e', u'Innenhof'))
actor = Actor(rooms['Vor dem Burgtor'])
while True:
actor.look()
command = map(str.lower, (raw_input(">>> ").strip() + " nix nix").split())
if command[0] == 'help':
print u"Befehle: help, go, search, take, inventory"
if command[0] == 'go':
actor.go(command[1])
if command[0] == 'search':
actor.search()
if command[0] == 'take':
actor.take(command[1].decode("utf-8"))
if command[0] == 'inventory':
actor.inventory()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment