376 lines
13 KiB
Markdown
376 lines
13 KiB
Markdown
|
|
# Game Marathon — Концепция
|
|||
|
|
|
|||
|
|
## Общее описание
|
|||
|
|
|
|||
|
|
**Game Marathon** — закрытая платформа для проведения игровых марафонов среди друзей (~10 человек), где за месяц нужно набрать максимум очков, выполняя случайные челленджи в случайных играх.
|
|||
|
|
|
|||
|
|
### Ключевые особенности
|
|||
|
|
|
|||
|
|
- Колесо рандома (игра → челлендж)
|
|||
|
|
- Игры добавляют сами участники + ссылки на скачивание
|
|||
|
|
- Челленджи генерирует нейросеть (интегрированное API)
|
|||
|
|
- Пруфы обязательны (скриншоты/видео/Steam ачивки) — загружаются на сервер
|
|||
|
|
- Социальные механики (вызовы, ставки, события)
|
|||
|
|
- Уведомления через Telegram-бота
|
|||
|
|
- Авторизация по логину/паролю
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Жизненный цикл марафона
|
|||
|
|
|
|||
|
|
### Фаза 1: Подготовка (3-7 дней до старта)
|
|||
|
|
|
|||
|
|
**Действия участников:**
|
|||
|
|
|
|||
|
|
1. Присоединяются к марафону (по ссылке-приглашению)
|
|||
|
|
2. Добавляют игры (название + ссылка на скачивание + обложка)
|
|||
|
|
3. Когда все готовы — организатор "закрывает" список игр
|
|||
|
|
4. Система (нейросеть) генерирует челленджи для каждой игры
|
|||
|
|
5. Участники могут посмотреть/предложить правки к челленджам
|
|||
|
|
6. Организатор запускает марафон
|
|||
|
|
|
|||
|
|
**Добавление игры включает:**
|
|||
|
|
|
|||
|
|
- Название игры
|
|||
|
|
- Ссылка на скачивание (для платных игр — сторонние ресурсы)
|
|||
|
|
- Обложка (загрузка или URL)
|
|||
|
|
- Жанр (опционально)
|
|||
|
|
|
|||
|
|
### Фаза 2: Генерация челленджей
|
|||
|
|
|
|||
|
|
После закрытия списка игр — автоматический запрос к API нейросети.
|
|||
|
|
|
|||
|
|
**Для каждой игры генерируется 5-7 челленджей:**
|
|||
|
|
|
|||
|
|
- 2 лёгких (15-30 минут)
|
|||
|
|
- 2-3 средних (1-2 часа)
|
|||
|
|
- 1-2 сложных (3+ часов)
|
|||
|
|
|
|||
|
|
**Каждый челлендж содержит:**
|
|||
|
|
|
|||
|
|
- Название
|
|||
|
|
- Описание
|
|||
|
|
- Тип (completion/no-death/speedrun/collection/achievement/etc)
|
|||
|
|
- Примерное время выполнения
|
|||
|
|
- Способ проверки (скриншот/видео/Steam ачивка)
|
|||
|
|
- Количество очков
|
|||
|
|
|
|||
|
|
После генерации участники могут предложить правки или добавить свои челленджи.
|
|||
|
|
|
|||
|
|
### Фаза 3: Активный марафон (1 месяц)
|
|||
|
|
|
|||
|
|
**Процесс выполнения:**
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
1. Крутишь колесо игр
|
|||
|
|
↓
|
|||
|
|
Выпадает случайная игра
|
|||
|
|
↓
|
|||
|
|
2. Крутишь колесо челленджей (для этой игры)
|
|||
|
|
↓
|
|||
|
|
Выпадает случайный челлендж
|
|||
|
|
↓
|
|||
|
|
3. Выбор:
|
|||
|
|
• Принять → идёшь выполнять
|
|||
|
|
• Дроп → штраф, крутишь заново
|
|||
|
|
↓
|
|||
|
|
4. Выполняешь задание
|
|||
|
|
↓
|
|||
|
|
5. Загружаешь пруф (скрин/видео/ссылка на Steam профиль)
|
|||
|
|
↓
|
|||
|
|
6. Получаешь очки + streak продолжается
|
|||
|
|
↓
|
|||
|
|
7. Можешь крутить снова
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Система очков
|
|||
|
|
|
|||
|
|
### Базовые очки
|
|||
|
|
|
|||
|
|
Зависят от сложности челленджа (определяет нейросеть при генерации):
|
|||
|
|
|
|||
|
|
| Сложность | Очки |
|
|||
|
|
|-----------|------|
|
|||
|
|
| Лёгкий | 30-50 |
|
|||
|
|
| Средний | 60-100 |
|
|||
|
|
| Сложный | 120-200 |
|
|||
|
|
|
|||
|
|
### Streak бонус
|
|||
|
|
|
|||
|
|
Последовательное выполнение заданий без дропов:
|
|||
|
|
|
|||
|
|
| Streak | Бонус |
|
|||
|
|
|--------|-------|
|
|||
|
|
| 1 | +0% |
|
|||
|
|
| 2 | +10% |
|
|||
|
|
| 3 | +20% |
|
|||
|
|
| 4 | +30% |
|
|||
|
|
| 5+ | +40% (максимум) |
|
|||
|
|
|
|||
|
|
### Дроп штрафы
|
|||
|
|
|
|||
|
|
Прогрессивная система штрафов:
|
|||
|
|
|
|||
|
|
| Дроп # | Штраф |
|
|||
|
|
|--------|-------|
|
|||
|
|
| 1 | Бесплатно (streak сбрасывается) |
|
|||
|
|
| 2 | -10 очков |
|
|||
|
|
| 3 | -25 очков |
|
|||
|
|
| 4 | -50 очков |
|
|||
|
|
| 5+ | -50 очков + кулдаун 2 часа |
|
|||
|
|
|
|||
|
|
Штрафы сбрасываются после успешного выполнения задания.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Подтверждение выполнения
|
|||
|
|
|
|||
|
|
### Типы пруфов
|
|||
|
|
|
|||
|
|
- **Скриншот** — загружается на сервер
|
|||
|
|
- **Видео** — загружается на сервер или ссылка (YouTube)
|
|||
|
|
- **Steam Achievement** — ссылка на профиль Steam с ачивкой
|
|||
|
|
|
|||
|
|
### Процесс верификации
|
|||
|
|
|
|||
|
|
1. Участник загружает пруф + опциональный комментарий
|
|||
|
|
2. Пруф виден всем участникам в ленте активности
|
|||
|
|
3. Любой участник может "оспорить" пруф (если считает невалидным)
|
|||
|
|
4. Если нет споров за 24 часа — автоматически засчитывается
|
|||
|
|
5. При споре — голосование участников или решение организатора
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Социальные механики
|
|||
|
|
|
|||
|
|
### Лента активности
|
|||
|
|
|
|||
|
|
Отображает в реальном времени:
|
|||
|
|
|
|||
|
|
- Выполненные челленджи (с пруфами)
|
|||
|
|
- Дропы
|
|||
|
|
- Кто крутит колесо и что выпало
|
|||
|
|
- События марафона
|
|||
|
|
- Вызовы между участниками
|
|||
|
|
|
|||
|
|
### Вызов (Challenge)
|
|||
|
|
|
|||
|
|
Когда участник выполнил челлендж, другие могут "вызвать" себя на тот же:
|
|||
|
|
|
|||
|
|
- Вызов заменяет текущее активное задание
|
|||
|
|
- Награда: стандартные очки за челлендж
|
|||
|
|
- Бонус: +30 очков если выполнить быстрее оригинального исполнителя
|
|||
|
|
|
|||
|
|
### Ставка (Bet)
|
|||
|
|
|
|||
|
|
Перед началом выполнения участник может поставить часть своих очков:
|
|||
|
|
|
|||
|
|
- **Выполнил:** награда + ставка x2
|
|||
|
|
- **Дропнул/провалил:** теряет ставку
|
|||
|
|
|
|||
|
|
Варианты ставок: 0 / 25 / 50 / 100 очков
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Система событий
|
|||
|
|
|
|||
|
|
Случайные события во время марафона (1-2 раза в неделю). Могут запускаться автоматически или вручную организатором.
|
|||
|
|
|
|||
|
|
| Событие | Описание | Длительность |
|
|||
|
|
|---------|----------|--------------|
|
|||
|
|
| **Золотой час** | Все очки x1.5 | 30-60 минут |
|
|||
|
|
| **Общий враг** | Все получают одинаковое задание, топ-3 = бонус | До выполнения |
|
|||
|
|
| **Двойной риск** | Дропы бесплатны, но очки x0.5 | 2 часа |
|
|||
|
|
| **Джекпот** | Следующему кто крутит — гарантированно сложный челлендж с x3 очками | 1 спин |
|
|||
|
|
| **Обмен** | Можно поменяться заданием с другим участником | 1 час |
|
|||
|
|
| **Реванш** | Можно переделать любой свой проваленный челлендж за 50% очков | 4 часа |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Таблица лидеров
|
|||
|
|
|
|||
|
|
Отображает для каждого участника:
|
|||
|
|
|
|||
|
|
- Место в рейтинге
|
|||
|
|
- Общее количество очков
|
|||
|
|
- Текущий streak
|
|||
|
|
- Количество выполненных челленджей
|
|||
|
|
- Количество дропов
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Модель данных
|
|||
|
|
|
|||
|
|
### User (Пользователь)
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
- id
|
|||
|
|
- login
|
|||
|
|
- password_hash
|
|||
|
|
- nickname
|
|||
|
|
- avatar
|
|||
|
|
- telegram_id (для уведомлений)
|
|||
|
|
- created_at
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Marathon (Марафон)
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
- id
|
|||
|
|
- title
|
|||
|
|
- description
|
|||
|
|
- organizer_id (User)
|
|||
|
|
- start_date
|
|||
|
|
- end_date
|
|||
|
|
- status: preparing | active | finished
|
|||
|
|
- invite_code
|
|||
|
|
- settings (JSON: события вкл/выкл, etc)
|
|||
|
|
- created_at
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Participant (Участник марафона)
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
- id
|
|||
|
|
- user_id
|
|||
|
|
- marathon_id
|
|||
|
|
- total_points
|
|||
|
|
- current_streak
|
|||
|
|
- drop_count (текущий счётчик для штрафов)
|
|||
|
|
- joined_at
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Game (Игра)
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
- id
|
|||
|
|
- marathon_id
|
|||
|
|
- title
|
|||
|
|
- cover_image (путь к файлу на сервере)
|
|||
|
|
- download_link
|
|||
|
|
- genre
|
|||
|
|
- added_by (User)
|
|||
|
|
- created_at
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Challenge (Челлендж)
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
- id
|
|||
|
|
- game_id
|
|||
|
|
- title
|
|||
|
|
- description
|
|||
|
|
- type: completion | no_death | speedrun | collection | achievement | challenge_run | score_attack | time_trial
|
|||
|
|
- difficulty: easy | medium | hard
|
|||
|
|
- points
|
|||
|
|
- estimated_time (в минутах)
|
|||
|
|
- proof_type: screenshot | video | steam_achievement
|
|||
|
|
- is_generated (boolean — создан AI или вручную)
|
|||
|
|
- created_at
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Assignment (Задание — выпавшее участнику)
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
- id
|
|||
|
|
- participant_id
|
|||
|
|
- challenge_id
|
|||
|
|
- status: active | completed | dropped
|
|||
|
|
- proof_file (путь к файлу на сервере)
|
|||
|
|
- proof_url (опционально — ссылка)
|
|||
|
|
- proof_comment
|
|||
|
|
- points_earned
|
|||
|
|
- bet_amount
|
|||
|
|
- started_at
|
|||
|
|
- completed_at
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Event (Событие)
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
- id
|
|||
|
|
- marathon_id
|
|||
|
|
- type: golden_hour | common_enemy | double_risk | jackpot | swap | rematch
|
|||
|
|
- start_time
|
|||
|
|
- end_time
|
|||
|
|
- is_active
|
|||
|
|
- data (JSON — доп. данные события)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Dispute (Оспаривание пруфа)
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
- id
|
|||
|
|
- assignment_id
|
|||
|
|
- raised_by (User)
|
|||
|
|
- reason
|
|||
|
|
- status: open | resolved_valid | resolved_invalid
|
|||
|
|
- resolved_by (User — организатор или голосование)
|
|||
|
|
- created_at
|
|||
|
|
- resolved_at
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Уведомления (Telegram-бот)
|
|||
|
|
|
|||
|
|
### Типы уведомлений
|
|||
|
|
|
|||
|
|
- Марафон скоро начнётся
|
|||
|
|
- Кто-то выполнил челлендж
|
|||
|
|
- Тебя вызвали на челлендж
|
|||
|
|
- Твой пруф оспорен
|
|||
|
|
- Началось событие (Золотой час и т.д.)
|
|||
|
|
- Напоминание: у тебя нет активного задания
|
|||
|
|
- Марафон завершён — итоги
|
|||
|
|
|
|||
|
|
### Настройки
|
|||
|
|
|
|||
|
|
Пользователь может включить/выключить отдельные типы уведомлений.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Технические решения
|
|||
|
|
|
|||
|
|
| Аспект | Решение |
|
|||
|
|
|--------|---------|
|
|||
|
|
| Авторизация | Логин/пароль |
|
|||
|
|
| Хранение пруфов | Загрузка на сервер |
|
|||
|
|
| Уведомления | Telegram-бот |
|
|||
|
|
| Генерация челленджей | Интегрированное API нейросети |
|
|||
|
|
| Формат марафона | 1 месяц (с перспективой других режимов) |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Перспективы развития
|
|||
|
|
|
|||
|
|
### Дополнительные режимы марафонов
|
|||
|
|
|
|||
|
|
- **Sprint** (4-12 часов) — интенсивный формат
|
|||
|
|
- **Daily Challenge** (1 неделя) — по 1-3 задания в день
|
|||
|
|
- **Tournament** — несколько раундов, выбывание
|
|||
|
|
|
|||
|
|
### Дополнительные механики
|
|||
|
|
|
|||
|
|
- Колесо модификаторов (без звука, одной рукой, и т.д.)
|
|||
|
|
- Командные марафоны (2v2, 3v3)
|
|||
|
|
- Глобальная статистика и достижения пользователя
|
|||
|
|
- Рейтинговая система игроков
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## UI/UX — Основные экраны
|
|||
|
|
|
|||
|
|
1. **Главная** — список марафонов (активные, завершённые)
|
|||
|
|
2. **Авторизация** — вход/регистрация
|
|||
|
|
3. **Создание марафона** — форма с настройками
|
|||
|
|
4. **Лобби марафона** — подготовка, добавление игр
|
|||
|
|
5. **Колесо** — основной геймплей (спин игры → спин челленджа)
|
|||
|
|
6. **Текущее задание** — детали + загрузка пруфа
|
|||
|
|
7. **Лента активности** — действия всех участников
|
|||
|
|
8. **Таблица лидеров** — рейтинг участников
|
|||
|
|
9. **История заданий** — все выполненные/дропнутые
|
|||
|
|
10. **Профиль** — настройки, статистика
|