gpt4 book ai didi

java - 康威生命游戏不起作用计数邻居方法不起作用

转载 作者:行者123 更新时间:2023-11-30 06:44:30 25 4
gpt4 key购买 nike

下面的代码是我的生命游戏代码。由于某种原因,它的工作方式非常奇怪。游戏的前几步是错误的,然后整个输出变成零。我不知道哪个方法导致了问题,但我假设它是计数邻居方法。

棋盘是一个名为 GOLBoard 的 2D 数组,x 和 y 坐标分别为 cellRowcellCol。活细胞为 1,死细胞为 0。我避免越界问题的方法是将棋盘设为 12x12,但我仅对行和列使用 1 到 11。

<code>    @Override
public int countNeighbours(int cellRow, int cellCol) {
int neighbours = 0;
for (int i = cellRow-1; i < cellRow + 2; i++) {
for (int j = cellCol - 1; j < cellCol + 2; j++) {
if (GOLBoard[i][j] == 1) {
neighbours += 1;
}
}
}
if (GOLBoard[cellRow][cellCol] == 1) {
return(neighbours-1);
} else {
return(neighbours);
}

}



@Override
public int applyRules(int cellRow, int cellCol) {
int alive = 0;
if (GOLBoard[cellRow][cellCol] == 1) {
if (countNeighbours(cellRow, cellCol) == 2 || countNeighbours(cellRow, cellCol) == 3) {
alive = 1;
} else if (countNeighbours(cellRow, cellCol) < 2 || countNeighbours(cellRow, cellCol) > 3) {
alive = 0;
}
}


if (GOLBoard[cellRow][cellCol] == 0) {
if (countNeighbours(cellRow, cellCol) == 3) {
alive = 1;
}
}
return (alive);
}

@Override
public void takeStep() {
for (int row = 1; row < 11; row++) {
for (int col = 1; col < 11; col++) {
GOLBoard[row][col] = applyRules(row, col);
}
}
}



@Override
public String toString() {
for (int row = 1; row < 11; row++) {
for (int col = 1; col < 11; col++) {
System.out.print("[" + GOLBoard[row][col] + "]");
}
System.out.println("");
}
return("");
}
} <code>

最佳答案

如果我正确地记忆起 GOL 的规则,棋盘的演变应该在一系列“世代”中进行,其中"new"棋盘上每个单元的状态仅由相应单元的条件决定在“旧”板上。您的程序正在尝试不断发展单板,因此对先前计算的单元的更改会影响尚未计算的单元的结果。您的 takeStep 例程应该执行类似这样的操作:

newBoard = new int[12][12];
for (int row = 1; row < 11; row++) {
for (int col = 1; col < 11; col++) {
newBoard[row][col] = applyRules(row, col);
}
}
GOLBoard = newBoard;

据我所知,您的 countNeighbours 没问题。

关于java - 康威生命游戏不起作用计数邻居方法不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43881474/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com