所以我正在研究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
答案 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}}设置为更大的值......