Add AI bot tests and update documentation
This commit is contained in:
127
README.md
127
README.md
@@ -1,6 +1,6 @@
|
||||
# hexo
|
||||
# HEXO
|
||||
|
||||
Учебный проект. Игра, клон https://www.gamedesign.jp/games/dicewars/
|
||||
Учебный проект. Игра, клон [DiceWars](https://www.gamedesign.jp/games/dicewars/)
|
||||
|
||||
## Запуск игры
|
||||
|
||||
@@ -10,60 +10,119 @@ npm test # Запустить тесты
|
||||
npm start # Консольная версия карты
|
||||
```
|
||||
|
||||
## Настройки игры
|
||||
## Экран запуска
|
||||
|
||||
При запуске можно выбрать:
|
||||
- Количество игроков: 2-4
|
||||
- Тип каждого игрока: Человек (Human) или AI бот
|
||||
При запуске игры открывается экран настройки:
|
||||
|
||||
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`
|
||||
|
||||
- **Кубик**: 6-гранный, значения 1-6
|
||||
- На поле может быть до **8 кубиков** на клетку
|
||||
- **Сила юнита**: `F = (cnt-1) × 6 + current_dice`
|
||||
- `cnt` — количество кубиков
|
||||
- `current_dice` — значение верхнего кубика
|
||||
|
||||
### 3. Ход игры
|
||||
|
||||
#### Перемещение/Атака
|
||||
- Можно ходить, если сила > 1
|
||||
- На целевую клетку переходит `сила-1`, на исходной остаётся 1
|
||||
|
||||
- Можно ходить, если **сила > 1**
|
||||
- На целевую клетку переходит `сила-1`, на исходной остаётся **1**
|
||||
- При атаке оба игрока бросают кости:
|
||||
- Атакующий: `attack_roll = rnd(1..сила-1)`
|
||||
- Защищающийся: `defense_roll = rnd(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)
|
||||
|
||||
| Условие | Результат |
|
||||
|---------|-----------|
|
||||
| `attack_roll > defense_roll` | Атакующий побеждает, занимает клетку с `attack_roll-1`. На исходной клетке остаётся **1** |
|
||||
| `attack_roll <= defense_roll` | Атака отбита. Атакующий уменьшается до **1**. Защитник остаётся с `defense_roll - attack_roll` (мин. **1**) |
|
||||
|
||||
#### Снабжение
|
||||
- После хода игрок получает снабжение
|
||||
|
||||
После хода игрок получает снабжение:
|
||||
|
||||
- **Снабжение = размер наибольшей непрерывной территории**
|
||||
- Непрерывная территория — связанные между собой клетки игрока
|
||||
- Если территория разорвана врагом — считается только largest кусок
|
||||
- Снабжение распределяется по 1 единице случайным клеткам (не максимальным)
|
||||
- Максимум на клетке: 48 (8 кубиков × 6)
|
||||
- **Непрерывная территория** — связанные между собой клетки игрока
|
||||
- Если территория разорвана врагом — считается только наибольший кусок
|
||||
- Снабжение распределяется по **1 единице** случайным клеткам (не максимальным)
|
||||
- **Максимум на клетке**: 48 (8 кубиков × 6)
|
||||
|
||||
### 4. Победа
|
||||
- Последний игрок, оставшийся с клетками на карте
|
||||
|
||||
**Последний игрок**, оставшийся с клетками на карте, побеждает.
|
||||
|
||||
## Управление
|
||||
|
||||
- **Клик** на свою клетку → выбор
|
||||
- **Клик** на соседнюю вражескую/пустую → атака
|
||||
- **Cancel** → отмена выбора
|
||||
- **End Turn** → завершить ход
|
||||
|
||||
|
||||
| Действие | Управление |
|
||||
|----------|------------|
|
||||
| Выбрать клетку | Клик на свою клетку с кубиками |
|
||||
| Атаковать | Клик на соседнюю вражескую/пустую клетку |
|
||||
| Отменить выбор | Кнопка **Cancel** или клик на ту же клетку |
|
||||
| Завершить ход | Кнопка **End Turn** |
|
||||
| Вернуться в меню | Кнопка **Main Menu** |
|
||||
|
||||
### Индикаторы на экране
|
||||
|
||||
- **Выделенная клетка** — красная подсветка
|
||||
- **Доступные цели** — зелёная подсветка соседних клеток
|
||||
- **Лог боёв** — правая панель с историей действий
|
||||
- **Инфо о клетке** — сила и количество кубиков выбранной клетки
|
||||
|
||||
## Настройки игры
|
||||
|
||||
Игра поддерживает:
|
||||
- **2-4 игрока** (любая комбинация людей и AI)
|
||||
- **Случайная генерация карты** при каждом запуске
|
||||
- **Случайные стартовые позиции** для игроков
|
||||
|
||||
Reference in New Issue
Block a user