我的新条件逻辑对生命游戏规则是否正确?(区分出生和生活条件)



>我之前曾在这里寻求帮助查看我的生命游戏代码:生命游戏代码方法的问题?(用户界面是完整的,但实际的 GOL 方法没有生成它们应该生成的内容)并收到了反馈(除了我的最后一个问题,它构成了这个问题的基础),但我不确定如何使用我的代码正确格式化发布更新的问题回复。

这是我更新的代码,仅适用于生活游戏的规则。我试图考虑我需要区分出生和生活条件的建议。但它仍然不起作用,甚至比以前做得更少(现在它在第一代之后空白而不是产生废话)。如果有人可以查看它并告诉我我的逻辑是否正确,那将非常有帮助,因为考虑到以下格式,它似乎应该有效:

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) && ... ) {

请注意,您正在编写

(map[j][i] = true)

这意味着"将map[j][i]设置为真,然后评估为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] && ...

请注意,许多编译器在看到与您编写的代码类似的代码时会发出警告,因为这几乎总是错误的做法。您可能需要检查是否有此类警告。如果是这样,现在你知道这意味着什么了!如果没有,您可能希望提高编译器上的警告级别,以便将来不太可能犯这样的错误。

也许有更多的括号:

if ((map[j][i] = true) && ((neighborCount[j][i] == 2) || (neighborCount[j][i] == 3)))

最新更新