Правильна ли моя новая условная логика для правил игры жизни? (разграничение условий рождения и жизни)
Ранее я просил о помощи, просматривая мой код Game of Life здесь: Проблема с методом кода Game of Life ? (Пользовательский интерфейс завершен, но реальные методы GOL не генерируют то, что они должны) и получили обратную связь (за исключением моего последнего вопроса, который лег в основу этого вопроса), но я не был уверен, как опубликовать обновленный вопрос с моим кодом правильно отформатирован в ответе.
Вот мой обновленный код к правилам только для 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;
}
2 ответа
Взгляните на это условие:
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)))