Проект доступен по адресу: https://otlichnik-game.ru/
Это свайп-веб-игра на Flask. Написана для участия в ярмарке в школе "Отличник" Хабаровск в соавторстве с ChatGPT
Свайпайте в сторону, куда указывает Отличник: Если шапочка красная — в ту же сторону, Если шапочка синяя — в противоположную. Cобирайте комбо и побеждайте! В день ярмарки продавались билеты для участия в призовом розыгрыше!
- интерфейс администратора для выдачи ключей
- лидерборд для призовой и обычной игры
- обработку игровых данных с помощью API
- Python 3.9+
- Flask
- SQLite (база данных)
- HTML / Jinja2 (шаблоны)
- JavaScript (на стороне клиента)
- flasgger
- ChatGPT (ну помогала, да )
-
Клонируйте репозиторий:
git clone https://gitverse.ru/t0nyhat/otlichnik-swipe-game.git cd game -
Создайте виртуальное окружение и активируйте:
python -m venv venv source venv/bin/activate # Linux/macOS venv\Scripts\activate # Windows
-
Установите зависимости:
pip install -r requirements.txt
-
Запустите приложение:
flask run
-
Сборка Docker-образа:
docker build -t game-app . -
Запуск контейнера:
docker run -p 5000:5000 game-app
-
Swagger UI будет доступен по адресу: http://localhost:5000/apidocs
В проекте используется SQLite база данных game.db с двумя основными таблицами:
Хранит игровые ключи и их привязку к пользователям.
| Поле | Тип | Описание |
|---|---|---|
keyID |
TEXT (PK) | Уникальный идентификатор ключа |
created_at |
TIMESTAMP | Дата создания ключа (по умолчанию — текущая дата) |
used_by |
TEXT (UNIQUE) | Идентификатор пользователя (userID), который использовал ключ |
Хранит результаты пользователей.
| Поле | Тип | Описание |
|---|---|---|
userID |
TEXT | Идентификатор пользователя (cookie) |
keyID |
TEXT | Игровой ключ, по которому засчитан результат |
name |
TEXT | Имя игрока |
score |
INTEGER | Очки игрока |
date |
TEXT | Дата записи результата |
scores.keyIDссылается наkeys.keyIDkeys.used_byссылается наscores.userID"""
Это API для игры с использованием Flask, Flasgger, SQLite и cookie.
- Описание: Главная страница
- Ответ: HTML-страница
- Описание: Страница с технической информацией
- Ответ: HTML-страница
- Описание: Отправка игрового результата
- Параметры (form-data):
keyID(string) — игровой ключname(string) — имя игрокаscore(integer) — результат игрока
- Cookie:
userID(string, optional) — идентификатор пользователя
- Ответы:
200 OK— результат успешно сохранён400 Bad Request— ошибка в данных403 Forbidden— ключ недействителен
- Описание: Установить новое имя игрока
- Параметры (form-data):
new_name(string) — новое имя игрока
- Cookie:
userID(string, optional) — идентификатор пользователя
- Ответы:
200 OK— имя успешно сохранено400 Bad Request— ошибка при сохранении
- Описание: Привязка игрового ключа к пользователю
- Параметры (form-data):
keyID(string) — игровой ключ
- Cookie:
userID(string, optional)
- Ответы:
200 OK— ключ успешно привязан400 Bad Request— ошибка при привязке
- Описание: Админ-панель
- Ответ: HTML-страница
- Описание: Генерация нового ключа (для администратора)
- Параметры (form-data):
admin_password(string) — пароль администратора
- Ответы:
200 OK— ключ успешно создан403 Forbidden— неверный пароль администратора
- Описание: Лидерборд по ключам
- Cookie:
userID(string, optional)
- Ответ: JSON-массив с ключами и очками
- Описание: Топ игроков
- Cookie:
userID(string, optional)
- Ответ: JSON-массив с именами и очками
- Описание: HTML-версия лидерборда
- Ответ: HTML-страница
- Описание: Получение рейтинга игрока
- Cookie:
userID(string, optional)
- Ответ: JSON-объект с рангом и очками
index.html— главная страница игрыadmin.html— админкаleaderboard.html— лидербордtech.html— техническая инфаkey_leaderboard.html— лидерборд по ключам
- Перебрать весь код ChatGPT
- Разобрать фронт на составляющие
- Написать тесты для API
- Улучшить обработку ошибок
- Добавить CI/CD