bwx-adventure

A simple module for writing text adventure games in Python.

This module posits a text adventure World made up of Locations. Locations are linked by Connections and sometimes contain Things. The player is represented by a Hero object that has a current location. The command parser is simple but is easily extended with new commands.

This was initially written in support of the Orange Band at SF Brightworks.

Contributions are welcome! Open an issue or a pull request.

from advent import *

# setup the game you are going to build on...
game = Game()

# create some locations
sidewalk = game.new_location(
"Sidewalk", """
There is a large glass door to the east.
The sign says 'Come In!'
""")

vestibule = game.new_location(
"Vestibule", """
A small area at the bottom of a flight of stairs.
Up the stars you see the reception desk.
""")

# make connections between those locations
big_door = game.new_connection("Big Door", sidewalk, vestibule, [IN, EAST], [WEST, OUT])

# create some things to put in your world. You need a name and
pebble = sidewalk.new_object("pebble", "round pebble")
elev_key = sidewalk.new_object("key", "small tarnished brass key")

# simple verb applicable at this location
sidewalk.add_verb(Say('The door makes a hollow sound.', 'knock'))

# Add an animal to roam around.  Animals act autonomously
cat = sidewalk.add_actor(Animal("cat"))
cat.add_verb(Say("The cat purrs.", "pet"))

# make the player starting on the sidewalk
hero = game.new_player(sidewalk)

# add a new hero verb (allows player to say "throw pebble")
def throw(self, actor, noun, words):
  if noun and self.get_verb('drop').act(actor, noun, words):
     print 'The %s bounces and falls to the floor' % noun
     return True
  else:
     print 'You hurt your arm.'
     return False

hero.add_verb(Verb(throw, "throw"))

# start playing (hey, there's a key here!)
game.run()