Игра "Жизнь"

Задание для лабораторной работы по курсу “Основы MATLAB”

Задание

Подгруппа 1. Игра “Жизнь” на бесконечном поле.

Разработайте функцию next_generation, которая принимает в качестве аргумента массив \(n \times 2\) координат \(n\) клеток колонии и возвращает массив колонии следующего поколения.

Подгруппа 2. Игра “Жизнь” в замкнутом пространстве (торе).

Разработайте функцию next_generation, которая принимает в качестве аргумента массив \(n \times m\), отображающий состояние ограниченного поля той же размерности. Элемента массива содержит 1, если ячейка поля занята клеткой, 0 - если не занята. Функция должна возвращать массив \(n \times m\) состояния поля для следующего поколения.

Ниже приведен пример файл-скрипта, отображающего развитие колонии для первого варианта задания.

% Начальное состояние колонии
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

Правила игры “Жизнь”

Дано бесконечное поле, разделенное на ячейки. Ячейка может быть свободной или занятой клеткой. Клетки на поле образуют колонию. У каждой ячейки есть восемь ближайших смежных (граничащих) ячеек, которые могут быть заняты другими клетками.

Колония изменяется по следующим правилам:

  1. Если у клетки заняты соседями две или три смежных ячейки, то клетка “выживает” и переходит в следующее поколение, в противном случае она “умирает” от перенаселения или недостатка соседей.
  2. Если рядом с пустой ячейкой находятся ровно три клетки, то на месте этой ячейки появляется новая клетка.
  3. В процессе смены поколения “умирающие” клетки считаются принадлежащими колонии до определения всех новых клеток и клеток, переходящих в следующее поколение. Также и рождающиеся считаются принадлежащими следующему поколению и не оказывают влияние на количество соседей клеток текущего поколения.


© 2022. All rights reserved.

Powered by Hydejack v9.1.6