我正在尝试为我正在学习的编程类创建Conway的android生命游戏。我可以得到一个初步的模式,在董事会上没有问题。当我想要创造下一代时,我遇到了一些问题。
这是我创建下一代的方法。
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表示活单元格,使用整数0表示死单元格。
任何帮助或指导都是非常感谢的。
发布于 2015-04-26 18:33:44
只是参数顺序上的一个简单错误--您正在将y、x发送到calcNeighbors方法,该方法期望x,y。
calcNeighbors(h, w);
...
private int calcNeighbors(int x, int y)
...我建议你将方法改为:
private int calcNeighbors(int y, int x)因为您在其余代码中使用h,w (y,x)顺序。
https://stackoverflow.com/questions/29881687
复制相似问题