Отчёт по индивидуальному заданию
Анализ предметной области. Функциональность программы
Идея клеточных автоматов появилась в конце сороковых годов 20 века. Она была задумана и сформулирована Джоном фон Нейманом и Конрадом Цусе независимо друг от друга как универсальная вычислительная среда для построения, анализа и сравнения характеристик алгоритмов. Клеточный автомат представляет собой совокупность пространства, поделенного на клетки, в каждой из которых содержится некое значение, и правил, задающих закон преобразования при совершении шага. Это пространство может быть как плоскостью, так и любым N-мерным пространством. Представим себе некоторое однородное пространство, состоящее из клеток. Каждая клетка обладает несколькими состояниями, которые могут зависеть от следующих параметров:
1)"Соседи" клетки - клетки, располагающиеся в непосредственной близости от данной;
2) количество ходов, прошедших от начала игры;
3) свойства самой клетки и т.д.
Правила игры достаточно просты:
|
|
Полем для игры является бесконечная плоскость, разбитая на клетки. Каждая
клетка может находиться в двух состояниях: "живом" и "мертвом". Правила перехода клетки в новое состояние выбирается из следующих критериев: минимальное, максимальное количество соседей для "рождения" клетки, минимальное, максимальное количество соседей для "вымирания" клетки. Конвей много экспериментировал с этими параметрами и остановился на
следующем:
1)Соседями клетки являются все восемь клеток, имеющих либо общую сторону, либо общую вершину.
2)Клетка рождается, если количество соседей равно 3
3)Клетка умирает, если количество соседей либо больше 3 (перенаселение), либо меньше 2 (одиночество). В процессе игры популяция непрестанно претерпевает необычные, нередко очень красивые и всегда неожиданные изменения. Иногда первоначальная колония организмов вымирает, но, в большинстве своем, исходные конфигурации либо переходят в устойчивые и перестают изменяться, либо переходят в колебательный режим.
Программа отображает состояние системы для произвольного n. Так же программа имеет базу стандартных конфигураций клеток для последующего использования. Программа сохраняет графический файл полученного результата в выбираемую пользователем папку.
Алгоритм задачи
Данный алгоритм основан на разметке Canvas, поэтому для начала мы создаем разметку Canvas. Далее мы заполняем эту разметку прямоугольниками (квадратиками). Их количество мы указали в константе. Ещё нам нужно создать прямоугольник (квадрат), который будет отвечать за область подсчёта соседей. Так же для визуализации мы делаем отступ между ними и окрашиваем их в жёлтый цвет.
|
|
Что бы постоянно не нажимать на кнопку, что бы сделать следующий подсчёт соседей и выполнение действий, создадим таймер с интервалом в 0.1 секунду
Ещё нам нужно сделать обработчик события который при нажатии на клавишу мыши будет добавлять или убирать красный квадратик.
Далее переходим к части где будет производиться подсчёт соседей и производиться действия над красными квадратиками.
Объявляем двумерный массив, в котором будет хранится информация о соседях каждого красного квадратика. Далее с помощью цикла проходим всё поле. Объявляем вспомогательную переменную, в которую будем вносить количество соседей. Так как эта игра подразумевает бесконечное поле, но сделать это невозможно, поэтому мы приходим к такому выходу, как перенос красных квадратиков снизу вверх (и обратно) и слева направо (и обратно).
С помощью созданного квадрата, мы будем проверять 8 соседей каждого квадратика. Если сосед существует, то мы вносим в переменную +1.
Затем мы вносим количество соседей в двумерный массив. Повторяем эти действия, пока не пройдём по всему полю.
Далее создаём цикл для перебора массива, в котором хранятся данные о количестве соседей каждой клетки. Если количество соседей меньше 2 или больше 3, то данную клетку отмечаем жёлтым цветом. Если количество соседей равно 3, то данный квадратик помечаем красным цветом.
Графический интерфейс
Данная программа имеет следующий при запуске:
Кнопка «Выход» закрывает форму. Кнопка «Открыть поле» открывает поле Canvas с жёлтыми квадратиками. После ее нажатия она меняет свою функцию, теперь она очищает поле. Так же вместе с ней появляются кнопки «Начать игру», «Открыть рисунки» и «Сохранить фотографию рисунка». Ещё в правом углу появляется подсказка.
Нажав на жёлтый квадратик мы окрашиваем его в красный, тем самым задаём начальный рисунок. Так же если мы нажмём на красный квадратик, он окрасится в жёлтый.
Если мы нажмём на кнопку «Начать игру» то запустим программу по вышеуказанному алгоритму. Часто бывает что полученный рисунок или остаётся в неподвижном положении, или зацикливается. В данном случае он перешёл в неподвижный рисунок. Также кнопка «Начать игру» меняет свою функцию при нажатии и становится кнопкой «Остановить»
Кнопка «Открыть рисунки» открывает 3 чекбокса с названиями рисунков.
Что бы программа задала на поле рисунок, к примеру «Лёгкий корабль» нужно поставить галочку на нужном рисунке и нажать кнопку применить
Можно задать одновременно сразу 3 рисунка. При нажатии на кнопку «Очистить поле» поле очищается и снимается галочка со всех чекбоксов.
О кнопке «Сохранить фотографию рисунка» мы поговорим в следующем пункте.
Файловая система.
Данная программа позволяет сохранять фотографию полученного в процессе игры рисунка. При нажатии на кнопку «Сохранить фотографию рисунка» появляется меню, в котором мы можем указать путь и название сохраняемого графического файла (фотографии).
После сохранения мы можем посмотреть сохранённую фотографию