我的新条件逻辑是否适用于 Game of Life 规则? (区分出生和生活条件)
Is my new conditional logic correct for Game of Life rules? (differentiating BIRTH and LIVING conditions)
我之前曾在此处寻求帮助查看我的生命游戏代码:Issue with Game of life code method? (User interface is complete but actual GOL methods aren't generating what they should) 并收到了反馈(除了构成此问题基础的最后一个问题),但我不确定如何post 一个更新的问题,我的代码在回复中格式正确。
这是我更新的仅适用于 Game of Life 规则的代码。我试图考虑我需要区分出生和生活条件的建议。但它仍然不起作用,甚至比以前做的更少(现在它在第一代之后空白而不是产生废话)。如果有人可以查看它并告诉我我的逻辑是否正确,那将非常有帮助,因为它似乎应该在给定以下格式的情况下工作:
if ((map = true) && ((count == 2) || (count == 3))){
map2 = true;} else {map2 = false;}
if (map = false) && count == 3)
map2 = true;
.
.
.
update map = map2;
代码:
for (int j = 0; j < y; j++) {
for (int i = 0; i < x; i++) {
if ((map[j][i] = true) && ((neighborCount[j][i] == 2) || (neighborCount[j][i] == 3))){//alive/dead
map2[j][i] = true;
} else {map2[j][i] = false;
}
if ((map[j][i] = false) && (neighborCount[j][i] == 3)){//birth
map2[j][i] = true;
}
}
}
map = map2;
}
也许有更多的括号:
if ((map[j][i] = true) && ((neighborCount[j][i] == 2) || (neighborCount[j][i] == 3)))
看看这个条件:
if ((map[j][i] = true) && ... ) {
注意你正在写
(map[j][i] = true)
这意味着 "set map[j][i]
to be true, then evaluate to true
." 换句话说,这会更改 map[j][i]
的内容(糟糕!),然后继续执行 if 语句的其余部分。
我相信你想写这样的东西
if ((map[j][i] == true) && ... ) {
或者,更好的是,
if (map[j][i] && ... ) {
意思是一样的,不会有意外赋值的风险。
同样,这里写
if ((map[j][i] = false) && ...
更新 map[j][i]
为假(糟糕!)。我想你的意思是
if ((map[j][i] == false) && ...
或者,更好的是,
if (!map[j][i] && ...
请注意,如果许多编译器看到您编写的代码,他们会发出警告,因为这几乎总是错误的做法。您可能想检查一下是否有这样的警告。如果是这样,现在您知道那是什么意思了!如果不是,您可能需要提高编译器的警告级别,这样以后您就不太可能犯这样的错误。
我之前曾在此处寻求帮助查看我的生命游戏代码:Issue with Game of life code method? (User interface is complete but actual GOL methods aren't generating what they should) 并收到了反馈(除了构成此问题基础的最后一个问题),但我不确定如何post 一个更新的问题,我的代码在回复中格式正确。
这是我更新的仅适用于 Game of Life 规则的代码。我试图考虑我需要区分出生和生活条件的建议。但它仍然不起作用,甚至比以前做的更少(现在它在第一代之后空白而不是产生废话)。如果有人可以查看它并告诉我我的逻辑是否正确,那将非常有帮助,因为它似乎应该在给定以下格式的情况下工作:
if ((map = true) && ((count == 2) || (count == 3))){
map2 = true;} else {map2 = false;}
if (map = false) && count == 3)
map2 = true;
.
.
.
update map = map2;
代码:
for (int j = 0; j < y; j++) {
for (int i = 0; i < x; i++) {
if ((map[j][i] = true) && ((neighborCount[j][i] == 2) || (neighborCount[j][i] == 3))){//alive/dead
map2[j][i] = true;
} else {map2[j][i] = false;
}
if ((map[j][i] = false) && (neighborCount[j][i] == 3)){//birth
map2[j][i] = true;
}
}
}
map = map2;
}
也许有更多的括号:
if ((map[j][i] = true) && ((neighborCount[j][i] == 2) || (neighborCount[j][i] == 3)))
看看这个条件:
if ((map[j][i] = true) && ... ) {
注意你正在写
(map[j][i] = true)
这意味着 "set map[j][i]
to be true, then evaluate to true
." 换句话说,这会更改 map[j][i]
的内容(糟糕!),然后继续执行 if 语句的其余部分。
我相信你想写这样的东西
if ((map[j][i] == true) && ... ) {
或者,更好的是,
if (map[j][i] && ... ) {
意思是一样的,不会有意外赋值的风险。
同样,这里写
if ((map[j][i] = false) && ...
更新 map[j][i]
为假(糟糕!)。我想你的意思是
if ((map[j][i] == false) && ...
或者,更好的是,
if (!map[j][i] && ...
请注意,如果许多编译器看到您编写的代码,他们会发出警告,因为这几乎总是错误的做法。您可能想检查一下是否有这样的警告。如果是这样,现在您知道那是什么意思了!如果不是,您可能需要提高编译器的警告级别,这样以后您就不太可能犯这样的错误。