CSC72003 Assignment 2: Specifications
CSC72003 Assignment 2: Specifications
CSC72003 Assignment 2: Specifications
Specifications
Your task is to complete various exercises in BlueJ, using the Java language, and to submit these via
the MySCU link created for this purpose.
Getting Help
Who can you get help from? Use this diagram to determine from whom you may seek help with
your program.
Online
Lecturer Tutors
Forums
Students
Relatives Hired coders
outside unit
Private
Classmates Other
Tutors
Encouraged
Attribution Required
Ask tutor
Not acceptable
Part 1:
• Create a folder called username-A2. For example, mine would be nfrancis -A2.
• Copy the zuul-better project in chapter 8 of the book projects to your username-A2
folder.
• Create a word document called username-A2-documentation. For example, mine
would be nfrancis-A2- documentation. Add your full name and student id to the
footer. You will lose marks if you do not do this. Save this word document to your
username-A2 folder.
After you have set up your assignment open the zuul-better project In BlueJ, create a new
instance of the Game class, run the play method and familiarize yourself with the game.
• Review the code style guide in topic 7 as this is the style you will be required to use
in your assignment.
• Download chapter 6 of the text book from topic 7 on mySCU as you will need this for
the assignment.
NOTE: When you submit your assignment, you will need to zip up your username-A2 folder
and upload onto mySCU
Using the given zuul game as a starting point, you must design your own game. In the
tutorial, you can ask your tutor for advice.
If you find it difficult to visualize this sort of game scenario, try modelling your game on
some familiar real-world location. If you need additional inspiration, you can try playing the
original Colossal Cave Adventure game.
• Your game scenario must have at least ten (10) different rooms.
• Your game scenario must have at least six (6) types of exits – e.g., north, south, east,
west, up, down and any others you require. This requirement does NOT mean that
each room must have 6 exits.
• Your game scenario must include at least six (6) items that the player could find, pick
up and potentially use.
• Your game must have some way for the player to win. Most likely, this will be by
achieving some goal such as finding a particular item, surviving for some specified
number of moves, or exiting a particular room — anything sensible for your game.
Documentation
Write a brief description of your game in your word document. You must:
• Describe your game including the back story and the setting
• List the items in the game
• Draw a map for your game scenario. You must:
o Label the rooms
o Label the exits (connections between rooms)
o Specify the locations of the items
• Explain how the player wins
Part 2:
Programming exercise 1
• Update the comments at the beginning of the Game class, the Room class and the
message displayed by the printWelcome and printHelp method so that they
describe your game.
• Update the Game and Room class so that it creates the rooms and exits that you
invented for your game. You do not need to add any items to your game yet. You will
add items later.
Programming exercise 2
Your game scenario requires that there be items positioned throughout the world that the
player can pick up and possibly use. An item sounds like something that should be
represented by an object! So create an Item class to represent the items in your game. You
will need to decide what fields your Item class needs to have, what parameters the
constructor will require and what methods the class will have. At a minimum, items will
have a name and a description. However, items may have many other attributes that make
sense for your game (e.g. weight, colour, value, destructive power ..)
Programming exercise 3
Now that there is a class for representing Items we need a way to allow the rooms to
contain an item. Modify the Room class so that one item can be added to or removed from
the room. You will need to think about what fields and methods to add to the Room class.
Also, think about what the methods that you add should do when an attempt is made to
add an item to a room that already contains an item, or an attempt is made to remove an
item from a room that does not contain an item.
Programming exercise 4
Now that a room can contain an item, when the player enters a room he/she should be told
about the item in that room (if there is one). Modify the appropriate code so that if the
player enters a room containing an item, the name and description of the item are displayed
along with the description of the room and the list of exits.
Programming exercise 5
Edit the code in the Game class so that the items for your game are created and added to
the appropriate rooms at the start of the game. Recall that your game must include at least
six items. Be sure to test any methods that you add or modify.
Play the game to ensure that your items are appearing in the rooms.
Part 3:
Now that rooms can contain items and a player will know when they enter a room with an
item, it would be nice if the player could pick up and carry items. Add functionality to the
Player class that will allow the player to pick up and drop items. The player should be able to
carry any number (i.e. a collection) of items.
Programming exercise 6
Modify the Game class so that it will recognize the command take. When the user enters
the "take" command, the item in the current room, if there is one, should be added to the
items that the player is carrying, and a message should be printed indicating that the player
has taken the item. If there is no item in the current room the take command should print
an error message. Be sure to test any methods that you add or modify. (Hint: Remember
that one task of the Game constructor is to "teach" the CommandReader what words are
valid commands. Thus, you will need to make a change in Game's constructor if you want to
introduce a new command.)
Programming exercise 7
Modify the Game class so that it will recognize the command inventory. When the user
types "inventory" the game prints the names of the items that the player is currently
carrying. You should think carefully about where the list of item names should be generated.
(Consider the fact that the player is carrying the items and think about how the list of exits
for a room is generated and displayed.)
Programming exercise 8
Add support to the game for a drop command so that the player can drop an item by name
(e.g. "drop book"). The dropped item should appear in the current room. If the current room
already contains an item, the drop command should print an error message indicating that
the room is full and the player should continue to carry the item.
Programming exercise 9
Implement at least two locked doors to your game. The player needs to find (or otherwise
obtain) a key/item to open a door. You may incorporate the drop command or create a new
“use” command to open the door. Adjust your winning condition if necessary.
Programming exercise 10
Notice that when you use the help command take, inventory and drop do not appear as
command words. Modify the printHelp method of the Game class so that it automatically
displays any new command words that are added to the game. Do not hard code the words
in the printHelp method. Hint: you should modify the CommandWords class to do this.
Programming exercise 11
Add some form of time limit to your game. If a certain task is not completed in a specified
time, the player loses. A time limit can easily be implemented by counting the number of
moves or the number of entered commands. It does not have to be real-time.
Play the game to be sure the modified help command works - celebrate!
THIS IS END OF THE REQUIRED PART OF THE ASSIGNMENT. Below are bonus
enhancements:
If you completed all of the above parts, you may complete any or all of the following
exercises for extra credit. The exercises can be found in the provided textbook chapter from
topic 7 on mySCU
• Explicitly state which of these bonus problems you have done in your word
document or they will not be marked.
• Provide the explanation which refers to the code (class and line number) you have
written for these bonus exercises in your word document or they will not be
marked.
• Implement a back command. This command does not have a second word.
Entering the back command takes the player into the previous room he/she was in.
• Add a transporter room. Whenever the player enters this room, he/she is randomly
transported into one of the other rooms. Note: Coming up with a good design for
this task is not trivial. Should you decide to implement this feature, you might have
to redesign the map.
• Allow each room to contain a collection of items (rather than just one).
• Modify the game so that only a list of the names of the items in a room are displayed
when the player enters. Then add a look command that allows the player to look at
an item in the current room by name. For example, if the player types look book and
there is an item named "book" in the current room, your game should display the
description of that item. If there is no such item, your game should display an error
message. If the player enters the look command with no second word, it should
display the entire description of the room, its exits and the names of any items
again.
• Implement the back command so that using it repeatedly takes you back several
rooms, all the way to the beginning of the game if used often enough. Use a Stack to
do this. (You may need to find out about stacks. Look at the Java library
documentation.)
• Add characters to the game. Characters are similar to items, but they can talk. They
speak some text when you first meet them, and they may give you some help if you
give them the right item.
• Add moving characters. These are like other characters, but every time the player
types a command, these characters can move into an adjoining room. Hints:
You can add the following method to the Room class to randomly choose an exit for the
character when it moves. Note that exits are the field (of type HashMap) that contains the
exits for the room - if you used a different field name, use that name instead.
/**
*/
Your test cases for character movement do not need to check the location of the character
after moving (because characters may move randomly).