Skip to content

ingulff/Game_of_Life

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

63 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Жизнь Конвея

Описание

Проект является реализацией клеточного автомата "Жизнь Конвея" на С++17 и SDL2.

Опции сборки

  • TT_BUILD_TESTS - включает тесты с сборку проекта. По умолчанию OFF;
  • DF_WIN_WIDTH - задает ширину окна для приложения. По умолчанию ширина окна 1900;
  • DF_WINDOW_HEIGHT - задает высоту окна приложения. По умолчанию высота окна 1000;
  • DF_CELL_SIDE - задает размер "ячейки" игрового поля. По умолчанию 20;
  • DF_LOOP_BOARD - "зацикливание доски". По умолчанию 0;
  • DF_FULLSCREEN - переключение в полноэкранный режим и обратно. По умочанию 0;

Примеры вызовов cmake

$ cmake -G Ninja -S . -B out/linux -DCMAKE_BUILD_TYPE=Release
# или
$ cmake --preset dev-linux

$ cmake --build build/linux

Сборка проверена:

  • ubuntu 22.04
    • cmake
    • clang & clang++
  • Windows 11
    • cmake 3.20.21032501
    • Visual Studo 16 2019
    • MSVC 19.29.30154.0

Особенности сборки

  • Перед сборкой добавьте в cmake/3rdparty_config.cmake опции:
    • SDL_INSTALL_PATH - директория, где установлена SDL

Тесты

Планировались, но не сделаны

Использование приложения

Опции

  • Динамические размеры игрового поля:
    • При запуске приложения можно передать в аргументах командной строки опции, задающии ширину
      высоту окна. Примеры:
     $ ./game_of_life -s 100  # задает сторону квадратного игрового поля
     $ ./game_of_life  # использует дефолтные настройки
     $ ./game_of_life -w 100 -h 50 # или наоборот, -w - ширина игрового поля, -h - высота игрового поля
    Важно
    Важно указать правильно флаги -s или -w и -h без них парсинг аргументов командной строки не работает.
  • Режим "Паузы". Игра начинается с пустым игровым полем в режиме "Пауза". После установки "живых" игровых
    клеток нужно запустить игру нажатием клави Пробел. В любой момент времени можно переходить в режим "Пауза""Игра"
    нажатием клавиши "Пробел"
  • Очистка игрового поля. В любой момент игры нажатием клваили c очищает все игровое поле.
  • Включение режима зацикленного "кругового" поля. В любой момент игры нажатием клавиви l (л) можно перевести поле в
    режим когда его края как бы соединены друг с другом.
  • Переход в полноэкранный режим. В любой момент времени можно перевести игру в полноэкранный режим, нажав клавишу f.
    Выход из полноэкранного режима осуществляется повторным нажатием клависи "f"
  • Установка "живого" состояник клетки игрового поля. Для того чтобы установить клетку в "живое" состояние нужно в режиме
    "Пауза" нажать (и\или удерживать) Левую кновку мыши. Чтобы отменить "оживление клетки" нужно на нее же кликнуть (и\или
    удерживать) Правой кнопкой мыши или Очистить все поле сразу.

Особенности реализации

  • Игрок может устанавливать и удалять клетки только в режиме "пауза".
  • При запуске игровое поле центрируется относительно экрана.
  • При смене экранного режима, игровое поле распологается по центру экрана
  • При задании размеров игрового поля через аргументы командной строки игнорируется значение стороны клетки, заданное в cmakе опциях
    поэтому желательно чтобы выполнялось условие min(window_w \ board_w, window_h \ board_h) >= 10, где window_ - параметры окна
    приложения, заданные в cmake, board_ размеры игрвого поля, переданные через аргументы командной строки
  • При установке настроек игры через cmake так же желательно не делать сторону ячейки меньше 10, на слишком маленьких ячейках
    не удобно мышкой устанавливать клетки
  • игровое поле хранится по 1 биту на ячейку, в виде массива байт. и предоставляет возможность итерирования через итераторы. Итераторы
    написаны двух видов: обычный, использующийся для обхода всего поля. и "Живаой" итератор, для обхода живых клеток. Итераторы можно легко доделать совместимыми друг с другом. Игра спроектирована так, что достаточно несложно заменить SDL на другую предпочтительную библиотеку

About

Implementation Conway's Game of Life with SDL2

Resources

License

Stars

Watchers

Forks

Packages

No packages published