Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么我的C++;生活游戏不能正常运作?_C++_Conways Game Of Life - Fatal编程技术网

C++ 为什么我的C++;生活游戏不能正常运作?

C++ 为什么我的C++;生活游戏不能正常运作?,c++,conways-game-of-life,C++,Conways Game Of Life,这可以编译和运行,但结果与实际情况完全不同 我截取了不相关的代码: bool grid[1280][1024]; // hardcoded to my screen res for now for (int x = 0; x<1280; x++) //init grid to false { for (int y = 0; y<1024; y++) { grid[x][y] = false; } } grid[320][120] =

这可以编译和运行,但结果与实际情况完全不同

我截取了不相关的代码:

bool grid[1280][1024]; // hardcoded to my screen res for now

for (int x = 0; x<1280; x++)     //init grid to false
{
    for (int y = 0; y<1024; y++)
    {
        grid[x][y] = false;
    }
}

grid[320][120] = true; // add a simple pattern
grid[320][121] = true;
grid[320][122] = true;
grid[320][123] = true;
grid[320][124] = true;
grid[320][125] = true;
grid[320][126] = true;
grid[320][127] = true;
grid[320][128] = true;

// [snipped]

for (int x = 1; x< (1280 - 1); x++)
{
    for (int y = 1; y< (1024 - 1); y++)
    {
        int n = 0; // neighbours
        if (grid[x-1][y-1]) n++; // top left
        if (grid[x][y-1])   n++; // top middle
        if (grid[x+1][y-1]) n++; // top right

        if (grid[x-1][y])   n++; // left
        if (grid[x+1][y])   n++; // right

        if (grid[x-1][y+1]) n++; // bottom left
        if (grid[x][y+1])   n++; // bottom middle
        if (grid[x+1][y+1]) n++; // bottom right


        if (grid[x][y]) // current cell is on
        {
            SetPixel(screen, x, y, on); // drawing function

            if (n < 2) grid[x][y] = false; // die. :(
            if (n > 3) grid[x][y] = false; // die. :(
            // otherwise (2 or 3), survive. :)

        }
        else // current cell is off
        {
            SetPixel(screen, x, y, off); // drawing function

            if (n == 3) grid[x][y] = true; // IT'S ALIVE!!!
        }



    }
}
bool网格[1280][1024];//现在硬编码到我的屏幕分辨率

对于(int x=0;x首先,它不起作用,因为您没有分离每个单元格的结果,即,如果网格[0][0]死亡,那么这将立即反映在网格[1][0]上“生还是死,这不是生命游戏的工作方式。其次,它不起作用,因为您似乎没有运行游戏多次迭代。

首先,它不起作用,因为您没有分离每个单元格的结果,即,如果网格[0][0]死亡,那么这将立即反映在网格[1][0]上“生或死,这不是生命游戏的工作方式。其次,它不工作,因为你似乎没有运行游戏多次迭代。

oooh该死。我想我必须在每回合创建一个阵列副本,然后将结果写入副本,并在每回合开始时用副本覆盖原始阵列。是吗对吗?我没有收到你的第二条评论,我是如何运行多个迭代的?你不必每次都覆盖原始数组。只需在每次迭代中切换当前数组。“其他”数组始终是当前的下一个数组。@DataFlashSpot:您没有多次运行它。这就是问题所在。生命的游戏将永远运行,而不仅仅是一次。@Dialogicus:如果您按光栅扫描顺序更新单元格,您只需要一个1280x1数组来存储更新,而不是一个完整的1280x1024…@DeadMG在snip进入循环后所有内容都会消失。Sor呃,我当时认为这很清楚:)哦,该死。我想我必须在每个回合中创建阵列的副本,然后将结果写入副本,并在每个回合开始时用副本覆盖原始阵列。我说得对吗?不过,我没有收到您的第二条评论,我是如何运行多个迭代的?您不必每次都覆盖原始数组。只需在每次迭代中切换当前数组。“other”数组始终是下一个当前数组。@DataFlashSpot:您没有多次运行它。这就是问题所在。生命的游戏将永远运行,而不仅仅是一次。@Dialogicus:如果你按照光栅扫描顺序更新单元格,你只需要一个1280x1数组来存储更新,而不是一个完整的1280x1024…@DeadMG在剪报进入循环后就可以了。对不起,我当时认为这很清楚:)