在Java中使用两个2D数组

时间:2017-02-15 09:55:35

标签: java arrays javafx

我并不完全知道如何标题,但这是我的问题: 我在JavaFX中制作了Conway的生命游戏,我有两个不同大小的2D阵列。一个阵列用作游戏板/网格,另一个阵列用作我想要插入到板上的图案。假设第一个数组是60x60,第二个数组是3x3。 为了制作电路板和模板,我使用这样的东西:

//Board
for (int x = 0; x < 60; x++) {
  for (int y = 0; y < 60; y++)
    board[x][y].setNextState(false);
    gc.setFill(Color.LIGHTGRAY);
    gc.fillRect(x * 10, y * 10, 9, 9);
  }
}

//Pattern
for (int x = 0; x < pattern.length; x++)
  for (int y = 0; y < pattern[x].length; y++)
    if (pattern[x][y] == 1) {
      board[x][y].setNextState(true);
    } else {
      board[x][y].setNextState(false);
    }
    gc.setFill(board[x][y].getState() ? Color.rgb(244, 92, 66) : Color.LIGHTGRAY);
    gc.fillRect(x * 10, y * 10, 9, 9);
  }
}

如上所述,图案放在板的左上方。但是说我希望它放在中间,我必须在模式循环中使用类似x = 30和y = 30的东西,但这不会在if (pattern[x][y] == 1)行中起作用。我怎样才能做到这一点?

我解释得很糟糕,但我希望我明白我的问题!

2 个答案:

答案 0 :(得分:2)

在参考电路板时,在xy位置应用偏移量,并在参考模式时保持不变。请注意,offsetX不能是&gt;板宽 - 图案宽度,Y相同:

int offsetX = 30;
int offsetY = 30;
for (int x = 0; x < pattern.length; x++)
  for (int y = 0; y < pattern[x].length; y++)
    if (pattern[x][y] == 1) {
      board[x + offsetX][y + offsetY].setNextState(true);
    } else {
      board[x + offsetX][y + offsetY].setNextState(false);
    }
    gc.setFill(board[x + offsetX][y + offsetY].getState() ? Color.rgb(244, 92, 66) : Color.LIGHTGRAY);
    gc.fillRect((x + offsetX) * 10, (y + offsetY) * 10, 9, 9);
  }
}

答案 1 :(得分:1)

你可以这样做:

for (int x = 0; x < pattern.length; x++) {
  for (int y = 0; y < pattern[x].length; y++) {
    int bx = x + 30,
        by = y + 30;
    if (pattern[x][y] == 1) {
      board[bx][by].setNextState(true);
    } else {
      board[bx][by].setNextState(false);
    }
    ...

等等。