Итак, в основном, я писал PHP-скрипт Game of Life. Мой вывод не работает, и я не могу понять это! Вся схема состоит из двумерного массива $world, в котором каждое значение соответствует ячейке с двумя состояниями, которая может быть 1 или 0 (активен или мертв). Каждая ячейка имеет 8 соседей. Правила вычисления следующего состояния системы следующие:
- Если у вас есть 2-3 живых соседа (1), вы живы на следующий ход.
- Иначе ты мертв.
Моя реализация выглядит следующим образом: (примечание: $j_minus
, $i_plus
и т. д. относятся к $j-1
и т. д., но учитывают края)
for($i=0;$i<$size;$i++)
{
for($j=0;$j<$size;$j++)
{
if( ($world[$j_minus][$i] + $world[$j_plus][$i] + $world[$j][$i_minus] + $world[$j][$i_plus]+$world[$j_minus][$i_minus]+$world[$j_minus][$i_plus]+$world[$j_plus][$i_minus]+$world[$j_plus][$i_plus]) > 3 )
{
$new_world[$j][$i]=0;
}
else if( ($world[$j_minus][$i] + $world[$j_plus][$i] + $world[$j][$i_minus] + $world[$j][$i_plus]+$world[$j_minus][$i_minus]+$world[$j_minus][$i_plus]+$world[$j_plus][$i_minus]+$world[$j_plus][$i_plus])>= 2 )
{
$new_world[$j][$i]=1;
}
else {$new_world[$j][$i]=0;}
}
}
После того, как эти правила были применены, сделав $new_world новым состоянием системы, я перехожу к выводу массива на экран следующим образом:
for($i=0;$i<$size;$i++)
{
for($j=0;$j<$size;$j++)
{
echo $new_world[$i][$j]." ";
}
echo "</p>";
}
То, что я получаю, независимо от начального состояния $world
, является либо полностью застойным состоянием, полным линий и больших блоков, либо колебанием между 2-3 такими состояниями. Правила, кажется, не применяются правильно!