我一直在关注有关用 Java 创建基本的基于图 block 的塔防游戏的教程,并且遇到了一段我无法理解的代码,并且需要一些帮助。 (我的主要问题在代码后面的底部)
此时,我们正在迭代一个由 0 和 1 组成的多维数组,并将其传递给构造函数,它有一个方法为 0's 分配草 block ,为 1's 分配石头 block ,然后用另一个方法将它们绘制到屏幕上以创建我们的游戏屏幕。很简单,对吧?
这是类(class):
package data;
import static helpers.Artist.*;
public class TileGrid {
public Tile[][] map;
public TileGrid(int[][] newMap){
map = new Tile[20][15];
for(int i = 0; i < map.length; i++){
for(int j = 0; j <map[i].length; j++){
switch(newMap[j][i]){
case 0:
map[i][j] = new Tile(row * 64, col * 64, 64, 64, TileType.GRASS);
break;
case 1:
map[i][j] = new Tile(row * 64, col * 64, 64, 64, TileType.STONE);
break;
case 2:
map[i][j] = new Tile(row * 64, col * 64, 64, 64, TileType.WATER);
break;
}
}
}
}
public void Draw(){
for(int i = 0; i < map.length; i++){
for(int j = 0; j < map[i].length; j++){
Tile t = map[i][j];
DrawQuadTex(t.getTexture(), t.getX(), t.getY(), t.getWidth(), t.getHeight());
}
}
}
}
这是我们传入的数组:
int[][] map = { //20 tiles wide, 15 tiles high
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0},
{0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0},
{0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 1, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 1, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 1, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0},
};
所以我的主要问题与 TileGrid
构造函数中的 switch 语句有关。
为什么在检查其相等时,i
和 j
会切换 newMap[j][i]
?我知道这段代码有效,因为它确实有效,而且我理解嵌套 for 循环来迭代多维数组。
但是为什么 newMap[i][j]
不起作用呢?
同样,在同一个构造函数的最开始,为什么我们在传入时要创建一个维度为 map = new Tile[20][15]
的数组(Tile 类型)尺寸为 map[15][20]
的数组?
我试图自己解决这个问题并研究这个问题,并将继续这样做,直到我理解它,但任何帮助将非常感激!
最佳答案
您正在向 TileGrid
构造函数传递一个 15 行 20 列的 2D 数组,但在构造函数内您创建了一个 20 行 15 列的 2D 数组。这就是为什么 map[i][j]
对应于 newMap[j][i]
。
如果输入 int[][] map
也是 20 行和 15 列,则无需在构造函数内切换索引的顺序。
关于java - 多维数组 : Java. 这段代码是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29586917/