康威的生命游戏算法不起作用

Conway's game of life algoritm is not working

我正在尝试模拟康威的人生游戏。我做的算法不工作,但我不知道如何。
如果我遇到这样的情况:
|…………|
|....x....|
|....x....|
|....x....|
|…………|
一种 。是死细胞,x是活细胞

垂直条翻转为水平条是预期的,但这并没有发生。 相反,它只删除底部的,运行 它再次只删除底部,所以剩下 1 个。

显然算法有问题,但我不知道是什么。 我一直在网上查找,但其他人遇到的所有问题,解决方案都不适合我。

那么这个算法的错误是什么?

这是我的代码:

void new_generation() {
        // Create one new generation

        // double for loop -> iterates every cell
        for (int i=0; i<worldHeight; i++){
            for (int j=0; j<WorldWidth; j++) {

                // find the amount of living neighbours, stored in count
                // dubbele for loop -> iterates every neighbour of the current cell
                count = 0;
                for (int y=0; y<2; y++) {
                    for (int x=0; x<2; x++){
                        if (i != 0 and j!= 0) { // the cell itself doesnt count
                            if (world[i+y][j+x]) count++;
                        }
                    }
                }

                if (world[i][j]) { // current cell is alive
                    if (count<2 or count>3) new_world[i][j] = false;
                    else new_world[i][j] = true;
                }
                else { // current cell is dead
                    if (count==3) new_world[i][j] = true;
                    else new_world[i][j] = false;
                }   
            }
        }

        // copy every value from the newly generated world to the current
        // double foor loop -> iterates every cell
        for (int i=0; i<worldHeight; i++){
            for (int j=0; j<WorldWidth; j++) {
                world[i][j] = new_world[i][j]; 
            }
        }

worldHeight 和 worldWidth 是表示世界有多大的整数。
world 和 new_world 是包含布尔值的二维数组,其中 true 是活细胞,false 是死细胞

你数错了邻居小区

x 和 y 都是从 0 到 2 而不是从 -1 到 2。在

for (int y=0; y<2; y++) {//should be int y=-1; y<2; y++
    for (int x=0; x<2; x++){//should be int x=-1; x<2; x++
        if (i != 0 and j!= 0) { // shold be x!=0 or y!=0
            if (world[i+y][j+x]) count++;
        }
     }
 }

你还必须检查 world[i+y][j+x] 是否有效(坐标在 0,尺寸范围内)

第三个问题是,当您不想计入 word[i][j] 时,您检查 if (i!=0 and j!=0) 而不是 x!=0 y!=0 i和j为被检细胞的坐标,x和y为坐标之差