Created
July 1, 2009 10:16
-
-
Save sma/138713 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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 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