Files
hexo/README.md
2026-02-21 20:34:42 +03:00

129 lines
5.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# HEXO
Учебный проект. Игра, клон [DiceWars](https://www.gamedesign.jp/games/dicewars/)
## Запуск игры
```bash
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)
- **Случайная генерация карты** при каждом запуске
- **Случайные стартовые позиции** для игроков