【发布时间】:2014-11-26 05:01:51
【问题描述】:
import java.util.ArrayList;
import java.util.HashMap;
/**
* Write a description of class Game here.
*
* @author (Christopher )
* @version (a version number or a date)
*/
public class Game
{
ArrayList <Item> myArray;
HashMap <String, Room> myNeighbor;
Room currentRoom;
String currentMessage;
Room hallway, kitchen, bathroom, livingRoom, upstairsLobby, blakesRoom, jaysRoom, mikesRoom;
Item crumbs, eggs, cellPhone, textBooks, poptarts, pizzaRolls, clothes, chips;
public Game()
{
ArrayList <Item> myArray = new ArrayList();
currentRoom = hallway;
}
private void createRooms()
{
myNeighbor = new HashMap <String, Room> ();
crumbs = new Item("Crumbs", "small crumbs of some kind of food", 100);
eggs = new Item("Raw Eggs", "a couple of raw eggs still contained within their egg shells", 1100);
cellPhone = new Item("Cell Phone", "Mike's cell phone he must have forgotten here...", 0);
textBooks = new Item("Textbooks", "Jay's textbooks, because he can't use his bedroom to store his stuff", 0);
poptarts = new Item("Pop Tarts", "an un-opened box of chocolate pop tarts that someone must have left behind...", 1500);
pizzaRolls = new Item("Pizza Rolls", "cooked steaming pizza rolls piled high", 2000);
clothes = new Item("Clothes", "clothes, a lot of clothes all over the floor and all over the room, who knows if they're clean or not...", 0);
// miningTools = new Item("Mining Tools", "pickaxes, drills, and everything else you need to extract rocks and minerals from the earth's crust", 100);
chips = new Item("Chips", "chip bag hidden away that is only half full now", 400);
hallway = new Room("in a dark hallway with crumbs scattered over the ground", crumbs);
kitchen = new Room("in a kitchen with raw eggs lying on the counter tops", eggs);
bathroom = new Room("in a bathroom with a stand up shower, a washer, a drier, and Mike's cell phone left behind laying on the counter", cellPhone);
livingRoom = new Room("in a living room with Jay's textbooks all over the room", textBooks);
upstairsLobby = new Room("in a lobby at the top of the stairs with a box of pop tarts on the ground", poptarts);
blakesRoom = new Room("in a dark room with towers of pizza rolls covering the desk and scattered across the bed", pizzaRolls);
jaysRoom = new Room("in a cluttered room with clothes covering every inch of the floor and nothing hanging on the walls", clothes);
mikesRoom = new Room("in a bed room with mining tools and a bag of chips hidden underneath a pillow on the bed", chips);
hallway.addNeighbor("north", kitchen);
hallway.addNeighbor("west", upstairsLobby);
hallway.addNeighbor("east", livingRoom);
kitchen.addNeighbor("west", bathroom);
kitchen.addNeighbor("south", hallway);
bathroom.addNeighbor("east", kitchen);
livingRoom.addNeighbor("west", hallway);
upstairsLobby.addNeighbor("north", jaysRoom);
upstairsLobby.addNeighbor("west", blakesRoom);
upstairsLobby.addNeighbor("east", mikesRoom);
upstairsLobby.addNeighbor("south", hallway);
blakesRoom.addNeighbor("east", upstairsLobby);
jaysRoom.addNeighbor("south", upstairsLobby);
mikesRoom.addNeighbor("west", upstairsLobby);
}
private void setWelcomeMessage()
{
currentMessage = "You are locked inside of a campus view apartment. The goal of this game is to eat 5000 calories to maximize gains so you can leave. You will have to navigate around the apartment searching for food and eating it to obtain your calorie goal.";
}
public String getMessage()
{
return currentMessage;
}
public void help()
{
String message1 = "If you are short on calories, be sure to check the bedrooms";
String message2 = "Don't forget to go upstairs";
String reminder = "Remember the goal of the game to get 5000 calories";
}
public void look()
{
currentMessage = currentRoom.getLongDescription();
}
public void move(String direction)
{
String msg;
Room nextRoom = currentRoom.getNeighbor(direction);
if (nextRoom == null){
msg = "You can't go in that direction";
}
else{
currentRoom = nextRoom;
msg = currentRoom.getLongDescription();
}
}
//
// public boolean gameOver()
// {
// int count = 0;
//
// for(int i = 0; i < myArray.size(); i++ ){
// count += myArray.indexOf(i).getCalories(;
// }
// if(count == 5000){
// currentMessage = "You have won!";
// return true;
// }
// else{
// return false;
// }
// }
public void take()
{
if(currentRoom.hasItem() == false){
currentMessage = "there is not an item in the room to take";
}
else if(currentRoom.getItem().getCalories() > 100){
currentMessage = "there is not enough calories in here for you to increase gains";
}
else{
currentRoom.addItem(currentRoom.getItem());
currentMessage = "you are now holding the item";
}
}
private Item checkForItem(String name)
{
for(int i = 0; i < myArray.size(); i++ ){
if(i + "" == name){
return currentRoom.getItem();
}
}
return null;
}
public void drop(String name)
{
for(int i = 0; i < myArray.size(); i++ ){
Item temp = myArray.remove(i);
if(i + "" == name && currentRoom.hasItem() == false){
myArray.remove(i);
currentRoom.addItem(temp);
currentMessage = "you have successfully dropped the item in the room";
}
else if(currentRoom.hasItem() == true)
{
currentMessage = "the room already has an item";
}
else if(i +"" != name)
{
currentMessage = "you are not holding that item";
}
}
}
public void show()
{
if(myArray.size() > 0){
currentMessage = "" + myArray;
}
}
public static void main(String ar
System.out.println(g.getMessage());
g.move("west");
System.out.println(g.getMessage());
g.take();
System.out.println(g.getMessage());
g.move("west");
System.out.println(g.getMessage());
g.move("east");
System.out.println(g.getMessage());
g.move("south");
System.out.println(g.getMessage());
g.move("west");
System.out.println(g.getMessage());
}
}
**************************************************************************************************
import java.util.HashMap;
/**
* Write a description of class Room here.
*
* @author (Christopher Saikalis)
* @version (a version number or a date)
*/
public class Room
{
private String description;
private Item item;
private HashMap <String, Room> myNeighbor;
public Room (String pDescription)
{
description = pDescription;
item = null;
HashMap <String, Room> myNeighbor = new HashMap <String, Room> ();
}
public Room (String pDescription, Item pItem)
{
description = pDescription;
item = pItem;
}
public String getDescription()
{
return description;
}
public Item getItem()
{
return item;
}
public void addItem(Item i)
{
item = i;
}
public boolean hasItem()
{
if (item != null)
return true;
else
return false;
}
public void addNeighbor(String pDirection, Room r)
{
myNeighbor.put(pDirection, r);
}
public Room getNeighbor(String pDirection)
{
Room next = myNeighbor.get(pDirection);
return next;
if(next != null){
return next;
}
else{
return null;
}
}
public Item removeItem()
{
Item temp;
temp = item;
item = null;
return temp;
}
public String getLongDescription()
{
String part1 = "You are " + description;
String part2 = "You see ";
if(item != null){
return part1 + "" + part2 + "" + item.getDescription() + "" + item.getCalories();
}
return part1;
}
}
第一部分是我的游戏类,游戏类负责跟踪玩家的物品和当前位置。第二部分是我的房间类,实现一个类来维护一个房间的信息,包括:房间的描述(String)、项目(Item)和所有相邻房间的列表(HashMap)。
当我运行 main 方法来测试这些方法时,我调用的每个方法都会得到一个 null.pointer.exception。由于某种原因(我不知道为什么),当我运行调试器时,每个变量都设置为 null,所以我认为这就是我收到错误的原因。有关如何解决此问题的任何帮助,或者如果我做错了什么,请提供帮助。这也是我编程的第一个学期,所以我是半初学者。
******************更新!!!!************ 好的,我改变了我的构造函数,它似乎已经解决了这个问题?现在我仍然在这里得到同样的错误 myNeighbor.put(pDirection, r);这是在我的房间类中的 public void addNeighbor(String pDirection, Room r) (原始帖子的第二部分)
【问题讨论】:
-
因为myNeighbor是一个hashMap,你知道不能有多个north/south/east/west键吗?
-
我在 Room nextRoom = currentRoom.getNeighbor(direction); 处收到错误消息;
-
@Pier-AlexandreBouchard 你是什么意思我不能有多个北/南/东/西键?
-
在 createRooms() 中。例如,您尝试使用“west”键添加至少两个房间(hallway.addNeighbor(“west”,upstairsLobby);kitchen.addNeighbor(“west”,浴室))。 Hashmap 将只允许一个“west”键。