【发布时间】:2015-05-27 08:59:51
【问题描述】:
我正在尝试将对象存储在多维数组中,以尝试将每个位置保存在游戏板“状态”中,但是在应该将每个实例设置为其自己的参数的循环之后,它们最终都相同变量。我没有链接正确的数组或设置错误吗? 还有很多“square.something应该以静态方式访问”。
square.var 或 World[x][y].var 是引用对象变量的正确方法吗?
public static void generateMap() {
MapSquare[][] World = new MapSquare[10][10]; //2D array init.
//Choose a square for the home position.
Random homeRandom = new Random();
int HomeX = homeRandom.nextInt(10);
int HomeY = homeRandom.nextInt(10);
//Chooses a key room.
int KeyX = homeRandom.nextInt(10);
int KeyY = homeRandom.nextInt(10);
//Loop through the objects and set each's parameters.
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
MapSquare square = new MapSquare();
//World[i][j] = square;
//Calculate the level of the square from the distance to home.
int distX = HomeX - i;
int distY = HomeY - j;
int CalcX = Math.abs(distX); //Convert to positive if negative.
int CalcY = Math.abs(distY); //Convert to positive if negative.
//Generate contents of the square.
int newRandom = random.nextInt(5) + 1;
switch(newRandom) {
case 1: // Spawn a monster only.
{
square.monster = true;
square.treasure = false;
square.trap = false;
square.home = false;
square.peekable = false;
square.key = false;
square.mapLevel = CalcX + CalcY;
//Generate the monsters stats.
Monster monster = new Monster();
monster.setLevel(square.mapLevel);
monster.setMaxHealth(monster.getLevel() * 5);
monster.setHealth(monster.getMaxHealth());
monster.setDamage(monster.getLevel() * 2);
break;
}
}
}
}
//Generate home square.
World[HomeX][HomeY].monster = false;
World[HomeX][HomeY].treasure = false;
World[HomeX][HomeY].trap = false;
World[HomeX][HomeY].home = true;
World[HomeX][HomeY].peekable = true;
World[HomeX][HomeY].key = false;
World[HomeX][HomeY].mapLevel = 0;
World[HomeX][HomeY].visited = true;
}
【问题讨论】:
-
当你说 random.nextInt(5) + 1 时:你的意思是 homeRandom.nextInt(5) +1 对吗?除此之外,我认为您需要使您的 MapSquare 类定义更加标准。直接修改成员绝不是一个好主意。为此创建设置器。
-
啊,是的,谢谢,我知道我现在也定义了另一个名为 random 的东西,这是多余的。
-
这行
//World[i][j] = square;应该被注释掉吗? -
是的,那条线是新的,我不确定并评论了它,看看是否有任何改变,但它没有改变。 MapSquare 现在基本上只有 Getter 和 Setter,而不是 init。如果我将它们交换为 Get 和 Set,则表明它们应该以静态方式访问。
-
不要告诉我你在
MapSquare类中创造了static的一切?如果是这样,那就是你的问题。从该类的每个方法和每个字段中删除static,然后放回您注释掉的那一行。然后,继续阅读static的含义。
标签: java arrays object multidimensional-array