Полнофункциональная игра "три в ряд" в стиле Homescapes, разработанная на HTML5/JavaScript с бэкендом на Go.
- 8x8 игровое поле с 6 типами фишек
- Специальные элементы:
- Полосатые фишки (горизонтальные/вертикальные) - уничтожают ряд/столбец
- Бомбы - уничтожают область 3x3
- Радужные - уничтожают все фишки одного цвета
- Препятствия:
- Коробки (1-3 удара)
- Лёд (1-2 слоя)
- Желе (1-3 слоя)
- Цепи (блокируют движение)
- Бустеры: Молоток, Ракеты, Бомба, Перемешивание
- 50 уровней с возрастающей сложностью
- Система достижений и лидерборды
- Магазин с бустерами и монетами
- Офлайн-режим с локальным сохранением
gameTri/
├── frontend/ # Клиентская часть
│ ├── index.html # Главная страница
│ ├── styles.css # Главный CSS (импорты)
│ ├── styles/ # CSS модули
│ │ ├── variables.css # CSS переменные
│ │ ├── base.css # Базовые стили
│ │ ├── buttons.css # Стили кнопок
│ │ ├── menu.css # Главное меню
│ │ ├── level-map.css # Карта уровней
│ │ ├── game.css # Игровой экран
│ │ ├── popups.css # Попапы
│ │ ├── shop.css # Магазин
│ │ ├── settings.css # Настройки
│ │ ├── leaderboard.css # Лидерборд
│ │ ├── notifications.css # Уведомления
│ │ ├── animations.css # Анимации
│ │ └── responsive.css # Адаптивность
│ ├── src/
│ │ ├── utils/ # Утилиты
│ │ │ ├── Config.js # Конфигурация
│ │ │ ├── Storage.js # LocalStorage
│ │ │ ├── API.js # API клиент
│ │ │ └── SoundManager.js
│ │ ├── game/ # Игровая логика
│ │ │ ├── BoardController.js
│ │ │ ├── GameEngine.js
│ │ │ ├── MatchDetector.js
│ │ │ ├── PowerUpManager.js
│ │ │ ├── AnimationEngine.js
│ │ │ ├── Particle.js
│ │ │ └── Renderer.js
│ │ ├── ui/ # Интерфейс
│ │ │ └── UI.js
│ │ └── main.js # Точка входа
│ └── data/
│ └── levels/ # Конфиги уровней
│
├── backend/ # Серверная часть (Go)
│ ├── cmd/
│ │ └── main.go # Точка входа
│ ├── internal/
│ │ ├── config/ # Конфигурация
│ │ ├── database/ # PostgreSQL
│ │ ├── handlers/ # HTTP обработчики
│ │ ├── middleware/ # Middleware
│ │ └── models/ # Модели данных
│ └── go.mod
│
└── python/ # Инструменты
├── level_generator.py # Генератор уровней
├── analytics.py # Аналитика
└── requirements.txt
Просто откройте frontend/index.html в браузере. Игра работает в офлайн-режиме с локальным сохранением.
-
Убедитесь, что Docker установлен и запущен
-
Запустите PostgreSQL:
# Windows
start_postgres.bat
# Linux/Mac
docker-compose up -d postgres- Запустите бэкенд:
cd backend
go run cmd/main.goСервер будет доступен на http://localhost:8080
Adminer (веб-интерфейс для БД): http://localhost:8081
- Система: PostgreSQL
- Сервер: postgres
- Пользователь: postgres
- Пароль: postgres
- База данных: gametri
- Установите PostgreSQL и создайте базу данных:
CREATE DATABASE gametri;- Настройте переменные окружения (или отредактируйте
backend/.env):
# Linux/Mac
export USE_SQLITE=false
export DATABASE_URL="postgres://user:password@localhost:5432/gametri?sslmode=disable"
export JWT_SECRET="your-secret-key"
# Windows PowerShell
$env:USE_SQLITE="false"
$env:DATABASE_URL="postgres://user:password@localhost:5432/gametri?sslmode=disable"- Запустите сервер:
cd backend
go mod download
go run cmd/main.goЕсли Docker недоступен, можно использовать SQLite:
- Установите в
backend/.env:
USE_SQLITE=true
- Запустите сервер:
cd backend
go run cmd/main.go| Переменная | По умолчанию | Описание |
|---|---|---|
USE_SQLITE |
false |
Использовать SQLite вместо PostgreSQL |
DATABASE_URL |
postgres://postgres:postgres@localhost:5432/gametri?sslmode=disable |
URL подключения к PostgreSQL |
SQLITE_PATH |
./gametri.db |
Путь к SQLite файлу |
SERVER_ADDR |
:8080 |
Адрес сервера |
JWT_SECRET |
... |
Секретный ключ для JWT токенов |
cd python
python level_generator.py- 3 в ряд - базовые очки
- 4 в ряд - создаёт полосатую фишку
- L/T-форма (5) - создаёт бомбу
- 5 в ряд - создаёт радужную фишку
- Полосатая + Полосатая = Крест
- Полосатая + Бомба = Большой крест (3 ряда)
- Бомба + Бомба = Огромный взрыв (5x5)
- Радужная + Любая = Все фишки этого цвета → специальные
- ⭐ - выполнить цели уровня
- ⭐⭐ - набрать 150% очков
- ⭐⭐⭐ - набрать 200% очков
POST /api/auth/register- РегистрацияPOST /api/auth/login- ВходPOST /api/auth/guest- Гостевой входGET /api/auth/me- Текущий пользователь
GET /api/levels- Список уровней с прогрессомGET /api/levels/{id}- Конфиг уровняPOST /api/levels/{id}/start- Начать уровеньPOST /api/levels/{id}/complete- Завершить уровень
GET /api/player/progress- Прогресс игрокаPUT /api/player/progress- Обновить прогресс
GET /api/leaderboard/{period}- ЛидербордGET /api/shop/items- Товары магазинаPOST /api/shop/purchase- ПокупкаGET /api/achievements- Достижения
Игра адаптирована для:
- 📱 Мобильные телефоны (320px+)
- 📱 Планшеты (768px+)
- 💻 Десктопы (1024px+)
Поддерживаются touch-события для мобильных устройств.
Основные настройки в frontend/src/utils/Config.js:
const Config = {
GRID_WIDTH: 8,
GRID_HEIGHT: 8,
CELL_SIZE: 64,
GEM_TYPES: ['red', 'blue', 'green', 'yellow', 'purple', 'orange'],
SCORES: {
MATCH_3: 50,
MATCH_4: 100,
MATCH_5: 200,
// ...
}
};MIT License