我正在尝试为我正在进行的编程课程创建Conway的生命游戏。我能够在电路板上绘制初始图案没问题。当我想创建下一代时,我遇到了问题。
这是我创建下一代的方法。
public void createNextGen(){
int neighbors;
int[][] nextGen = new int[HEIGHT][WIDTH];
for(int h = 0; h < HEIGHT; h++){
for(int w = 0; w < WIDTH; w++){
neighbors = calcNeighbors(h, w);
if(currentLife[h][w] == 1){
if(neighbors < 2){
nextGen[h][w] = 0;
} else if (neighbors > 3){
nextGen[h][w] = 0;
} else {
nextGen[h][w] = 1;
}
} else if (currentLife[h][w] == 0){
if(neighbors == 3){
nextGen[h][w] = 1;
} else {
nextGen[h][w] = 0;
}
}
}
}
copyGrid(nextGen, currentLife);
}
这是我计算邻居的方法。
private int calcNeighbors(int x, int y){
int total = 0;
for (int h = -1; h <= +1; h++) {
for (int w = -1; w <= +1; w++) {
if (currentLife[(HEIGHT + (y + h)) % HEIGHT][(WIDTH + (x + w)) % WIDTH] != 0) {
total++;
}
}
}
return total;
}
这是从网格开始的初始模式。
public void initGrid() {
resetGrid(currentLife);
currentLife[8][(WIDTH / 2) - 1] = 1;
currentLife[8][(WIDTH / 2) + 1] = 1;
currentLife[9][(WIDTH / 2) - 1] = 1;
currentLife[9][(WIDTH / 2) + 1] = 1;
currentLife[10][(WIDTH / 2) - 1] = 1;
currentLife[10][(WIDTH / 2)] = 1;
currentLife[10][(WIDTH / 2) + 1] = 1;
}
我不认为问题在于我的onDraw方法,因为这个初始模式显示为预期。它的下一代正在各处跳跃,我想我必须在createNextGeneration方法中做错了。
我使用整数1表示ALIVE单元格,整数0表示DEAD单元格。
非常感谢任何帮助或指导。
答案 0 :(得分:1)
参数顺序只是一个简单的错误 - 您要将y
,x
发送到期望calcNeighbors
,x
的{{1}}方法。
y
我建议您将方法更改为:
calcNeighbors(h, w);
...
private int calcNeighbors(int x, int y)
...
由于您在其余代码中使用了h,w(y,x)顺序。