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.
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.
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.
You should download “Parsely: Preview n’ Play Edition” which is free on Jared’s website. It contains the Action Castle game that you’ll be implementing. You can also buy the full Parsley book for $20 if you’d like to support an awesome indy game developer. The Preview n’ Play Edition also explains how these kinds of games work.
You should modify the provided code to:
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)
unconscious_guard = Item("unconscious guard", "an unconscious guard is slumped against the wall",
"HE HAS BITS OF BRANCH ON HIS UNIFORM.", start_at=nowhere)
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. For instance, you might try using the Item’s properties to record conditions like unconscious
.
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.
Your game should include all of the following:
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:
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.
What kind of game should you make? It’s up to you! 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.
You should submit a link to a Github repository which contains the following:
action_castle.ipynb
that runs Action Castle. (You can use Google Colab to view IPython Notebooks on Github.)my_game.ipynb
that runs the initial version of your game.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.README.md
containing a short paragraph describing your game, and why you picked that topic.Submissions should be done on Gradescope.
Chris Ainsley / Adventuron Software Limited, Adventuron Classroom. This is a tutorial aimed at teaching elementary school kids how to program by writing a text adventure game. I modeled our text adventure game after this Adventuron system.
The Hitchhiker’s Guide to the Galaxy (H2G2), How to Make a Text-Based Adventure - Commands and Parser.