14 октября 2017 г.

Симулятор игры "Жизнь" ("Game of life") на WPF

Все игры:

Исходный код:

Скачать




Game of life.zip
Скомпилированная версия

.NET Framework 4.0
Требуемая версия установленного Framework.

Однажды, просматривая видео на youtube, я наткнулся на крайне занимательный рассказ про клеточные автоматы. Они мне настолько понравилось, что захотелось самому увидеть их работу, а так же реализовать алгоритм на языке C#. Ссылка на то видео:


В нём достаточно хорошо все рассказано, поэтому в данной статье будет только краткое описание алгоритма и пример реализации.

Алгоритм (правила) работы клеточных автоматов.

Действие разворачивается на бесконечном поле в решётку. На каждом кадре анимации (называемом поколением), мы обходим все ячейки и вычисляем количество стоящих по периметру закрашенных клеток. Посчитав, выполняем два правила:
  1. Клетка закрашена. Если вокруг клетки ровно 2 или 3 закрашенные клетки, тогда с ней ничего не случается и она живёт, иначе становится пустой.
  2. Клетка пустая. Если вокруг ровно 3 закрашенные клетки, тогда в клетке зарождается жизнь и она становится закрашенной.

Пример на C# + WPF.


Исходный код своего проект я разместил на bitbucket.org, ссылка на проект размещена в начале статьи. Так же можно скачать (выше) собранную версию, но для её работы необходимо наличие предустановленного .NET Framework 4.0.

Интерфейс программы:



Элементы управления:
  1. Меню содержит пункты:
    New - создание нового чистого поля.
    Open - открытие сохранённого поля.
    SaveAs - сохранение текущего заполненного поля
  2. Содержит пункты запуска и остановки цикла "Жизни"
  3. Окно "Об авторе"
  4. Дублирует кнопки меню Life.
  5. Номер текущего поколения с начала запуска поля.
Рисование:

Рисовать можно по точечно левой кнопкой мыши, либо зажав левую кнопку водить мышку по полю, оставляя след. Для стирания точек можно по ним повторно нажимать, либо если требуется полная очистка - тогда использовать пункт меню File -> New. При этом можно участвовать в процессе и добавлять клетки пока идёт игра.

Примеры:

В папке examples содержатся несколько примеров автоматов с необычным поведением.
  1. Ship.life - после запуска похоже на плывущий корабль, оставляющий лопастями разводы на воде.

  2. Cross.life - обычный с виду крест при запуске превращается в красивую снежинку.

     
  3.  Glider_Gun1.life. Так же можно сделать генерирующие глайдеры фабрику.


    .
В интернете можно найти много примеров схем я же только даю инструмент для их создания.

Комментариев нет:

Отправить комментарий