Skip to main content
This assignment is due on Thursday, January 23, 2020 before 01:30PM.

Homework 1: Build a Text-Adventure Game


In this homework assignment, you will write your own classic text adventure game. This homework can be completed in groups of up to 2 people. You will implement two text adventure games. One will be a re-implementation of the Action Castle game, and one will be a game that you design yourself. The game that you design can be on any topic, or can tell any story of your choice. We will play the games that you design during class, and part of your grade will be awarded based on how creative/exciting your classmates think your game is.

Starter code

We have provided starter code for a basic text adventure game. You are free modify it however you want, and bring in any dependencies you feel will be useful.

Task 1: Implement Action Castle

Action Castle is a game by Jared A. Sorensen. It is included in his book Parsley, which is a collection of games inspired by the text-adventures of the 1980s. Parsley is a party game where you take on the role of the parser, and the players shout out commands like GO NORTH, LIGHT LAMP or GET SWORD. You obtusely follow player’s commands, simulating a computer’s limited vocabulary. The effect is suprisingly hilarious and fun.

We got Jared’s permission to distribute the Action Castle module in class, and you can also buy the Parsley book for $20 if you’d like to support an awesome indy game developer.

You should modify the provided code to:

  1. Create the 13 locations from Action Castle (Cottage, Garden Path, Fishing Pond, Winding Path, Top of the Tall Tree, Drawbridge, Courtyard, Tower Stairs, Tower, Dungeon Stairs, Dungeon, Great Feasting Hall, Throne Room).
  2. Create the items for the game (fishing poll, rosebush, club, fish, the troll etc.).
  3. Update the code so that it can handle the actions/commands/preconditions that are described by the Action Castle module.

Need a hint on how to get started? I as able to re-implement the whole of the Action Castle game using the starter code by modifying the build_game function, the check_preconditions function, and by adding a few new methods to the Special functions section. None of the other starter code needed to be modified. It took me about 5 hours total to implement the game.

Except for this part: The ghost will reach out for the player to stop his heart if the player lingers here. I skipped that part of the game.

Advanced Hint: To do handle state changes (like the guard going from awake to unconscious), I used two Items to represent the different states, and then used a special function to perform multiple actions that would destroy Item and put the other Item in its place. For example:

  guard = Item("guard", "a guard carrying a sword and a key", "HE LOOKS AT YOU SUSPICIOUSLY.",
    start_at=courtyard, gettable=False)
  unconscious_guard = Item("unconscious guard", "an unconscious guard is slumpped against the wall", 
    "HE HAS BITS OF BRANCH ON HIS UNIFORM.", start_at=None, gettable=False)

  guard.add_action("hit guard with branch", perform_multiple_actions, 
      ([(destroy_item, (branch,"You swing your branch against the guard. It shatters to pieces.",
                               "You already tried that.")),
      (destroy_item, (guard,"The guard slumps over, unconscious.","")),
      (create_item, (unconscious_guard,"The guard's unconscious body lies on the ground.")),
      (create_item, (key,"His key falls from his hand.")),
      ]), preconditions={"inventory_contains":branch , "location_has_item": guard})

There are other ways of handling this, and you’re not obligated to use my way.

The starter code provides a vizualization method that displays a directed graph of the game that you have created. If you’d like to compare your game graph against mine, you can look at my vizualization of Action Castle.

Task 2: Implement Your Own Creation

Your game should include all of the following:

  • At least 3 Locations
  • At least 3 Items that can be interacted with. These can be doors, keys, tools, ogres, etc.
  • At least one “puzzle” where there are certain preconditions that must be met before the player can make forward progress.
  • At least one “win” state and at least one “lose” state.

A fun example of a tiny game with very 3 locations and 3 items is the “Flaming Goat” game in Jared A. Sorensen’s Parsley book. I played it with my 6 year old son, and it cracked him up.

Optionally, you can think about adding other elements to your game, like:

  • Scoring
  • Changes over time
  • Interesting non-player characters

Feel free to modify the starter code in any way you see fit in order to enable your game ideas. However, the “Play the game” and “Visualize your game” code blocks should remain functional.

We will play your game in class on January 23, and your classmates will help to grade this assignment based on how fun/creative/interesting your game is. Be creative! For inspiration, we recommend searching Pinterest for cross-section maps. Here are some that we like:

Tip: I recommend drawing out on your game on graph paper before you get started.

What to submit

You should submit a link to a Github repository which contains the following:

  1. An IPython notebook called action_castle.ipynb that runs Action Castle. (You can use Google Colab to view IPython Notebooks on Github.)
  2. An IPython notebook called my_game.ipynb that runs the initial version of your game.
  3. A text file called playthrough.txt with all of the commands that we need to issue to complete your game. It shold be a plain text file with one command per line.
  4. A text file called containing a short paragraph describing your game, and why you picked that topic.

Submissions should be done on Gradescope.