Text Adventure Game Development
In this assignment, students are tasked with designing a
text-based adventure game Links to an external site.
. This game should utilize the Python essentials covered thus far, including, but not limited to:
- Strings and String Manipulation
- User-Defined Functions and Objects (variables)
- User Input and Input Handling
- Conditional and Nested Conditional Statements (if/elif/else)
- Loops (for/while)
- Controlling for Errors (try/except)
The working version of the game should include:
An executable script (a script that runs from beginning to end upon execution) that includes:
- a game that can be successfully completed within a maximum of 3 minutes (i.e., you can win the game in 3 minutes or less)
- for a passing grade, your text adventure game must include a minimum of:
3 stages (maximum of 5 stages)
5 defined variables
1 list
1 for loop
1 while loop
3 nested conditional statements (all must include an else clause)
1 win() function (Executed whenever a user wins the game. There must be only one win function)
1 fail() function (Executed whenever a user loses the game. There must be only one fail function) - A description at the beginning of game that:
Is no more than 300 words
Introduces the story, game, and its objective
Identifies any bugs that are not yet worked out
Requirements and Restrictions
- Your game must be based on a book, movie, or TV show. Make sure to provide a source in A.P.A. format.
- The only programming language you may use is Python (no JavaScript, C, or other languages are allowed).
- Global variables may NOT be used (avoid things such as combat engines and/or character attributes such as health points).
- No use of class structures or other object-oriented programming structures (you must stick to user-defined functions).
- You are not allowed to pass things between the stages of your game (stages should not inherit arguments from other stages; no optional or mandatory arguments). For example, a key found in Stage 1 cannot be carried forward to Stage 2. However, you can statically write this into your text if it is required for your story.
Deliverables
- A working version of your game in the following format:
Jupyter Notebook (.ipynb format)
One markdown cell containing the description
One code cell containing the game (points will be deducted if the submission contains more than one code cell) - The code submitted as a .txt file (copy/paste the code into a .txt file). Points will be deducted if the submission is not a .txt file.
{
“cells”: [
{
“cell_type”: “markdown”,
“metadata”: {
“deletable”: false,
“editable”: false,
“run_control”: {
“frozen”: true
}
},
“source”: [
“# Game Assignment Starter Code\n”,
“\n”,
“The purpose of this code is to demonstrate how to construct a structure based on a game map. In this starter code, we will assume that we have three rooms on our game map. The assignment requirements also specify that we have a fail function. Therefore, we will be creating a simple skeleton containing the following elements:\n”,
“* room_1\n”,
“* room_2\n”,
“* room_3\n”,
“* fail\n”,
“\n”,
“Our map can be visualized as follows:\n”,
“
\n”,
“\n”,
“~~~\n”,
” room_1 –> room_2 –> room_3 (win)\n”,
” | |\n”,
” `———-`——> fail\n”,
“~~~\n”,
“\n”,
“
\n”,
“\n”,
“## Part 1: Building up one room at a time (no fail function)”
]
},
{
“cell_type”: “code”,
“execution_count”: null,
“metadata”: {
“deletable”: false,
“editable”: false
},
“outputs”: [],
“source”: [
“#########################################################\n”,
“# Constructing room_1 and calling it to start the game\n”,
“#########################################################\n”,
“\n”,
“def room_1():\n”,
” print(\”You’re in room_1!\\n\”)\n”,
” input(‘
” \n”,
“\n”,
“room_1() # This starts the game”
]
},
{
“cell_type”: “markdown”,
“metadata”: {
“deletable”: false,
“editable”: false,
“run_control”: {
“frozen”: true
}
},
“source”: [
“
”
]
},
{
“cell_type”: “code”,
“execution_count”: null,
“metadata”: {
“deletable”: false,
“editable”: false
},
“outputs”: [],
“source”: [
“#########################################################\n”,
“# Adding room_2 and linking it to room_1\n”,
“#########################################################\n”,
“\n”,
“def room_1():\n”,
” print(\”You’re in room_1!\\n\”)\n”,
” input(‘
“\n”,
” room_2() # This moves us into room_2\n”,
“\n”,
“\n”,
“def room_2():\n”,
” print(\”You’re in room_2!\\n\”)\n”,
” input(‘
“\n”,
” \n”,
“room_1() # Calling the first function in our map will start our game”
]
},
{
“cell_type”: “markdown”,
“metadata”: {
“deletable”: false,
“editable”: false,
“run_control”: {
“frozen”: true
}
},
“source”: [
“
”
]
},
{
“cell_type”: “code”,
“execution_count”: null,
“metadata”: {
“deletable”: false,
“editable”: false
},
“outputs”: [],
“source”: [
“#########################################################\n”,
“# Adding room_3 and linking it to room_2\n”,
“#########################################################\n”,
“\n”,
“def room_1():\n”,
” print(\”You’re in room_1!\\n\”)\n”,
” input(‘
” \n”,
” room_2() # This moves us into room_2\n”,
“\n”,
“\n”,
“\n”,
“def room_2():\n”,
” print(\”You’re in room_2!\\n\”)\n”,
” input(‘
” \n”,
” room_3() # This moves us into room_3\n”,
“\n”,
“\n”,
“\n”,
“def room_3():\n”,
” print(\”You’re in room_3! You win!\\n\”)\n”,
” input(‘
“\n”,
“room_1() # Calling the first function in our map will start our game”
]
},
{
“cell_type”: “markdown”,
“metadata”: {
“deletable”: false,
“editable”: false,
“run_control”: {
“frozen”: true
}
},
“source”: [
“
\n”,
“\n”,
“
\n”,
“\n”,
“
Part 2: Adding in a fail function and ways to fail
”
]
},
{
“cell_type”: “code”,
“execution_count”: null,
“metadata”: {
“deletable”: false,
“editable”: false
},
“outputs”: [],
“source”: [
“def room_1():\n”,
” print(\”You’re in room_1!\\n\”)\n”,
” input(‘
” \n”,
” print(\”Press 1 to go to room_2.\”)\n”,
” print(\”Press 2 to fail.\”)\n”,
” \n”,
” choice = input(\”> \”)\n”,
” \n”,
” if choice == ‘1’:\n”,
” room_2() # This moves us into room_2\n”,
“\n”,
” elif choice == ‘2’:\n”,
” fail() # This moves us into fail\n”,
” \n”,
” else:\n”,
” print(\”Invalid entry. Please try again.\\n\”)\n”,
” room_1() # Brings us back to the beginning of room_1 to try again\n”,
” \n”,
“\n”,
“\n”,
“def room_2():\n”,
” print(\”You’re in room_2!\\n\”)\n”,
” input(‘
” \n”,
” print(\”Press 1 to go to room_3.\”)\n”,
” print(\”Press 2 to fail.\”)\n”,
” \n”,
” choice = input(\”> \”)\n”,
” \n”,
” if choice == ‘1’:\n”,
” room_3() # This moves us into room_2\n”,
“\n”,
” elif choice == ‘2’:\n”,
” fail() # This moves us into fail\n”,
” \n”,
” else:\n”,
” print(\”Invalid entry. Please try again.\\n\”)\n”,
” input(‘
” \n”,
” room_2() # Brings us back to the beginning of room_1 to try again\n”,
“\n”,
“\n”,
“\n”,
“def room_3():\n”,
” print(\”You’re in room_3! You win!\\n\”)\n”,
” input(‘
“\n”,
“\n”,
“\n”,
“def fail():\n”,
” print(\”You’ve failed, but thanks for playing!\”)\n”,
” input(‘
“\n”,
“\n”,
“room_1() # EVERYTHING goes before this clause\n”
]
},
{
“cell_type”: “markdown”,
“metadata”: {
“deletable”: false,
“editable”: false,
“run_control”: {
“frozen”: true
}
},
“source”: [
“
\n”,
“\n”,
“
\n”,
“\n”,
“
Part 3: Adding more functionality to the game
\n”,
“Let’s update our game as follows:\n”,
“\n”,
“* room_1\n”,
” * nested conditional\n”,
“* room_2\n”,
“* room_3\n”,
” * while loop\n”,
“* fail\n”,
“\n”,
“Our game map can be visualized as follows:\n”,
“
\n”,
“\n”,
“~~~\n”,
” room_1 <--> room_2 <--> room_3 (win)\n”,
” *nc | | *w\n”,
” `———-`——> fail\n”,
“~~~\n”,
“\n”,
“
”
]
},
{
“cell_type”: “code”,
“execution_count”: null,
“metadata”: {
“deletable”: false,
“editable”: false,
“scrolled”: true
},
“outputs”: [],
“source”: [
“## Tip ##\n”,
“# make sure to make ample comments throughout your code\n”,
“\n”,
“\n”,
“def room_1():\n”,
” print(\”You’re in room_1!\\n\”)\n”,
” input(‘
” \n”,
” print(\”Press 1 to go to room_2.\”)\n”,
” print(\”Press 2 to fail.\”)\n”,
” \n”,
” choice = input(\”> \”)\n”,
” \n”,
” if choice == ‘1’:\n”,
” print(\”Then you must answer this question.\\n\”)\n”,
” \n”,
” print( \n”,
“\”\”\”\n”,
“What’s bigger, an elephant or the moon?\n”,
“1) an elephant\n”,
“2) the moon\n”,
” \n”,
“\”\”\”)\n”,
” \n”,
” choice = input(\”> \”)\n”,
” \n”,
” # Start of nested conditional\n”,
” if choice == ‘1’:\n”,
” print(\”That’s incorrect.\”)\n”,
” \n”,
” fail()\n”,
” \n”,
” \n”,
” \n”,
” elif choice ==’2′:\n”,
” print(\”That’s correct! Please enjoy room_2!\”)\n”,
” input(‘
” \n”,
” room_2()\n”,
” \n”,
” # End of nested conditional\n”,
” \n”,
” \n”,
” elif choice == ‘2’:\n”,
” fail()\n”,
” \n”,
” else:\n”,
” print(\”Invalid entry. Please try again.\\n\”)\n”,
” input(‘
” room_1()\n”,
” \n”,
“\n”,
“\n”,
“def room_2():\n”,
” print(\”You’re in room_2!\\n\”)\n”,
” input(‘
” \n”,
” print(\”Press 1 to go to room_3.\”)\n”,
” print(\”Press 2 to fail.\”)\n”,
” \n”,
” choice = input(\”> \”)\n”,
” \n”,
” if choice == ‘1’:\n”,
” room_3()\n”,
“\n”,
” elif choice == ‘2’:\n”,
” fail()\n”,
” \n”,
” else:\n”,
” print(\”Invalid entry. Please try again.\\n\”)\n”,
” room_2()\n”,
“\n”,
“\n”,
“\n”,
“def room_3():\n”,
” print(\”You’re in room_3!\\n\”)\n”,
” print(\”All you have to do to win is press any key three times.\\n\”)\n”,
” \n”,
” presses = 3\n”,
” \n”,
” while presses > 0:\n”,
” input(‘
” presses -= 1\n”,
” \n”,
” print(\”You win!\”)\n”,
“\n”,
“\n”,
“\n”,
“def fail():\n”,
” print(\”You’ve failed, but thanks for playing!\”)\n”,
” input(‘
“\n”,
“\n”,
“room_1()”
]
},
{
“cell_type”: “markdown”,
“metadata”: {
“deletable”: false,
“editable”: false,
“run_control”: {
“frozen”: true
}
},
“source”: [
“
”
]
}
],
“metadata”: {
“kernelspec”: {
“display_name”: “Python 3”,
“language”: “python”,
“name”: “python3”
},
“language_info”: {
“codemirror_mode”: {
“name”: “ipython”,
“version”: 3
},
“file_extension”: “.py”,
“mimetype”: “text/x-python”,
“name”: “python”,
“nbconvert_exporter”: “python”,
“pygments_lexer”: “ipython3”,
“version”: “3.8.5”
},
“toc”: {
“base_numbering”: 1,
“nav_menu”: {},
“number_sections”: false,
“sideBar”: true,
“skip_h1_title”: false,
“title_cell”: “Table of Contents”,
“title_sidebar”: “Contents”,
“toc_cell”: false,
“toc_position”: {},
“toc_section_display”: true,
“toc_window_display”: false
},
“varInspector”: {
“cols”: {
“lenName”: 16,
“lenType”: 16,
“lenVar”: 40
},
“kernels_config”: {
“python”: {
“delete_cmd_postfix”: “”,
“delete_cmd_prefix”: “del “,
“library”: “var_list.py”,
“varRefreshCmd”: “print(var_dic_list())”
},
“r”: {
“delete_cmd_postfix”: “) “,
“delete_cmd_prefix”: “rm(“,
“library”: “var_list.r”,
“varRefreshCmd”: “cat(var_dic_list()) ”
}
},
“types_to_exclude”: [
“module”,
“function”,
“builtin_function_or_method”,
“instance”,
“_Feature”
],
“window_display”: false
}
},
“nbformat”: 4,
“nbformat_minor”: 2
}