我的新条件逻辑是否适用于 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] && ...

请注意,如果许多编译器看到您编写的代码,他们会发出警告,因为这几乎总是错误的做法。您可能想检查一下是否有这样的警告。如果是这样,现在您知道那是什么意思了!如果不是,您可能需要提高编译器的警告级别,这样以后您就不太可能犯这样的错误。