int movedistance = 5; // Distance to move the board
@Override
public byte getLive(int x, int y) {
return board[y][x]; // Arraylist board.get(y).get(x) ?
}
public void patternRight(){
byte[][] testBoard = new byte[getHeight()][getWidth()];
// testBoard = new Arraylist<> ?
for (int x = 0; x < getHeight(); x++) {
for (int y = 0; y < getWidth(); y++){
if (getLive(y, x) == 1) testBoard[x][y + movedistance] = 1;
}
}
}
我试图制作一种方法,将我的游戏模式转移到我的棋盘上(生命游戏)。这个移动方法我目前使用byte []。我想使用ArrayList完全相同的方法。
答案 0 :(得分:0)
用byte[][]
替换List<List<Byte>>
毫无意义,但这是如何做的。
首先,您的代码与数组索引的顺序不一致:
getLive()
参数声明为x,y
,但您可以使用if (getLive(y, x) == 1)
调用它。 getLive()
,您使用board[y][x]
,但之后使用testBoard[x][y + movedistance] = 1;
getHeight()
与x
一起使用,将getWidth()
与y
一起使用,也许它(不小心?)&#34;加起来&#34;。 我假设该方法应始终为x,y
,数组应为[y][x]
,而x
为&#34;宽度为&#34;而y
是&#34;身高&#34;。
此外,[y + movedistance]
会导致ArrayIndexOutOfBoundsException
,因为您的循环使用全范围的值。我假设你想要&#34;环绕&#34;溢出。
public byte getLive(int x, int y) {
return board.get(y).get(x);
}
public void patternRight(){
List<List<Byte>> testBoard = new ArrayList<>();
for (int y = 0; y < getHeight(); y++) {
List<Byte> row = new ArrayList<>();
for (int x = 0; x < getWidth(); x++)
row.add((byte) 0);
testBoard.add(row);
}
for (int x = 0; x < getWidth(); x++) {
for (int y = 0; y < getHeight(); y++) {
if (getLive(x, y) == 1)
testBoard.get((y + movedistance) % getHeight()).set(x, (byte) 1);
}
}
}