064f3ae2631e39b1383dcda45758a245ba28867d
HEXO
Учебный проект. Игра, клон DiceWars
Запуск игры
npm run serve # Запустить веб-сервер (http://localhost:8080)
npm test # Запустить тесты
npm start # Консольная версия карты
Экран запуска
При запуске игры открывается экран настройки:
- Выберите количество игроков: 2, 3 или 4
- Настройте тип каждого игрока:
- Human — управление человеком (клики мышью)
- AI Bot — управление компьютером
- Нажмите Start Game для начала игры
Комбинации игроков
Можно создавать любые комбинации:
- Все игроки — люди (Hotseat)
- Все игроки — AI боты (наблюдение за игрой ИИ)
- Смешанный режим (например, P1-Human, P2-AI, P3-Human, P4-AI)
Цвета игроков
| Игрок | Цвет | HEX |
|---|---|---|
| P1 | 🟢 Зелёный | #4ecca3 |
| P2 | 🔴 Красный | #e94560 |
| P3 | 🟡 Жёлтый | #f9ed69 |
| P4 | 🔵 Бирюзовый | #a8e6cf |
AI Bot
Как работает
AI бот автоматически играет за выбранного игрока:
- Анализ поля — бот оценивает все возможные ходы
- Приоритеты ходов:
- 🎯 Атака слабого противника (высокий шанс победы)
- 📈 Захват пустых клеток (расширение территории)
- 💪 Укрепление позиций (перемещение к сильным клеткам)
- Задержка мышления — 1000 мс перед каждым ходом для естественности геймплея
Индикаторы AI
- В карточке игрока отображается метка (AI)
- Во время хода AI в панели действий показано: "AI is thinking..."
- Кнопки управления отключены во время хода AI
Правила игры
1. Карта
- Гексагональная сетка 20×20 ячеек
- Каждая ячейка может быть:
- Проходима (пустая или принадлежит игроку)
- Непроходима (заблокирована, серый цвет)
2. Игровые единицы
- Кубик: 6-гранный, значения 1-6
- На поле может быть до 8 кубиков на клетку
- Сила юнита:
F = (cnt-1) × 6 + current_dicecnt— количество кубиковcurrent_dice— значение верхнего кубика
3. Ход игры
Перемещение/Атака
- Можно ходить, если сила > 1
- На целевую клетку переходит
сила-1, на исходной остаётся 1 - При атаке оба игрока бросают кости:
- Атакующий:
attack_roll = rnd(1..сила-1) - Защищающийся:
defense_roll = rnd(1..сила)
- Атакующий:
Результат боя
| Условие | Результат |
|---|---|
attack_roll > defense_roll |
Атакующий побеждает, занимает клетку с attack_roll-1. На исходной клетке остаётся 1 |
attack_roll <= defense_roll |
Атака отбита. Атакующий уменьшается до 1. Защитник остаётся с defense_roll - attack_roll (мин. 1) |
Снабжение
После хода игрок получает снабжение:
- Снабжение = размер наибольшей непрерывной территории
- Непрерывная территория — связанные между собой клетки игрока
- Если территория разорвана врагом — считается только наибольший кусок
- Снабжение распределяется по 1 единице случайным клеткам (не максимальным)
- Максимум на клетке: 48 (8 кубиков × 6)
4. Победа
Последний игрок, оставшийся с клетками на карте, побеждает.
Управление
| Действие | Управление |
|---|---|
| Выбрать клетку | Клик на свою клетку с кубиками |
| Атаковать | Клик на соседнюю вражескую/пустую клетку |
| Отменить выбор | Кнопка Cancel или клик на ту же клетку |
| Завершить ход | Кнопка End Turn |
| Вернуться в меню | Кнопка Main Menu |
Индикаторы на экране
- Выделенная клетка — красная подсветка
- Доступные цели — зелёная подсветка соседних клеток
- Лог боёв — правая панель с историей действий
- Инфо о клетке — сила и количество кубиков выбранной клетки
Настройки игры
Игра поддерживает:
- 2-4 игрока (любая комбинация людей и AI)
- Случайная генерация карты при каждом запуске
- Случайные стартовые позиции для игроков
Description
Languages
JavaScript
87.4%
CSS
7.8%
HTML
4.8%