https://github.com/exsaron/renju-online
Веб-реализация рендзю
https://github.com/exsaron/renju-online
fastapi sqlalchemy websocket
Last synced: about 1 month ago
JSON representation
Веб-реализация рендзю
- Host: GitHub
- URL: https://github.com/exsaron/renju-online
- Owner: exsaron
- Created: 2022-10-20T03:26:02.000Z (over 3 years ago)
- Default Branch: master
- Last Pushed: 2024-04-20T10:51:18.000Z (about 2 years ago)
- Last Synced: 2025-01-22T08:18:15.834Z (over 1 year ago)
- Topics: fastapi, sqlalchemy, websocket
- Language: Python
- Homepage:
- Size: 8.79 MB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Renju Online
Веб-реализация японской настольной логической игры [рендзю](https://ru.wikipedia.org/wiki/%D0%A0%D1%8D%D0%BD%D0%B4%D0%B7%D1%8E).
---
- [Описание](#описание)
- [Стэк](#стэк)
- [Правила](#правила)
- [Технические детали](#технические-детали)
- [Иллюстрации](#иллюстрации)
### Описание
**Рендзю** - японская настольная логическая игра, представляющая собой в предельном упрощении спортивную вариацию крестиков-ноликов до 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](https://fastapi.tiangolo.com/tutorial/dependencies/), ради чего пришлось отказаться от расширения fastapi-users.
- Access token един для HTTP и WebSocket; в первом случае он передается в заголовке (Bearer), во втором - как параметр запроса.
- Для тестов при подъеме docker-compose создается отдельная БД.
### Иллюстрации
Основной функционал. Как бэкенд-разработчик, я делал упор на бэкенд-составляющую, так что внешний вид... может не впечатлять :)
Мобильные устройства на текущий момент не поддерживаются.
Главное меню:

После регистрации, верификации почты и аутентификации:

Меню создания новой игры. Правила определяются на основе выбранных модов. Крестиком отмечены недоступные на данный момент моды (находящиеся в планах/в разработке):

Для тестовой игры примем правила по умолчанию:

К созданной игре можно присоединиться по ее ID либо, если чекбокс Private с предыдущего скриншота не был установлен, - через список публичных игр:

Создатель игры, тем временем, был перенаправлен на экран игры и подтвердил готовность:

Игра не начинается, пока оба игрока не подтвердят готовность. До подтверждения можно покинуть игру и не получить техническое поражение.

Все подтвердили готовность, определяется очередность ходов - доска разблокирована для текущего игрока:

Белые сделали ход - доска разблокирована для следующего игрока:

В напряженной борьбе белые собирают 5 камней в ряд и побеждают. Результаты сохряняются. Игроки возвращаются в главное меню.
