Skip to content

t0nyhat/otlichnik-swipe-game

Repository files navigation

🌐 Развёртывание

Проект доступен по адресу: https://otlichnik-game.ru/

Описание

Это свайп-веб-игра на Flask. Написана для участия в ярмарке в школе "Отличник" Хабаровск в соавторстве с ChatGPT

Свайпайте в сторону, куда указывает Отличник: Если шапочка красная — в ту же сторону, Если шапочка синяя — в противоположную. Cобирайте комбо и побеждайте! В день ярмарки продавались билеты для участия в призовом розыгрыше!

  • интерфейс администратора для выдачи ключей
  • лидерборд для призовой и обычной игры
  • обработку игровых данных с помощью API

🚀 Технологии

  • Python 3.9+
  • Flask
  • SQLite (база данных)
  • HTML / Jinja2 (шаблоны)
  • JavaScript (на стороне клиента)
  • flasgger
  • ChatGPT (ну помогала, да )

⚙️ Установка и запуск

  1. Клонируйте репозиторий:

    git clone https://gitverse.ru/t0nyhat/otlichnik-swipe-game.git
    cd game
  2. Создайте виртуальное окружение и активируйте:

    python -m venv venv
    source venv/bin/activate  # Linux/macOS
    venv\Scripts\activate     # Windows
  3. Установите зависимости:

    pip install -r requirements.txt
  4. Запустите приложение:

    flask run

🐳 Docker

  1. Сборка Docker-образа:

    docker build -t game-app .
  2. Запуск контейнера:

    docker run -p 5000:5000 game-app
  3. Swagger UI будет доступен по адресу: http://localhost:5000/apidocs


🗄️ Описание базы данных

В проекте используется SQLite база данных game.db с двумя основными таблицами:

📍 Таблица keys

Хранит игровые ключи и их привязку к пользователям.

Поле Тип Описание
keyID TEXT (PK) Уникальный идентификатор ключа
created_at TIMESTAMP Дата создания ключа (по умолчанию — текущая дата)
used_by TEXT (UNIQUE) Идентификатор пользователя (userID), который использовал ключ

🏆 Таблица scores

Хранит результаты пользователей.

Поле Тип Описание
userID TEXT Идентификатор пользователя (cookie)
keyID TEXT Игровой ключ, по которому засчитан результат
name TEXT Имя игрока
score INTEGER Очки игрока
date TEXT Дата записи результата

🔗 Связи между таблицами

  • scores.keyID ссылается на keys.keyID
  • keys.used_by ссылается на scores.userID """

📡 API эндпоинты

Это API для игры с использованием Flask, Flasgger, SQLite и cookie.

GET /

  • Описание: Главная страница
  • Ответ: HTML-страница

GET /tech

  • Описание: Страница с технической информацией
  • Ответ: HTML-страница

POST /submit

  • Описание: Отправка игрового результата
  • Параметры (form-data):
    • keyID (string) — игровой ключ
    • name (string) — имя игрока
    • score (integer) — результат игрока
  • Cookie:
    • userID (string, optional) — идентификатор пользователя
  • Ответы:
    • 200 OK — результат успешно сохранён
    • 400 Bad Request — ошибка в данных
    • 403 Forbidden — ключ недействителен

POST /set_name

  • Описание: Установить новое имя игрока
  • Параметры (form-data):
    • new_name (string) — новое имя игрока
  • Cookie:
    • userID (string, optional) — идентификатор пользователя
  • Ответы:
    • 200 OK — имя успешно сохранено
    • 400 Bad Request — ошибка при сохранении

POST /set_key

  • Описание: Привязка игрового ключа к пользователю
  • Параметры (form-data):
    • keyID (string) — игровой ключ
  • Cookie:
    • userID (string, optional)
  • Ответы:
    • 200 OK — ключ успешно привязан
    • 400 Bad Request — ошибка при привязке

GET /admin

  • Описание: Админ-панель
  • Ответ: HTML-страница

POST /admin/generate

  • Описание: Генерация нового ключа (для администратора)
  • Параметры (form-data):
    • admin_password (string) — пароль администратора
  • Ответы:
    • 200 OK — ключ успешно создан
    • 403 Forbidden — неверный пароль администратора

GET /key_leaderboard

  • Описание: Лидерборд по ключам
  • Cookie:
    • userID (string, optional)
  • Ответ: JSON-массив с ключами и очками

GET /leaderboard

  • Описание: Топ игроков
  • Cookie:
    • userID (string, optional)
  • Ответ: JSON-массив с именами и очками

GET /leaderboard.html

  • Описание: HTML-версия лидерборда
  • Ответ: HTML-страница

GET /rank

  • Описание: Получение рейтинга игрока
  • Cookie:
    • userID (string, optional)
  • Ответ: JSON-объект с рангом и очками

📄 Шаблоны (templates)

  • index.html — главная страница игры
  • admin.html — админка
  • leaderboard.html — лидерборд
  • tech.html — техническая инфа
  • key_leaderboard.html — лидерборд по ключам

📌 To-Do

  • Перебрать весь код ChatGPT
  • Разобрать фронт на составляющие
  • Написать тесты для API
  • Улучшить обработку ошибок
  • Добавить CI/CD

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors