Based on analysis of the text adventure game, and using the requirements described in my previous post, I’ve come up with my initial stab at an object-oriented design for this problem. I’ve broken down the responsibilities into four main classes: Game, Item, Location and Player.
Using UML notation this appears as:
This is the class that does the brunt of the work and is responsible for processing commands, handling player movement and managing player inventory and scoring. The protected methods drop, go, help, inventory, look, score and take handle the respective commands sent by the player. The main public methods are create, which creates an instance of the game, and process command, which takes a command entered by the player and interprets it to determine what, if any, action should be taken.
An array of Item objects that are available within the game.
An array of Item objects that are used in the game.
An instance of a Player object, used to track player’s location and inventory
Takes an XML string as an argument and populates the initial game attributes.
Takes a string as an argument and performs the specified action. For example, command “go north” will move the player to the location north of their current location. The command string may consist of a single word, such as “help”, or a combination of words such as “take candelabra”. If the command is not supported, the message “That’s not a verb I recognize” is returned to the player. Otherwise, the corresponding method, detailed below, is called.
Takes an item name as an argument. If the item exists in the player’s inventory then the item is removed from their inventory, added to the items array of the current location, and the message “Dropped” is returned to the player. Otherwise the message “You can’t see any such thing” is returned to the player.
Takes a direction as an argument and returns an instance of a Location corresponding to that direction, or null if not found. The new location is determined using the direction as a look-up key into the exits array of the player’s current location. If there are no exits in the requested direction, the message “You can’t go that way” is returned to the user. Otherwise, the player’s current location is changed to the new location, and a summary of the location (equivalent to the result of the “look” command) is returned to the player.
Returns a message to the player indicating all available commands. The hint property of the player’s current location is also appended to the message that is returned to the player.
Returns a message to the player listing the items currently in their inventory. If the player is not carrying any items, the message “You’re carrying nothing” is returned to the player. Otherwise the message “You’re carrying”, followed by a list of the items in the player’s inventory is returned.
Returns a summary of the current location to the player, including location name, description, available exits and items found at this location.
Returns a message to the player indicating their current points out the total available points.
Takes the name of an item as an argument and adds the item to the player’s inventory. If the item doesn’t exist at the current location, the message “You can’t see any such thing” is returned to the player. Otherwise, the item is added to the player’s inventory and the message “Taken” is returned to the player.
The Item class represents an object in the game, like a chalice or candelabra. Items can be moved from one location to another or they may be placed in the players inventory. There are no methods defined at this point, although we’ll revisit this later when custom actions are implemented.
The name of the item, e.g. “Golden Chalice”
A short description of the item, e.g. “An elaborately decorated gold chalice.”
The Location class represents a place in the game, such as the foyer, or dining room, in our example game. A location has a name and a description and may have items and exits as well.
The name of the location, e.g. “Dining Room”
A short description of the location, e.g. “You are in the dining room.”
A message that will be displayed to the player when they enter the “help” command at this location. May be left blank.
An array of Item objects found at the location.
An array of Locations whose keys are the compass directions and up / down representing available exits from the location.
Takes the name of the string as an argument and returns true if the item exists in this location, otherwise it returns false.
Adds an Item instance to the location item array.
Removes an item from the location item array.
Takes a direction, e.g. North, South, etc. as an argument and returns true if the location has an exit for that direction.
Takes a direction as an argument and returns an instance of a Location corresponding to that direction, or null if not found.
The Player class manages the player’s location and inventory of items.
The location of the player in the game, an instance of a Location.
An array of Item objects in the player’s possession.
Checks player’s inventory to determine whether item exists, returns true if found otherwise returns false.
Adds an item to the player’s inventory.
removes an item from the player’s inventory.
Sets the player’s currentLocation to the location specified.
It should now be fairly straightforward to implement this design in code. The nice thing is that the descriptions can also be carried directly over as comments within the code.
Leave a Comment
Your email address will not be published. Required fields are marked *