69 lines
3.0 KiB
Markdown
69 lines
3.0 KiB
Markdown
# hexo
|
||
|
||
Учебный проект. Игра, клон https://www.gamedesign.jp/games/dicewars/
|
||
|
||
## Запуск игры
|
||
|
||
```bash
|
||
npm run serve # Запустить веб-сервер (http://localhost:8080)
|
||
npm test # Запустить тесты
|
||
npm start # Консольная версия карты
|
||
```
|
||
|
||
## Настройки игры
|
||
|
||
При запуске можно выбрать:
|
||
- Количество игроков: 2-4
|
||
- Тип каждого игрока: Человек (Human) или 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)
|
||
|
||
#### Снабжение
|
||
- После хода игрок получает снабжение
|
||
- **Снабжение = размер наибольшей непрерывной территории**
|
||
- Непрерывная территория — связанные между собой клетки игрока
|
||
- Если территория разорвана врагом — считается только largest кусок
|
||
- Снабжение распределяется по 1 единице случайным клеткам (не максимальным)
|
||
- Максимум на клетке: 48 (8 кубиков × 6)
|
||
|
||
### 4. Победа
|
||
- Последний игрок, оставшийся с клетками на карте
|
||
|
||
## Управление
|
||
|
||
- **Клик** на свою клетку → выбор
|
||
- **Клик** на соседнюю вражескую/пустую → атака
|
||
- **Cancel** → отмена выбора
|
||
- **End Turn** → завершить ход
|
||
|
||
|