(En)
Набор модулей и несколько вариантов сборок для создания двухмерных "плиточных" игр.
В мире существует большое множество типов игр, которые я называю "плиточные игры". И то, что есть общего у них всех, выделено, или будет выделено, в отдельные модули для дальнейшего использования при реализации конкретных плиточных игр.
Такая игра всегда имеет прямоугольное поле, состоящее из X на Y плиток (чаще всего X = Y). У каждой плитки есть свои уникальные двумерные координаты (0 <= x < X; 0 <= y < Y). В каждой из плиток могут быть или не быть игровые объекты (далее - объекты). На одной плитке может присутствовать несколько объектов разного типа, но не должно быть более одного типа объекта. Взаимодействие объектов зависит в т.ч. от координат плиток - т.е. важно именно то, что тот или иной объект находится на той или иной плитке, у которой, в свою очередь, есть ближние и дальние соседние плитки в направлении каждой из вертикалей и горизонталей - другие объекты и/или плитки со всех её сторон (кроме боковых и угловых).
На данном этапе предполагаются такие дополнительные ограничения:
- объекты могут быть только одноплиточные (т.е. занимающие одну плитку);
- игры с реал-таймом не будут реализованы;
- должна быть определённая симметрия игрового процесса:
-
- либо все стороны главного поля или направления движения объектов полностью равноправны,
-
- либо хотя-бы противоположные стороны или направления движения объектов должны быть равноправны.
С точки зрения визуализации, размер каждой плитки одинаков (но на работу логики игр это никак не влияет).
1.1.1. Несколько примеров "плиточных игр" (в строке, через запятую, совмещены по похожести в классификации):
- Крестики-нолики, Рендзю;
- Шашки, Шахматы, Поддавки, Уголки;
- Го;
- Сапёр;
- Сокобан;
- 2048;
- Реверси;
- Судоку, Японский кроссворд.
- Лото;
- Домино;
- карточные игры;
- ходилки, в которых игровые объекты перемещаются по извилистым маршрутам;
- Нарды (да, доску можно представить как прямоугольник 2 х 12, но ходят фишки исключительно по кругу и на одной плитке могут стоять несколько одинаковых объектов).
1.1.2.1. Несколько примеров игр, не являющихся "плиточной игрой" из-за дополнительных ограничений (см. п. 1.1.):
- Тетрис (т.к. есть многоплиточные объекты, реал-тайм, не достаточная симметричноть процесса);
- Змейка (т.к. есть многоплиточные объекты, реал-тайм);
- Морской бой (т.к. есть многоплиточные объекты).
Имеющиеся игры были классифицированы (см. сюда). И эта классификация вполне может стать частью фреймворка.
Языки:
- Java 19,
- HTML (пока не реализовано в web-клиенте),
- JavaScript (пока не реализовано в web-клиенте).
Системы сборки, модулирования, версионирования:
- Maven,
- git,
- Java 9 Modules (Project Jigsaw).
Метод сериализации и десериализации (для передачи между сервером и клиентами):
- Реализации интерфейса Externalizable.
Обмен информацией по сети:
- Java-WebSocket 1.5.4.
Логирование:
- SLF4J 1.7.36,
- LogBack 1.2.11.
GUI:
- Java-FX 18.0.1. (для клиента на java).
Тестирование:
- JUnit 5.0
Данный проект является фреймворком. Для него можно разрабатывать и встраивать в него отдельные модули под конкретную плиточную игру, реализующие модель, визуализацию и управление игрой (модель-представление-контролер). Как результат, могут быть получены различные варианты сборки. Так или иначе в функционирующем ПО будут сервер и клиент(ы). Приведу некоторые примеры таких вариантов:
- "Всё в одном" - сервер и клиент собраны в один исполняемый модуль, но доступны при этом только игры с одним игроком.
- Сервер. Может быть собран:
-
- либо как целостное приложение,
-
- либо как приложение, присоединяемое к Web-серверу.
- Клиент. Может быть собран:
-
- либо как целостное приложение, собранное для старта на произвольной ОС (где есть JVM, в т.ч. Ms Windows, Linux).
-
-
- вероятно для смартфонов (Android, iOS) понадобятся специфические клиенты.
-
-
- либо как браузерное приложение.
Данный проект является учебным.
Возможно, он может оказаться полезным при освоении построений архитектур и тех технологий, которые в нём применяются.
Как запустить проект? Есть ли у проекта минимальные аппаратные требования?
Ранее мы уже упоминали о библиотеках и их версиях. При необходимости технологии, запуск и аппаратные требования можно объединить. Но если разделить их на два подраздела, то здесь стоит остановиться именно на запуске проекта. Когда у нас есть сайт или приложение, речь может идти о настройке локального окружения, ссылке на страницы GitHub или развернутом приложении на Heroku. Нужны ли нам исходные данные? Если да, то в каком формате?
В качестве примеров использования фреймворка представлены игры Сокобан и Сапёр.
Проект находится в стадии разработки.
Если наш код основан на чужом коде, то следует добавить такую информацию. Если наш код был лишь вдохновлен другим решением/приложением, можно упомянуть об этом и написать, как вы вдохновились, какие изменения внесли, какой функционал развили.
Информация об авторе, контактные данные, ссылки на www и социальные сети, тип лицензии, под которой предоставляется код, или информация о том, как внести свой вклад в проект, - это лишь примеры того, что можно добавить в ваш проект.
Автор: Тимченко Максим.
www: ??? (в т.ч. на котором можно разместить:
- видео с демонстрацией запуска и работы различных вариантов сборки,
- браузерный вариант клиента).
e-mail:
Иллюстрации стоит сделать. И в т.ч. отдельные лого для приложения и для github.