# ColorLine98 Классическая логическая игра-головоломка ColorLine98 — набирайте очки, выстраивая линии из одноцветных шаров на игровом поле 9×9. ![ColorLine98 Screenshot](./docs/screenshot.png) ## Играть Откройте игру в браузере: [https://aevgarik.github.io/colorline98](https://aevgarik.github.io/colorline98) ## Технологический стек - Vue 3 (Composition API) - Vite - TypeScript - Canvas 2D - Vitest ## Структура проекта ``` src/ ├── components/ │ └── GameBoard.vue # Canvas-компонент игрового поля ├── game/ │ ├── Board.ts # Модель доски и базовые типы │ ├── PathFinder.ts # BFS-поиск пути │ ├── LineChecker.ts # Проверка линий │ ├── Game.ts # Главный класс игры │ └── Game.test.ts # Unit-тесты ├── App.vue └── main.ts ``` ## Разработка ### Установка ```bash pnpm install ``` ### Запуск dev-сервера ```bash pnpm dev ``` ### Сборка для продакшена ```bash pnpm build ``` ### Линтинг ```bash pnpm lint ``` ### Тесты ```bash pnpm test ``` ## Правила игры - **Поле**: 9×9 клеток (81 ячейка) - **Шары**: 7 цветов - **Начало**: 5 случайных шаров на поле - **Ход**: Выберите шар и укажите целевую клетку - **Перемещение**: Только по ортогональным направлениям (вверх, вниз, влево, вправо) - **После хода**: Появляются 3 новых шара (показываются в превью) - **Линии**: 5+ шаров одного цвета (горизонталь, вертикаль, диагональ) - **Очки**: За удаление линий (5→10, 6→12, 7→18, 8→28, 9+→формула) - **Комбо**: x1.5 множитель за каждую дополнительную линию в ходе - **Конец игры**: Когда поле заполнено ## Система очков | Длина линии | Очки | | ----------- | ----------------- | | 5 шаров | 10 | | 6 шаров | 12 | | 7 шаров | 18 | | 8 шаров | 28 | | 9+ шаров | (n - 8) × 14 + 42 | ## Лицензия MIT