康威的生命游戏应用Android生活问题规则

时间:2015-04-26 18:25:55

标签: android

我正在尝试为我正在进行的编程课程创建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单元格。

非常感谢任何帮助或指导。

1 个答案:

答案 0 :(得分:1)

参数顺序只是一个简单的错误 - 您要将yx发送到期望calcNeighborsx的{​​{1}}方法。

y

我建议您将方法更改为:

calcNeighbors(h, w);
...

private int calcNeighbors(int x, int y)
...

由于您在其余代码中使用了h,w(y,x)顺序。