Update documentation for all recent features
This commit is contained in:
93
README.md
93
README.md
@@ -6,7 +6,7 @@
|
||||
|
||||
```bash
|
||||
npm run serve # Запустить веб-сервер (http://localhost:8080)
|
||||
npm test # Запустить тесты
|
||||
npm test # Запустить тесты (88 тестов)
|
||||
npm start # Консольная версия карты
|
||||
```
|
||||
|
||||
@@ -15,10 +15,15 @@ npm start # Консольная версия карты
|
||||
При запуске игры открывается экран настройки:
|
||||
|
||||
1. **Выберите количество игроков**: 2, 3 или 4
|
||||
2. **Настройте тип каждого игрока**:
|
||||
2. **Выберите размер карты**:
|
||||
- **Small (10×10)** — Быстрая игра на маленькой карте
|
||||
- **Medium (15×15)** — Сбалансированный размер
|
||||
- **Large (20×20)** — Стандартный размер (по умолчанию)
|
||||
- **Extra Large (25×25)** — Большая карта для длительных игр
|
||||
3. **Настройте тип каждого игрока**:
|
||||
- **Human** — управление человеком (клики мышью)
|
||||
- **AI Bot** — управление компьютером
|
||||
3. Нажмите **Start Game** для начала игры
|
||||
4. Нажмите **Start Game** для начала игры
|
||||
|
||||
### Комбинации игроков
|
||||
|
||||
@@ -34,7 +39,7 @@ npm start # Консольная версия карты
|
||||
| P1 | 🟢 Зелёный | `#4ecca3` |
|
||||
| P2 | 🔴 Красный | `#e94560` |
|
||||
| P3 | 🟡 Жёлтый | `#f9ed69` |
|
||||
| P4 | 🔵 Бирюзовый | `#a8e6cf` |
|
||||
| P4 | 🔵 Бирюзовый | `#00adb5` |
|
||||
|
||||
## AI Bot
|
||||
|
||||
@@ -44,10 +49,11 @@ AI бот автоматически играет за выбранного иг
|
||||
|
||||
1. **Анализ поля** — бот оценивает все возможные ходы
|
||||
2. **Приоритеты ходов**:
|
||||
- 🎯 Атака слабого противника (высокий шанс победы)
|
||||
- 📈 Захват пустых клеток (расширение территории)
|
||||
- 🎯 Атака слабого противника (высокий шанс победы) — приоритет 100+
|
||||
- 📈 Захват пустых клеток (расширение территории) — приоритет 50+
|
||||
- 💪 Укрепление позиций (перемещение к сильным клеткам)
|
||||
3. **Задержка мышления** — 1000 мс перед каждым ходом для естественности геймплея
|
||||
4. **Несколько ходов за turn** — AI делает все возможные ходы подряд, затем завершает ход
|
||||
|
||||
### Индикаторы AI
|
||||
|
||||
@@ -55,14 +61,43 @@ AI бот автоматически играет за выбранного иг
|
||||
- Во время хода AI в панели действий показано: *"AI is thinking..."*
|
||||
- Кнопки управления отключены во время хода AI
|
||||
|
||||
### Логика принятия решений
|
||||
|
||||
```javascript
|
||||
movePriority(move) {
|
||||
let priority = 0;
|
||||
|
||||
// Атака слабого врага (высший приоритет)
|
||||
if (move.type === 'attack') {
|
||||
if (move.attackStrength > move.defenseStrength) {
|
||||
priority += 100; // Высокий шанс победы
|
||||
priority += move.attackStrength - move.defenseStrength;
|
||||
} else {
|
||||
priority -= 50; // Рискованная атака
|
||||
}
|
||||
}
|
||||
|
||||
// Расширение на пустые клетки (средний приоритет)
|
||||
if (move.type === 'expand') {
|
||||
priority += 50;
|
||||
priority += move.attackStrength;
|
||||
}
|
||||
|
||||
// Бонус за сильную позицию
|
||||
priority += move.attackStrength * 0.5;
|
||||
|
||||
return priority;
|
||||
}
|
||||
```
|
||||
|
||||
## Правила игры
|
||||
|
||||
### 1. Карта
|
||||
|
||||
- Гексагональная сетка 20×20 ячеек
|
||||
- Гексагональная сетка **10×10**, **15×15**, **20×20** или **25×25** ячеек
|
||||
- Каждая ячейка может быть:
|
||||
- **Проходима** (пустая или принадлежит игроку)
|
||||
- **Непроходима** (заблокирована, серый цвет)
|
||||
- **Непроходима** (заблокирована, серый цвет, ~15% карты)
|
||||
|
||||
### 2. Игровые единицы
|
||||
|
||||
@@ -72,6 +107,15 @@ AI бот автоматически играет за выбранного иг
|
||||
- `cnt` — количество кубиков
|
||||
- `current_dice` — значение верхнего кубика
|
||||
|
||||
**Примеры расчёта силы:**
|
||||
| Кубики | Сила |
|
||||
|--------|------|
|
||||
| [4] | 4 |
|
||||
| [6] | 6 |
|
||||
| [6, 1] | 7 |
|
||||
| [6, 6, 2] | 14 |
|
||||
| [6, 6, 6, 6, 6, 6, 6, 6] | 48 (максимум) |
|
||||
|
||||
### 3. Ход игры
|
||||
|
||||
#### Перемещение/Атака
|
||||
@@ -124,5 +168,38 @@ AI бот автоматически играет за выбранного иг
|
||||
|
||||
Игра поддерживает:
|
||||
- **2-4 игрока** (любая комбинация людей и AI)
|
||||
- **4 размера карты**: 10×10, 15×15, 20×20, 25×25
|
||||
- **Случайная генерация карты** при каждом запуске
|
||||
- **Случайные стартовые позиции** для игроков
|
||||
|
||||
## Стартовые позиции
|
||||
|
||||
Игроки размещаются в углах карты (позиции масштабируются с размером карты):
|
||||
|
||||
| Игрок | Позиция | Описание |
|
||||
|-------|---------|----------|
|
||||
| P1 | (offset, offset) | Верхний-левый угол |
|
||||
| P2 | (size-1-offset, size-1-offset) | Нижний-правый угол |
|
||||
| P3 | (offset, size-1-offset) | Нижний-левый угол |
|
||||
| P4 | (size-1-offset, offset) | Верхний-правый угол |
|
||||
|
||||
`offset = max(1, floor(size / 10))`
|
||||
|
||||
Каждый игрок начинает с **силой 8** на своей стартовой позиции.
|
||||
|
||||
## Тестирование
|
||||
|
||||
Проект покрыт **88 тестами**, проверяющими:
|
||||
|
||||
- **Динамические размеры карт** (10×10, 15×15, 20×20, 25×25)
|
||||
- **HexCell**: создание, расчёт силы, максимальная сила, добавление кубиков
|
||||
- **HexMap**: генерация, соседи, снабжение, владение
|
||||
- **Логика выбора целей**: атака врагов, захват пустых клеток, блокировка своих клеток
|
||||
- **AIBot**: поиск ходов, приоритеты, выполнение ходов, завершение хода
|
||||
- **Интеграционные тесты**: 4 AI бота одновременно, разные размеры карт
|
||||
|
||||
```bash
|
||||
npm test
|
||||
```
|
||||
|
||||
Все тесты проходят успешно ✅
|
||||
|
||||
Reference in New Issue
Block a user