Игра "Жизнь"
Задание для лабораторной работы по курсу “Основы MATLAB”
Задание
Разработайте функцию next_generation, которая принимает в качестве аргумента массив \(n \times 2\) координат \(n\) клеток колонии и возвращает массив колонии следующего поколения.
Ниже приведен пример файл-скрипта, отображающего развитие колонии для первого варианта задания.
% Начальное состояние колонии
cells = [ 1, 1;
1, 2;
1, 3;
2, 1;
3, 2;
10 10;
10 11;
10 12];
% Координаты вершин квадрата, изображающего клетку
% (относительно центра клетки)
vert = [-0.5,-0.5, 0.5,-0.5, 0.5,+0.5, -0.5,+0.5];
% границы области
xlim([-20,20]);
ylim([-20,20]);
% количество поколений
n_gen = 50;
% Для каждого поколения
for i=1:n_gen
% очистить изображение
cla;
% получить список клеток для следующего поколения
cells = next_generation(cells);
% сформировать список полигонов для функции patch
cells_vertices = repmat(cells,1,4)+repmat(vert,size(cells,1),1);
x = (cells_vertices(:,1:2:end))';
y = (cells_vertices(:,2:2:end))';
% нарисовать клетки
patch(x,y,'r');
% включить сетку
grid on;
% включить рамку
box on;
% сохранить кадр
getframe;
% подождать 0.2 с
pause(0.2);
end
Правила игры “Жизнь”
Дано бесконечное поле, разделенное на ячейки. Ячейка может быть свободной или занятой клеткой. Клетки на поле образуют колонию. У каждой ячейки есть восемь ближайших смежных (граничащих) ячеек, которые могут быть заняты другими клетками.
Колония изменяется по следующим правилам:
- Если у клетки заняты соседями две или три смежных ячейки, то клетка “выживает” и переходит в следующее поколение, в противном случае она “умирает” от перенаселения или недостатка соседей.
- Если рядом с пустой ячейкой находятся ровно три клетки, то на месте этой ячейки появляется новая клетка.
- В процессе смены поколения “умирающие” клетки считаются принадлежащими колонии до определения всех новых клеток и клеток, переходящих в следующее поколение. Также и рождающиеся считаются принадлежащими следующему поколению и не оказывают влияние на количество соседей клеток текущего поколения.