Multidimensional array 生命的游戏很快结束(Java)

Multidimensional array 生命的游戏很快结束(Java),multidimensional-array,conways-game-of-life,Multidimensional Array,Conways Game Of Life,我已经创建了生活游戏的基本版本:每个回合,棋盘都由一个1和0的2D数组模拟,然后另一个类使用2D数组为我创建一个图形 我已经阅读了关于这个游戏的所有其他问题,但是没有一个答案适合我……如果我在这里击败了一匹死马,对不起 我认为我的算法有问题,因此可能电路板中充满了错误数量的死细胞和活细胞,因此结束得相当快(5-10圈) 我在这里找到了一个算法来扫描所有的邻居,甚至还添加了一个count=-1,以防网格中的一个单元格将自己扫描为自己的邻居,但我认为我在这里遗漏了一些东西 public st

我已经创建了生活游戏的基本版本:每个回合,棋盘都由一个1和0的2D数组模拟,然后另一个类使用2D数组为我创建一个图形

我已经阅读了关于这个游戏的所有其他问题,但是没有一个答案适合我……如果我在这里击败了一匹死马,对不起

我认为我的算法有问题,因此可能电路板中充满了错误数量的死细胞和活细胞,因此结束得相当快(5-10圈)

我在这里找到了一个算法来扫描所有的邻居,甚至还添加了一个count=-1,以防网格中的一个单元格将自己扫描为自己的邻居,但我认为我在这里遗漏了一些东西

    public static void repaint(board game, int size,int[][] alive, int[][] newGeneration)
    {
        int MIN_X = 0, MIN_Y = 0, MAX_X =9, MAX_Y =9, count;

        for ( int i = 0; i < size; i++ )
        {
            for (int j = 0; j < size; j++) //here we check for each matrix cell's neighbors to see if they are alive or dead
            {
                count = 0;
                if (alive[i][j] == 1)
                    count = -1;
                int startPosX = (i - 1 < MIN_X) ? i : i - 1;
                int startPosY = (j - 1 < MIN_Y) ? j : j - 1;
                int endPosX = (i + 1 > MAX_X) ? i : i + 1;
                int endPosY = (j + 1 > MAX_Y) ? j : j + 1;
                for (int rowNum = startPosX; rowNum <= endPosX; rowNum++)
                {
                    for (int colNum = startPosY; colNum <= endPosY; colNum++)
                    {
                        if (alive[rowNum][colNum] == 1)
                            count++;
                    }
                }
                if (alive[i][j] == 0 && count == 3) //conditions of the game of life
                    newGeneration[i][j] = 1;  //filling the new array for the next life
                if (alive[i][j] == 1 && count < 2)
                    newGeneration[i][j] = 0;
                if (alive[i][j] == 1 && count >= 4)
                    newGeneration[i][j] = 0;
                if (alive[i][j] == 1 && count == 3)
                    newGeneration[i][j] = 1;
            }
        }
        game.setAlive(newGeneration); //we created a new matrix with the new lives, now we set it
        SetupGUI(game,size); //re drawing the panel
    }
}
publicstaticvoidrepaint(棋盘游戏,int大小,int[][]活动,int[][]新一代)
{
int最小值X=0,最小值Y=0,最大值X=9,最大值Y=9,计数;
对于(int i=0;iMAX_X)?i:i+1;
int-endPosY=(j+1>MAX_Y)?j:j+1;

对于(int rowNum=startPosX;rowNum)来说,你的“生活游戏条件”并没有涵盖所有的可能性。回顾这一部分。要找出你做错了什么,你可以使用一些简单的已知模式进行测试,例如振荡器的“闪烁器”和“信标”在这里找到:一步一步地运行它们,看看发生了什么与应该发生的不同。