Проект является реализацией клеточного автомата "Жизнь Конвея" на С++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 на другую предпочтительную библиотеку