cond游戏错误与2D阵列操作

时间:2013-11-20 07:25:37

标签: c++

所以我正在研究life game,到目前为止,我已经提出了这个http://ideone.com/QG4tsS我不确定我是否在正确的轨道上。基本上我有一个函数发出随机值来尝试和测试我的代码。但似乎没有任何事情发生。我怀疑我的问题在于以下代码

int sum = 0;

    for (int k = (i - 1); k <= (i + 1); k++) {
        for (int l = (j - 1); l <= (j + 1); l++) {
            sum += currentGen[k][l];
        }
    }

    return sum;

所以我的结果给了我一个全0的2d数组,但我不应该开始看到一些变化和模式开始形成?我得到一个1,其余的都是0。

输出

0 0 0 0 
0 0 0 0 
0 0 0 0 
0 0 0 0 
0 0 0 0 
0 0 0 0 
0 0 0 1 
0 0 0 0 
0 0 0 0 
0 0 0 0 
0 0 0 0 
0 0 0 0 
0 0 0 0 
0 0 0 0 
0 0 0 0 
0 0 0 0 
0 0 0 0 
0 0 0 0 

1 个答案:

答案 0 :(得分:1)

我根据您在http://ideone.com/QG4tsS发布的代码提供此答案。您真的应该考虑将该代码添加到原始问题中,以便将来在StackOverflow上找到此代码的人具有完整的上下文。

如果RandomCells函数符合RANDOM阈值,则void RandomCells(int currentGen[][CELLY]) { for (int i = 0; i < CELLX; i++) { for (int j = 0; j < CELLY; j++) { if (rand() % 100 + 1 < RANDOM) { currentGen[i][j] = 1; } else { currentGen[i][j] = 0; } } } } 函数仅将单元格设置为1。否则它不会将它们清除为0。一旦你解决了这个问题,你就会全力以赴。即

else

如果没有0 0 4196155 1 1813657216 1 4197653 0 -870503576 1 4197584 1 条款,我看到的初始世代看起来像这样:

currentGen

显然,大多数细胞都不为零,因此Conway的Life算法会因为“拥挤”而将它们映射到下一代的0。

main填充此类“随机”值的原因是它被分配为自动变量CELLX自动变量不会初始化为任何特定值。您需要自己初始化它们。您可以通过修改算法(如上所述)或通过添加显式位代码来初始化结构来实现。

这与文件范围变量不同,如果C和C ++没有初始化器或默认构造器,则它们在程序启动时定义为初始化为零。 (Pedants会指出即使 有警告。)

一旦您完成了必要的修复,要真正看到Conway的生活,您需要将CELLY和{{1}}设置为更大的值......