Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/i-redbyte/life-game
https://github.com/i-redbyte/life-game
Last synced: 2 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/i-redbyte/life-game
- Owner: i-redbyte
- License: mit
- Created: 2024-01-28T00:03:39.000Z (12 months ago)
- Default Branch: master
- Last Pushed: 2024-09-12T23:28:15.000Z (4 months ago)
- Last Synced: 2024-11-01T01:22:11.013Z (2 months ago)
- Language: Kotlin
- Size: 9.7 MB
- Stars: 15
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Игра Жизнь
| ![Стартовый экран](misc/startScreen.png) | ![Меню правил](misc/menuOfRules.png) |
|:---------------------------------------:|:-----------------------------------:|
| Стартовый экран | Меню правил |**Игра Жизнь** — это реализация [знаменитого](https://ru.wikipedia.org/wiki/%D0%98%D0%B3%D1%80%D0%B0_%C2%AB%D0%96%D0%B8%D0%B7%D0%BD%D1%8C%C2%BB) клеточного автомата Джона Конвея на языке Kotlin. Проект включает две версии игры: одну с использованием **OpenGL** для работы с графикой низкого уровня, и другую с использованием **Jetpack Compose**. В этой игре поддерживаются различные модификации правил, что позволяет варьировать поведение клеток и экспериментировать с их эволюцией.
## Особенности
- **Две версии игры**:
- **OpenGL**
- **Jetpack Compose**:| | |
|:-----------------------------------------------------------------------------------:|:-----------------------------------------------------------------------------:|
| Compose version | OpenGL version |
- **Поддержка различных правил** для изменения логики поведения клеток.
- **Высокая производительность** благодаря оптимальной работе с игровым полем через представление его в виде битовых последовательностей.## Игровое поле
Игровое поле представлено классом `GameBoard`. В основе его работы лежит `CellMatrix` — список целых чисел (`Long`), где каждый бит представляет состояние клетки: живая или мёртвая.
### Основные функции `GameBoard`
- **Инициализация поля**: клетки случайным образом заполняются исходя из начальных настроек игры.
- **Обновление состояния клеток**: для каждой клетки проверяется количество соседей, и на основе заданного правила определяется, останется ли клетка живой или умрет.
- **Подсчет соседей**: для каждой клетки можно подсчитать количество живых соседей, учитывая восемь возможных направлений.
- **Оптимизация**: управление состояниями клеток на основе битовых операций, что позволяет работать с большим количеством клеток эффективно.### Пример работы с битами
Для управления состоянием клеток используются битовые операции.
## Правила игры
Правила игры определяют, будет ли клетка живой или мертвой в следующем поколении, в зависимости от её текущего состояния и числа живых соседей.]
Некоторые из доступных правил:
- **ClassicRule** — классические правила Конвея.
- **DayAndNightRule** — клетки остаются живыми или возрождаются при 3, 6, 7 или 8 соседях.
- **HighLifeRule** — добавляет возможность возрождения клетки при 6 соседях.
- **ReplicatorRule** — клетки остаются живыми, если у них нечётное количество соседей.
- **MorleyRule** — клетки остаются живыми при 2, 4 или 5 соседях, а возрождаются при 3 или 6 соседях.
- **TwoByTwoRule** — клетки остаются живыми при 1, 2 или 5 соседях, а возрождаются при 3 или 6 соседях.
- **DiamoebaRule** — клетки остаются живыми при 5-8 соседях, а возрождаются при 3, 5, 6 или 7 соседях.
- **LifeWithoutDeathRule** — клетки остаются живыми навсегда или возрождаются при 3 соседях.
- **SeedsRule** — клетки могут возродиться только при 2 соседях, но никогда не остаются живыми на следующем ходу.## Установка
1. Вы можете скачать последнюю релизную версию по этой [ссылке](https://github.com/i-redbyte/life-game/releases).2.1. Склонируйте репозиторий:
```bash
git clone https://github.com/i-redbyte/life-game.git
```2.2. Откройте проект в Android Studio и синхронизируйте зависимости.
2.3. Запустите приложение на эмуляторе или физическом устройстве.
## Вклад в проект
Вы можете предлагать улучшения, исправления или добавлять новые правила, создавая pull request или открывая issue.
## Лицензия
Этот проект распространяется по лицензии MIT. Подробности смотрите в файле [LICENSE](LICENSE).