Skip to content

imitrichev/GameOfLife

Repository files navigation

GameOfLife

Классы 0) состояние (State) - определяет состояние клетки. Абстрактный класс

  1. двухпозиционное состояние - наследник Состояния. Клетка жива (1) или мертва (0).
  2. правило (Rule) - содержит в себе правило изменения состояния клетки. Это абстрактный класс (интерфейс). Правило должно уметь получив массив состояний ячеек, применить к ниму некоторую эвристику, собственно правило.
  3. правило игры "Жизнь" - наследник правила. Описывает правило изменения состояния клетки
  • если вокруг ровно три живые клетки, а клетка мертва, она оживает;
  • для живой клетки: если живых соседей 2 или 3, клетка остается живой, иначе умирает.
  1. модифицированная игра "Жизнь" - наследник правила. Описывает правило изменения состояния клетки
  • если вокруг ровно две живые клетки, а клетка мертва, она оживает;
  • для живой клетки: если живых соседей от 3 до 5, клетка остается живой, иначе умирает.
  1. клетка (Cell) - хранит в себе объект Состояние, Правило и свои координаты (позицию по горизонтали/вертикали). Умеет возвращать состояние, есть метод обновить состояние, который применяет правило к состоянию.
  2. Поле (Field). Есть метод обновить состояние. Абстрактный класс! Есть метод - обновить поле - обновляет состояние всех клеток (вызывает обновление! клетки, а там передает работу состоянию). Есть метод - получить состояние всех клеток. Этот метод нужен для вывода на экран состояния поля.
  3. Замкнутое поле - соответствует физическим периодическим граничным условиям. Клетки сверху граничат с нижними, левые - с правыми (топология - тор). Хранит двумерный массив (вектор) клеток и дополнительные ряды (всего 4 ряда) клеток сверху-снизу-слева-справа для удобства проверки. Дополнительные ряды можно хранить отдельно по константной ссылке (тогда массив надо выносить в базовый класс, что обсудить с разработчиками того класса), а можно прямо в массиве. В случае "прямо в массиве" обновление состояния помимо традиционного обновления (метод базового класса) вызывает доп. метод - копирование состояний с ячеек основой части поля для дополнительных рядов. Незамкнутое поле - нет периодических ГУ в отличие от предыдущего класса. Для удобства, реализуется теми же разработчиками, что и замкнутое поле.
  4. Клеточный автомат. Хранит в себе поле. Имеет один метод - запустить игру. В этом методе в цикле обновляется состояние поля с задержкой 1 секунда, выводится на экран состояние всех клеток (просто куча нулей и единиц в виде матрицы и после - пустая строка, например) и есть проверка - если число итераций > 1000 или если состояния всех клеток - "мертва" - завершить игру.
  5. Главная функция. Ввод пользователя - задание размеров поля; задание координат живых клеток, или случайное заполнение живых клеток. Создается КА, запускается игра. Освобождается память, если нужно.

Releases

No releases published

Packages

No packages published