Веб-реализация японской настольной логической игры рендзю.
Рендзю - японская настольная логическая игра, представляющая собой в предельном упрощении спортивную вариацию крестиков-ноликов до 5 в ряд.
Данное приложение позволяет играть в рендзю онлайн с другими людьми.
- FastAPI
- PostgreSQL 14
- SQLAlchemy 1.4/2.0 (asyncpg)
- Alembic
- WebSockets
- AsyncIO
- Pytest
- Docker & docker-compose
- Nginx
- HTML / CSS / JavaScript
- По умолчанию: крестики-нолики на поле 15х15; 2 игрока; для победы нужно собрать 5 камней в ряд.
- С текущими модами игроков может быть 3, а поле - размера 30х30.
- Сдача, выход или разрыв соединения после подтверждения готовности приводят к поражению.
- Единственный оставшийся в игре игрок получает техническую победу.
- Закончившееся свободное место на доске ведет к проставлению всем игрокам ничьей.
- Используемые протоколы:
- WebSocket: для действий, требующих уведомления других пользователей
- HTTP: для всех остальных действий
- Процесс авторизации унифицирован для HTTP и WebSocket с помощью FastAPI Dependencies, ради чего пришлось отказаться от расширения fastapi-users.
- Access token един для HTTP и WebSocket; в первом случае он передается в заголовке (Bearer), во втором - как параметр запроса.
- Для тестов при подъеме docker-compose создается отдельная БД.
Основной функционал. Как бэкенд-разработчик, я делал упор на бэкенд-составляющую, так что внешний вид... может не впечатлять :)
Мобильные устройства на текущий момент не поддерживаются.
После регистрации, верификации почты и аутентификации:
Меню создания новой игры. Правила определяются на основе выбранных модов. Крестиком отмечены недоступные на данный момент моды (находящиеся в планах/в разработке):
Для тестовой игры примем правила по умолчанию:
К созданной игре можно присоединиться по ее ID либо, если чекбокс Private с предыдущего скриншота не был установлен, - через список публичных игр:
Создатель игры, тем временем, был перенаправлен на экран игры и подтвердил готовность:
Игра не начинается, пока оба игрока не подтвердят готовность. До подтверждения можно покинуть игру и не получить техническое поражение.
Все подтвердили готовность, определяется очередность ходов - доска разблокирована для текущего игрока:
Белые сделали ход - доска разблокирована для следующего игрока:
В напряженной борьбе белые собирают 5 камней в ряд и побеждают. Результаты сохряняются. Игроки возвращаются в главное меню.