HTW Berlin Medieninformatik HTW Berlin
Fachbereich 4
Internationaler Studiengang
Internationale Medieninformatik (Bachelor)
Info 1: Informatik I
Summer Term 2014

Laboratory 11 : Pick up and Carry

Pre-lab

This week's lab work will finish up your project.

What to Bring to Lab

Please bring these exercises printed out or written out with you to lab. Please have your name on your page. You may do this together with 1 or 2 others, but each of you should implement the game yourselves. You do the prelab for the game you received from your neighbor last week.

P1. Here are some informal specifications: A player must be able to pick up items from the current room. They can carry any number of items, but only up to a maximum weight limit. Some items are too heavy to be picked up. The player can drop one or all items in the current location. What changes are you going to have to make to your game? Don't program them yet, just specify the changes that need to be made to each class in writing.

P2. There are (at least) two ways to make an item too heavy to pick up. We can just make them very heavy, and define what the maximum weight a player can pick up is. Or we can have a Boolean field canBePickedUp. Which solution do you think is better? Why?

P3. What sort of a data structure are you going to use to keep track of all the items a player has? Why?

Post-Lab, AKA  What To Turn In

Your completed assignment, submitted in Moodle as a pdf, should include:

This lab assignment is due by July 14, 2014, 22.00 at the latest.


Assignment

Picking up Items

  1. Switch your project back with the person you swapped with last week. Read through the changes and note down in your report what was changed. Are you happy with the changes?
  2. If not already there, make sure there is an Item class in the project you get back. Items have names, descriptions, and weights. Make sure you can print out an item's description.
  3. Implement a command "take" that has the name of the item as the second parameter. What happens if the item to be taken is not in the room?
  4. Implement the command "drop" to get rid of an item. "drop all" should do just that.

Carrying Items

  1. Implement the field to store the items currently carried by the player. How is the maximum weight determined? Does "take" know how to deal with this? You will probably need a method to ask if the current item can be taken by the player.
  2. Implement an "items" command that prints out all items currently carried with their weights, and the total weight.

Add a Non-Playing Character

  1. Create a class that represents a non-playing character. This could be a ghost, or a monster, or just someone standing around. Add one to one of your rooms. If a room has a NPC, this should be noted when printing out the description of the room.
  2. Add a command "ask" to speak with the NPC. If there is none in the room, then say so, otherwise the character needs to say something interesting.

For the Bored - something to do over the summer

  1. Add a magic cookie item to a room. Add an "eat cookie" command. If a player finds and eats the magic cookie, it increases the weight that the player can carry. You may adapt this to your game scenario
  2. Add some form of time limit to your game. If a certain task is not completed in a specified time (or number of steps through the rooms), the player loses.
  3. Implement a trapdoor - one that only goes one way. Don't forget to sort out what happens with "back" on this exit.
  4. Have your NPC move to a random room.
  5. (For the really bored) Add a beamer to the game. It can be charged, that is, it remembers the location it was charged in. And it can be fired, returning the player automatically to the remembered location. Remember to sort out back :)
  6. (To keep the bored busy over the summer break) Add locked doors. Players have to find the key and unlock them before they can continue. Add a transporter room that transports the player to a random room. Add non-playing characters to the game - they are similar to items, but they speak to you when you meet them in a room. They may give you help if you are nice to them. Add moving characters. Add monsters. Now fix the processCommand method, which is probably an unholy mess by now. Refactor and improve the design to make it easy to add new commands.

Writeup

Submit your writeup as your post-lab to the Moodle area by the final date given on the schedule.

Have a great summer! You've learned a lot about programming in these past few weeks. Keep playing with your game over the break so you don't forget everything while baking in the sun!


Some rights reserved. CC-BY-NC-SA Prof. Dr. Debora Weber-Wulff - CC-BY-NC-SA
Questions or comments: <weberwu@htw-berlin.de>


The exercises are adapted from Objects First with Java, A Practical Introduction Using BlueJ. David Barnes & Michael Kölling, 2011