HEXO

Учебный проект. Игра, клон DiceWars

Запуск игры

npm run serve    # Запустить веб-сервер (http://localhost:8080)
npm test         # Запустить тесты
npm start        # Консольная версия карты

Экран запуска

При запуске игры открывается экран настройки:

  1. Выберите количество игроков: 2, 3 или 4
  2. Настройте тип каждого игрока:
    • Human — управление человеком (клики мышью)
    • AI Bot — управление компьютером
  3. Нажмите Start Game для начала игры

Комбинации игроков

Можно создавать любые комбинации:

  • Все игроки — люди (Hotseat)
  • Все игроки — AI боты (наблюдение за игрой ИИ)
  • Смешанный режим (например, P1-Human, P2-AI, P3-Human, P4-AI)

Цвета игроков

Игрок Цвет HEX
P1 🟢 Зелёный #4ecca3
P2 🔴 Красный #e94560
P3 🟡 Жёлтый #f9ed69
P4 🔵 Бирюзовый #a8e6cf

AI Bot

Как работает

AI бот автоматически играет за выбранного игрока:

  1. Анализ поля — бот оценивает все возможные ходы
  2. Приоритеты ходов:
    • 🎯 Атака слабого противника (высокий шанс победы)
    • 📈 Захват пустых клеток (расширение территории)
    • 💪 Укрепление позиций (перемещение к сильным клеткам)
  3. Задержка мышления — 1000 мс перед каждым ходом для естественности геймплея

Индикаторы AI

  • В карточке игрока отображается метка (AI)
  • Во время хода AI в панели действий показано: "AI is thinking..."
  • Кнопки управления отключены во время хода AI

Правила игры

1. Карта

  • Гексагональная сетка 20×20 ячеек
  • Каждая ячейка может быть:
    • Проходима (пустая или принадлежит игроку)
    • Непроходима (заблокирована, серый цвет)

2. Игровые единицы

  • Кубик: 6-гранный, значения 1-6
  • На поле может быть до 8 кубиков на клетку
  • Сила юнита: F = (cnt-1) × 6 + current_dice
    • cnt — количество кубиков
    • 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
No description provided
Readme 111 KiB
Languages
JavaScript 87.4%
CSS 7.8%
HTML 4.8%