Графический интерфейс

Отчёт по индивидуальному заданию

Анализ предметной области. Функциональность программы

Идея клеточных автоматов появилась в конце сороковых годов 20 века. Она была задумана и сформулирована Джоном фон Нейманом и Конрадом Цусе независимо друг от друга как универсальная вычислительная среда для построения, анализа и сравнения характеристик алгоритмов. Клеточный автомат представляет собой совокупность пространства, поделенного на клетки, в каждой из которых содержится некое значение, и правил, задающих закон преобразования при совершении шага. Это пространство может быть как плоскостью, так и любым N-мерным пространством. Представим себе некоторое однородное пространство, состоящее из клеток. Каждая клетка обладает несколькими состояниями, которые могут зависеть от следующих параметров:

1)"Соседи" клетки - клетки, располагающиеся в непосредственной близости от данной;

2) количество ходов, прошедших от начала игры;

3) свойства самой клетки и т.д.

Правила игры достаточно просты:

Полем для игры является бесконечная плоскость, разбитая на клетки. Каждая

клетка может находиться в двух состояниях: "живом" и "мертвом". Правила перехода клетки в новое состояние выбирается из следующих критериев: минимальное, максимальное количество соседей для "рождения" клетки, минимальное, максимальное количество соседей для "вымирания" клетки. Конвей много экспериментировал с этими параметрами и остановился на

следующем:

1)Соседями клетки являются все восемь клеток, имеющих либо общую сторону, либо общую вершину.

2)Клетка рождается, если количество соседей равно 3

3)Клетка умирает, если количество соседей либо больше 3 (перенаселение), либо меньше 2 (одиночество). В процессе игры популяция непрестанно претерпевает необычные, нередко очень красивые и всегда неожиданные изменения. Иногда первоначальная колония организмов вымирает, но, в большинстве своем, исходные конфигурации либо переходят в устойчивые и перестают изменяться, либо переходят в колебательный режим.

 

Программа отображает состояние системы для произвольного n.  Так же программа имеет базу стандартных конфигураций клеток для последующего использования. Программа сохраняет графический файл полученного результата в выбираемую пользователем папку.

Алгоритм задачи

Данный алгоритм основан на разметке Canvas, поэтому для начала мы создаем разметку Canvas. Далее мы заполняем эту разметку прямоугольниками (квадратиками). Их количество мы указали в константе. Ещё нам нужно создать прямоугольник (квадрат), который будет отвечать за область подсчёта соседей. Так же для визуализации мы делаем отступ между ними и окрашиваем их в жёлтый цвет.

 

Что бы постоянно не нажимать на кнопку, что бы сделать следующий подсчёт соседей и выполнение действий, создадим таймер с интервалом в 0.1 секунду

Ещё нам нужно сделать обработчик события который при нажатии на клавишу мыши будет добавлять или убирать красный квадратик.

 

 

Далее переходим к части где будет производиться подсчёт соседей и производиться действия над красными квадратиками.

Объявляем двумерный массив, в котором будет хранится информация о соседях каждого красного квадратика. Далее с помощью цикла проходим всё поле. Объявляем вспомогательную переменную, в которую будем вносить количество соседей. Так как эта игра подразумевает бесконечное поле, но сделать это невозможно, поэтому мы приходим к такому выходу, как перенос красных квадратиков снизу вверх (и обратно) и слева направо (и обратно).

 

С помощью созданного квадрата, мы будем проверять 8 соседей каждого квадратика. Если сосед существует, то мы вносим в переменную +1.

Затем мы вносим количество соседей в двумерный массив. Повторяем эти действия, пока не пройдём по всему полю.

 

Далее создаём цикл для перебора массива, в котором хранятся данные о количестве соседей каждой клетки. Если количество соседей меньше 2 или больше 3, то данную клетку отмечаем жёлтым цветом. Если количество соседей равно 3, то данный квадратик помечаем красным цветом.

 

 

Графический интерфейс

Данная программа имеет следующий при запуске:

 

 

Кнопка «Выход» закрывает форму. Кнопка «Открыть поле» открывает поле Canvas с жёлтыми квадратиками. После ее нажатия она меняет свою функцию, теперь она очищает поле. Так же вместе с ней появляются кнопки «Начать игру», «Открыть рисунки» и «Сохранить фотографию рисунка». Ещё в правом углу появляется подсказка.

 

 

Нажав на жёлтый квадратик мы окрашиваем его в красный, тем самым задаём начальный рисунок. Так же если мы нажмём на красный квадратик, он окрасится в жёлтый.

 

 

Если мы нажмём на кнопку «Начать игру» то запустим программу по вышеуказанному алгоритму. Часто бывает что полученный рисунок или остаётся в неподвижном положении, или зацикливается. В данном случае он перешёл в неподвижный рисунок. Также кнопка «Начать игру» меняет свою функцию при нажатии и становится кнопкой «Остановить»

 

 

Кнопка «Открыть рисунки» открывает 3 чекбокса с названиями рисунков.

 

 

Что бы программа задала на поле рисунок, к примеру «Лёгкий корабль» нужно поставить галочку на нужном рисунке и нажать кнопку применить

 

 

Можно задать одновременно сразу 3 рисунка. При нажатии на кнопку «Очистить поле» поле очищается и снимается галочка со всех чекбоксов.

 

О кнопке «Сохранить фотографию рисунка» мы поговорим в следующем пункте.

 

Файловая система.

Данная программа позволяет сохранять фотографию полученного в процессе игры рисунка. При нажатии на кнопку «Сохранить фотографию рисунка» появляется меню, в котором мы можем указать путь и название сохраняемого графического файла (фотографии).

 

После сохранения мы можем посмотреть сохранённую фотографию

 

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: