生命游戏失灵

时间:2015-03-13 11:14:12

标签: java logic

为什么我的生活游戏无法正常运作? 当他们太拥挤时,他们永远不会死。

相关代码是grann(x,y),它应该返回matrix [x] [y]周围的活细胞数, run应该计算下一代:

private int grann(int x,int y) {
    int n = 0;
    for(int i=-1; i<2; i++) {
        for(int j=-1; j<2; j++) {
            if(i!=0 || j!=0) {
                if(matrix[x+i][y+j]) {
                    n++;
                }
            }
        }
    }
    return n;
}
public void run() {
    boolean[][] next = matrix;
    for(int i=1; i<w; i++) {
        for(int j=1; j<h; j++) {
            int n = grann(i,j);
            if(matrix[i][j]) {
                if(!(n==2 || n==3)) {
                    next[i][j] = false;
                }
            } else {
                if(n==3) {
                    next[i][j] = true;
                }
            }
        }
    }
    matrix = next;
}

对象具有矩阵,宽度和高度。 matrix是布尔值[w + 2] [h + 2],w和h是整数。

如果你不了解康威生命游戏的规则: http://en.wikipedia.org/wiki/Conway%27s_Game_of_Life

1 个答案:

答案 0 :(得分:0)

我认为问题在于格兰恩应该说:

if(i != 0 && j != 0)

因为您只想消除正在检查的3x3区域的中心方块(单元格本身),而不是它所在的行和列。