2014-04-12 2 views
-1

현재 수업을 위해 텍스트 기반 게임을하고 있으며 게임 클래스에 항목을 추가하는 방법을 알 수 없습니다. 게임과 방 사이에서 움직이는 것은 잘 움직였다. 그러나이 1 개의 일부는 나에서 지옥을 혼란스럽게하고있다. 여기에이 세치기와 관련된 세 가지 수업이 있습니다. 텍스트 기반 자바 게임에 항목 추가하기

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 
     } 
    } 

} 

죄송

이 그런게 당신이에 문제가있는 코드의 정확한 라인을 분리시겠습니까이 사이트

+0

를 사용하여 올바르게 내 처음으로 포맷 된 경우? – CodeCamper

+0

글쎄, 당신은'Item' 객체의'ArrayList'를 가지고 있고'Item' 객체의'HashMap'도 가지고 있습니다. 이것들은 같은 것을 저장합니까? 왜 같은 객체에 대해 두 개의 다른 컨테이너가 필요합니까? 그리고'Room' 클래스의'getItem()'은 무엇을 의미합니까? 전체 디자인을 설명하지 않으면 코드를 이해하기가 어렵습니다. – noobProgrammer

답변

0
public String getItem(int i) { 
    if(i<items.size()&&>=0) 
     return items.get(i).toString(); 
    else 
     return "item does not exist"; 
} 
관련 문제