-1

i am currently working on a text based game for class and cannot figure out how to add items to the game class. the game and moving between rooms has worked fine but this one part is confusing the hell out of me. here are the three classes that pertain to this sitch.

    public class Item{
private String itemName;

public Item(String itemName){
this.itemName = itemName;

}

public String getItemName(){
return itemName;
}
}

    import java.util.Set;
import java.util.HashMap;
import java.util.Iterator;
import java.util.ArrayList;
/**
 * Class Room - a room in an adventure game.
 *
 * This class is part of the "World of Zuul" application. 
 * "World of Zuul" is a very simple, text based adventure game.  
 *
 * A "Room" represents one location in the scenery of the game.  It is 
 * connected to other rooms via exits.  For each existing exit, the room 
 * stores a reference to the neighboring room.
 * 
 * @author  Michael Kölling and David J. Barnes
 * @version 2011.08.09
 */

public class Room 
{
    private String description;
    private HashMap<String, Room> exits;        // stores exits of this room.
    private HashMap<String, Item> itemList;
    private String name;
    private ArrayList<Item> items;


    /**
     * Create a room described "description". Initially, it has
     * no exits. "description" is something like "a kitchen" or
     * "an open court yard".
     * @param description The room's description.
     */


   public Room(String description) 
    {
        this.description = description;
        exits = new HashMap<String, Room>();
        items = new ArrayList<Item>();
    }
    /**
     * Define an exit from this room.
     * @param direction The direction of the exit.
     * @param neighbor  The room to which the exit leads.
     */
    public void setExit(String direction, Room neighbor) 
    {
        exits.put(direction, neighbor);
    }

    /**
     * @return The short description of the room
     * (the one that was defined in the constructor).
     */
    public String getShortDescription()
    {
        return description;
    }

    /**
     * Return a description of the room in the form:
     *     You are in the kitchen.
     *     Exits: north west
     * @return A long description of this room
     */
    public String getLongDescription()
    {
        String longDescription = "You are " + description + ".\n" + getExitString();
        if(items.size() > 0) {
            longDescription += "\nThe following things are here: \n";
            for (Item item : items) {
                longDescription += "\t" + item.getItemName() + "\n";
            }
        }
        return longDescription;

    }

    /**
     * Return a string describing the room's exits, for example
     * "Exits: north west".
     * @return Details of the room's exits.
     */
    private String getExitString()
    {
        String returnString = "Exits:";
        Set<String> keys = exits.keySet();
        for(String exit : keys) {
            returnString += " " + exit;
        }
        return returnString;
    }

    /**
     * Return the room that is reached if we go from this room in direction
     * "direction". If there is no room in that direction, return null.
     * @param direction The exit's direction.
     * @return The room in the given direction.
     */
    public Room getExit(String direction) 
    {
        return exits.get(direction);
    }

    /**
     * Add an item to the room 
     */
    public void addItem(Item i){
        items.add(i);
    }
    public String getItem() {

    //THIS IS THE METHOD I CANT FIGURE OUT
    }
}



    import java.util.ArrayList;
/**
 * 
 */

public class Game 
{
    private Parser parser;
    private Room currentRoom;
    private ArrayList<Item> inventory;
    private Item seaWeed;
    /**
     * Create the game and initialise its internal map.
     */
    public Game() 
    {
        createRooms();
        inventory = new ArrayList<Item>();
        parser = new Parser();
        seaWeed = new Item("Seaweed");
    }

    /**
     * Create all the rooms and link their exits together.
     */
   private void createRooms()
    {
        Room oceanGrotto, outsideFortress, fortressWallEast, fortressWallWest,
                insideFortress, secretTunnel, tunnelEnd, bavesStable, sunkenShip, 
                caviarUniversity, parkingLot, murkeyWaters, otterOasis,
                mysteriousCloud, dryLands, caveEntrance, caveInside,
                darkCrevace, crevaceDown, crevaceBottom;

        // create the rooms
        oceanGrotto = new Room("in the whales territory");
        outsideFortress = new Room("the gate of the sharks fortress");
        fortressWallEast = new Room("The eastern stone wall of the fortress");
        fortressWallWest = new Room("western stone wall of the fortress");
        insideFortress = new Room("inside the fortress");
        secretTunnel = new Room("inside the hidden tunnel");
        tunnelEnd = new Room("end of the tunnel");
        bavesStable = new Room("the seahorses house");
        sunkenShip = new Room("a sunken ship");
        caviarUniversity = new Room("Fish school");
        parkingLot = new Room("parking lot behind the school");
        murkeyWaters = new Room("Polluted waters");
        otterOasis = new Room ("Home of the otters");
        mysteriousCloud = new Room("a mysterious cloud above the water");
        dryLands = new Room("area above the ocean");
        caveEntrance = new Room("entrance to the abandoned cave");
        caveInside = new Room("inside  the cave");
        darkCrevace = new Room("a dark hole in the ground");
        crevaceDown = new Room ("deep in the dark crevace");
        crevaceBottom = new Room("the bottom of the crevace");

        // initialise room exits
        oceanGrotto.setExit("east", murkeyWaters);
        oceanGrotto.setExit("south", caviarUniversity);
        oceanGrotto.setExit("west", bavesStable);
        oceanGrotto.setExit("north", outsideFortress);

        //Add extra exit DOWN later
        bavesStable.setExit("east", oceanGrotto);
        bavesStable.setExit("south", sunkenShip);
        bavesStable.setExit("north", fortressWallWest);

        secretTunnel.setExit("north", tunnelEnd);
        secretTunnel.setExit("up", bavesStable);

        tunnelEnd.setExit("south", secretTunnel);

        fortressWallWest.setExit("south", bavesStable);
        fortressWallWest.setExit("east", outsideFortress);

        fortressWallEast.setExit("south", murkeyWaters);
        fortressWallEast.setExit("west", outsideFortress);

        //Add extra Exit North later
        outsideFortress.setExit("south", oceanGrotto);
        outsideFortress.setExit("east", fortressWallEast);
        outsideFortress.setExit("west", fortressWallWest);

        sunkenShip.setExit("north", bavesStable);
        sunkenShip.setExit("east", caviarUniversity);

        //Add extraExit south later
        caviarUniversity.setExit("north", oceanGrotto);
        caviarUniversity.setExit("east", otterOasis);
        caviarUniversity.setExit("west", sunkenShip);

        parkingLot.setExit("north", caviarUniversity);

        murkeyWaters.setExit("north", fortressWallEast);
        murkeyWaters.setExit("east", caveEntrance);
        murkeyWaters.setExit("south", otterOasis);
        murkeyWaters.setExit("west", oceanGrotto);

        otterOasis.setExit("north", murkeyWaters);
        otterOasis.setExit("east", darkCrevace);
        otterOasis.setExit("south", mysteriousCloud);
        otterOasis.setExit("west", caviarUniversity);

        mysteriousCloud.setExit("north", otterOasis);
        mysteriousCloud.setExit("up", dryLands);

        caveEntrance.setExit("east", caveInside);
        caveEntrance.setExit("west", murkeyWaters);

        caveInside.setExit("west", caveEntrance);

        darkCrevace.setExit("west", otterOasis);
        darkCrevace.setExit("down", crevaceDown);

        //Add extra exit DOWN later
        crevaceDown.setExit("up", darkCrevace);

        crevaceBottom.setExit("up", crevaceDown);

        dryLands.setExit("down", mysteriousCloud);

        //add items
        oceanGrotto.addItem(seaWeed);//THIS IS WHERE I AM TRYING TO USE THE METHOD 
        currentRoom = oceanGrotto;``


    }


    /**
     *  Main play routine.  Loops until end of play.
     */
    public void play() 
    {            
        printWelcome();

        // Enter the main command loop.  Here we repeatedly read commands and
        // execute them until the game is over.

        boolean finished = false;
        while (! finished) {
            Command command = parser.getCommand();
            finished = processCommand(command);
        }
        System.out.println("Thank you for playing.  Good bye.");
    }

    /**
     * Print out the opening message for the player.
     */
    private void printWelcome()
    {
        System.out.println();
        System.out.println("Welcome to the World of Zuul!");
        System.out.println("World of Zuul is a new, incredibly boring adventure game.");
        System.out.println("Type 'help' if you need help.");
        System.out.println();
        System.out.println(currentRoom.getLongDescription());
    }

    /**
     * Given a command, process (that is: execute) the command.
     * @param command The command to be processed.
     * @return true If the command ends the game, false otherwise.
     */
    private boolean processCommand(Command command) 
    {
        boolean wantToQuit = false;

        CommandWord commandWord = command.getCommandWord();

        switch (commandWord) {
            case UNKNOWN:
                System.out.println("I don't know what you mean...");
                break;

            case HELP:
                printHelp();
                break;

            case SWIM:
                swimRoom(command);
                break;

            case QUIT:
                wantToQuit = quit(command);
                break;

            case LOOK:
                System.out.println(currentRoom.getLongDescription());
                system.out.println(currentRoom.getItem());
                break;
        }
        return wantToQuit;
    }

    // implementations of user commands:

    /**
     * Print out some help information.
     * Here we print some stupid, cryptic message and a list of the 
     * command words.
     */
    private void printHelp() 
    {
        System.out.println("You are lost. You are alone. You wander");
        System.out.println("around the ocean flo'.");
        System.out.println();
        System.out.println("Your command words are:");
        parser.showCommands();
    }

    /** 
     * Try to go in one direction. If there is an exit, enter the new
     * room, otherwise print an error message.
     */
    private void swimRoom(Command command) 
    {
        if(!command.hasSecondWord()) {
            // if there is no second word, we don't know where to go...
            System.out.println("Swim where?");
            return;
        }

        String direction = command.getSecondWord();

        // Try to leave current room.
        Room nextRoom = currentRoom.getExit(direction);

        if (nextRoom == null) {
            System.out.println("The water is too polluted, you cant go there!");
        }
        else {
            currentRoom = nextRoom;

    }
}
    /** 
     * "Quit" was entered. Check the rest of the command to see
     * whether we really quit the game.
     * @return true, if this command quits the game, false otherwise.
     */
    private boolean quit(Command command) 
    {
        if(command.hasSecondWord()) {
            System.out.println("Quit what?");
            return false;
        }
        else {
            return true;  // signal that we want to quit
        }
    }

}

sorry if this wasnt formatted correctly its my first time using this site

user3527058
  • 23
  • 1
  • 5
  • Can you please isolate the exact line of code that you are having a problem with? – CodeCamper Apr 12 '14 at 15:37
  • Well, you have an `ArrayList` of `Item` objects, and you have a `HashMap` of `Item` objects as well. Do these store the same thing? Why do you need two different containers for the same object? And what do you mean by `getItem()` in the `Room` class? It's kind of hard to understand your code without you explaining your whole design. –  Apr 12 '14 at 15:39

1 Answers1

0
public String getItem(int i) {
    if(i<items.size()&&>=0)
        return items.get(i).toString();
    else
        return "item does not exist";
}
hichris123
  • 10,145
  • 15
  • 56
  • 70
CodeCamper
  • 6,609
  • 6
  • 44
  • 94