我并不完全知道如何标题,但这是我的问题: 我在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)
行中起作用。我怎样才能做到这一点?
我解释得很糟糕,但我希望我明白我的问题!
答案 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);
}
...
等等。