@vnejs/docs 0.2.36 → 0.2.38

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,26 @@
2
2
 
3
3
  Краткая история изменений движка (плагины, helpers, packages, CLI и прочий runtime) и внешнего API. Версии — релизы пакета `@vnejs/docs`.
4
4
 
5
+ ## 0.2.38
6
+
7
+ - `ai/checkers` — ключи алгоритмов с префиксом домена: `CONST.CHECKERS_AI.AI_TYPES` → `checkers:sacrifice` / `checkers:random` / `checkers:strong` (вместо `sacrifice` / `random` / `strong`). `$ checkers.ai set <color> checkers:strong`.
8
+ - `ai/checkers` — дефолтные алгоритмы `checkers:sacrifice` / `checkers:random` / `checkers:strong` регистрируются в `PARAMS.AI.ALGORITHMS` при загрузке контракта (side-effect, как `SCALE_MANA` → `PARAMS.SCALES.TYPES`). Больше не задаются в `games/checkers` scripts. API: экспорт `CheckersAiArgs`, `sacrifice` / `random` / `strong`.
9
+ - `ai/checkers` — AI-оркестрация шашек вынесена из `game/checkers` в `@vnejs/plugins.ai.checkers` (`PLUGIN_NAME` `CHECKERS_AI`). API: `EVENTS.CHECKERS_AI.INTERACT` / `SET` / `UNSET` (`vne:checkers_ai:*`); `CONST.CHECKERS_AI.SOURCE` (`"checkers.ai.interact"`); `CONST.CHECKERS_AI.EXEC_ACTIONS` / `AI_TYPES`; `PARAMS.CHECKERS_AI.AI_DELAY`; `shared.checkersAi`; модули `checkers.ai` / `checkers.ai.start` / `checkers.ai.interact` / `checkers.ai.move.played`. Вместо `EVENTS.CHECKERS.AI_INTERACT` / `AI_SET` / `AI_UNSET`, `PARAMS.CHECKERS.AI_DELAY`, `CONST.CHECKERS.AI_EXEC_ACTIONS` / `AI_TYPES`, модулей `checkers.ai.show` / `checkers.move.played`. `$ checkers.ai` без изменения синтаксиса. Бандл: `@vnejs/plugins.ai.checkers`.
10
+ - `game/checkers` — только правила / доска / ходы / `$ checkers`; цвета `AI_COLORS` / `AI_COLOR_VALUES` и `shared.checkersInteractDisableSources` остаются здесь.
11
+ - `game/checkers` — `BOARD_CHANGE` / `BOARD_CHANGED` / `BOARD_GET` без `ai`; конфиг сторон только в `shared.checkersAi` (`AI_SET` / `AI_UNSET`).
12
+ - `views.screens/checkers` — ACCEPT больше не эмитит `CHECKERS.FINISH` (только выбор клетки).
13
+ - `game/checkers` — `PARAMS.CHECKERS.FINISH_DELAY` вместо `TRANSITION` для паузы на `FINISH`.
14
+ - `views.screens/checkers` — `EVENTS.CHECKERS_VIEW.PLAYER_SELECT` / `CheckersPlayerSelectPayload`; модуль `checkers_view.player.select` (бывший `patchSelection`).
15
+ - `game/checkers` — `MOVE_PLAY` сам эмитит `MOVE_PLAYED` `{ move, … }` или при победе `FINISH`; call-sites больше не шлют `MOVE_PLAYED` вручную. API: `CheckersMovePlayPayload` = `CheckersMovePlayedPayload` + `move`.
16
+ - `views.screens/checkers` — `statusText` только во view (из `turn`/`winner` на `BOARD_CHANGED`); game модель без `statusText`.
17
+ - `game/checkers` / `views.screens/checkers` — `selected` / `legalMoves` только во view (`CHECKERS_VIEW.STATE_UPDATE`); `BOARD_CHANGE` / `BOARD_CHANGED` без них.
18
+ - `game/checkers` — правила / AI / `$ checkers` выделены из `views.screens/checkers` в `@vnejs/plugins.game.checkers` (`PLUGIN_NAME` `CHECKERS`). API: `EVENTS.CHECKERS.BOARD_CHANGED` / `BOARD_GET`; `PARAMS.CHECKERS.TRANSITION` (settle на `FINISH`); init доски на `SHOW` (`checkers.show`) → `START`. `PLAYER_INTERACT` убран из game.
19
+ - `views.screens/checkers` — только UI: `PLUGIN_NAME` `CHECKERS_VIEW`; события `vne:checkers_view:*`; `EVENTS.CHECKERS_VIEW.PLAYER_INTERACT` / `CLICK` / grid; bridge SHOW/HIDE; зеркало `BOARD_CHANGED` → grid. `player.interact` ходит в game через `MOVES_GET` / `MOVE_PLAY` / `BOARD_CHANGE`.
20
+ - `bundles/checkers` — импорт `@vnejs/plugins.game.checkers` + `@vnejs/plugins.views.screens.checkers`.
21
+ - `ai/ai` — диспетчер: `emitOne(EVENTS.AI.EMIT, { type, args })` → `PARAMS.AI.ALGORITHMS[type](args, module)`. Дефолт `PARAMS.AI.ALGORITHMS` — `{}`. API: `EVENTS.AI.EMIT`, `PARAMS.AI.ALGORITHMS`, `CONST.AI.PLAYER_TYPE` (`"player"`), типы `AiAlgorithm` / `AiAlgorithmContext` / `AiEmitPayload` (`type` вместо `id`).
22
+ - `views.screens/checkers` — (до сплита) `EVENTS.CHECKERS.MOVES_GET` / `MOVE_PLAY` / `MOVE_PLAYED` / `BOARD_CHANGE` / `PLAYER_INTERACT` / `AI_SET` / `AI_UNSET` / `AI_INTERACT` / `START`; `CONST.CHECKERS.AI_COLOR_VALUES` / `AI_EXEC_ACTIONS` / `EXEC_ACTIONS` (`show` / `hide`); модули `checkers.board`, `checkers.moves`, `checkers.move.play`, `checkers.move.played`, `checkers.player.interact`, `checkers.ai`, `checkers.ai.interact`, `checkers.ai.show`, `checkers.click`, `checkers.finish`, `checkers.controller.accept`. Алгоритмы в `games/checkers`. `$ checkers.ai set|unset` вместо `$ checkers ai`; `$ checkers show` без `emitNext` (сценарий ждёт `FINISH`); `$ checkers hide` → `HIDE` + `emitNext`. `FINISH` без `HIDE`. Удалён локальный `utils/ai` / `pickMove`. API: `EVENTS.CHECKERS.PLAYER_INTERACT`, `CheckersPlayerInteractPayload`; `EVENTS.CHECKERS.CLICK` вместо `CELL_CLICK` (`vne:checkers:click`) → `GRID_CLEAR` + `PLAYER_INTERACT`; `EVENTS.CHECKERS.AI_SET` / `CheckersAiSetPayload`; `EVENTS.CHECKERS.AI_UNSET` / `CheckersAiUnsetPayload` (`color`); `$ checkers.ai unset <color>` → сторона в `CONST.AI.PLAYER_TYPE`; `CONST.CHECKERS.AI_EXEC_ACTIONS` (`set` / `unset`); `CONST.AI.PLAYER_TYPE` вместо `CONST.CHECKERS.AI_TYPES.PLAYER`; `EVENTS.CHECKERS.START` (`afterShow`) → `AI_INTERACT` (`checkers.ai.show`); `EVENTS.CHECKERS.AI_INTERACT` вместо `AI_TURN`; `EVENTS.CHECKERS.MOVE_PLAYED` / `CheckersMovePlayedPayload` (`controllerType`); после хода `MOVE_PLAY` / `AI.EMIT` → `MOVE_PLAYED` → `AI_INTERACT` (`checkers.move.played`); `shared.checkersInteractDisableSources` (`SourcesSet`) вместо `checkersAiBusy` (source = `this.name` у `checkers.ai.interact`); вызов `AI.EMIT` с `{ type, args }`.
23
+ - `bundles/checkers` — подключает `@vnejs/plugins.ai`.
24
+
5
25
  ## 0.2.36
6
26
 
7
27
  - `views.screens/checkers` — экран русских шашек: `$ checkers show`, сетка на `@vnejs/module.controller.arrows.grid`. API: `EVENTS.CHECKERS.*` (`SHOW` / `HIDE` / `ACCEPT` / `CELL_CLICK` / `FINISH` / `AI_TURN` / grid), `PARAMS.CHECKERS.ROWS` / `COLUMNS`, `CONST.CHECKERS.EXEC_ACTIONS`.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vnejs/docs",
3
- "version": "0.2.36",
3
+ "version": "0.2.38",
4
4
  "description": "VNEJS documentation for engine consumers and coding agents",
5
5
  "files": [
6
6
  "*.md",
@@ -0,0 +1,75 @@
1
+ # plugins/ai/ai/
2
+
3
+ Пакет: `@vnejs/plugins.ai` · namespace: `AI`
4
+
5
+ Универсальный диспетчер AI-алгоритмов: `emitOne(EVENTS.AI.EMIT, { type, args })` вызывает `PARAMS.AI.ALGORITHMS[type](args, module)`. Доменные стратегии подключают свои контракты (side-effect на `PARAMS.AI.ALGORITHMS`), как [`ai/checkers`](./checkers.md).
6
+
7
+ ## События
8
+
9
+ | Ключ | Строка | Смысл |
10
+ | ------ | ------------- | ------------------------------------------------------- |
11
+ | `EMIT` | `vne:ai:emit` | Request/response (`emitOne`): payload `{ type, args }`. |
12
+
13
+ ```ts
14
+ emitOne(EVENTS.AI.EMIT, { type, args });
15
+ // → PARAMS.AI.ALGORITHMS[type](args, module) ?? null
16
+ ```
17
+
18
+ | Поле | Тип | Смысл |
19
+ | ------ | --------- | ---------------------------------------------- |
20
+ | `type` | `string` | Ключ в `PARAMS.AI.ALGORITHMS`. |
21
+ | `args` | `unknown` | Произвольный payload для выбранного алгоритма. |
22
+
23
+ Второй аргумент алгоритма — модуль AI (`emit` / `emitOne` / `emitReal`), как у settings ACTIONS.
24
+
25
+ Результат: значение из алгоритма или `null` (нет `type` / нет функции / алгоритм вернул `null`). Поддерживается `async`.
26
+
27
+ ## Константы
28
+
29
+ | Ключ | Тип / значение | Смысл |
30
+ | ------------- | -------------- | ------------------------------------------------------------------ |
31
+ | `PLAYER_TYPE` | `"player"` | Тип контроллера «человек» (не алгоритм из `PARAMS.AI.ALGORITHMS`). |
32
+
33
+ ## Параметры
34
+
35
+ | Ключ | Тип / дефолт | Смысл |
36
+ | ------------ | ------------------------------------ | -------------------------------------------------------------------- |
37
+ | `ALGORITHMS` | `Record<string, AiAlgorithm>` → `{}` | Карта type → `(args, module) => result \| null`. Пусто по умолчанию. |
38
+
39
+ ```ts
40
+ type AiAlgorithmContext = Pick<Module, "emit" | "emitOne" | "emitReal">;
41
+ type AiAlgorithm<TArgs = unknown, TResult = unknown> = (args: TArgs, module: AiAlgorithmContext) => TResult | null | Promise<TResult | null>;
42
+ type AiEmitPayload<TArgs = unknown> = { type?: string; args?: TArgs };
43
+ ```
44
+
45
+ ## Модули
46
+
47
+ | Модуль | Зона ответственности |
48
+ | --------- | ------------------------------------------------------------------ |
49
+ | `ai.emit` | `on(EVENTS.AI.EMIT)` → `PARAMS.AI.ALGORITHMS[type]?.(args, this)`. |
50
+
51
+ ## Регистрация алгоритмов
52
+
53
+ Доменный контракт мутирует `PARAMS.AI.ALGORITHMS` при загрузке (как `SCALE_MANA` → `PARAMS.SCALES.TYPES`):
54
+
55
+ ```ts
56
+ import { PARAMS as AI_PARAMS } from "@vnejs/contracts.ai";
57
+
58
+ AI_PARAMS.ALGORITHMS["checkers:sacrifice"] = sacrifice;
59
+ AI_PARAMS.ALGORITHMS["checkers:random"] = random;
60
+ AI_PARAMS.ALGORITHMS["checkers:strong"] = strong;
61
+ ```
62
+
63
+ Шашечные `checkers:sacrifice` / `checkers:random` / `checkers:strong` — в [`ai/checkers`](./checkers.md). Игра может добавить свои ключи тем же способом или в скриптах.
64
+
65
+ Вызывающая сторона (например `ai/checkers`):
66
+
67
+ ```ts
68
+ await this.emitOne(this.EVENTS.AI.EMIT, { type, args: { board, turn, controllerType: type } });
69
+ ```
70
+
71
+ ## Близкие плагины
72
+
73
+ - [ai/checkers.md](./checkers.md) — оркестрация шашек: `CHECKERS_AI.INTERACT` → `AI.EMIT`.
74
+ - [game/checkers.md](../game/checkers.md) — правила: `MOVES_GET` / `MOVE_PLAY`.
75
+ - [views.screens/checkers.md](../views.screens/checkers.md) — экран `CHECKERS_VIEW`.
@@ -0,0 +1,56 @@
1
+ # plugins/ai/checkers/
2
+
3
+ Пакет: `@vnejs/plugins.ai.checkers` · namespace: `CHECKERS_AI`
4
+
5
+ AI-оркестрация русских шашек: конфиг сторон, цикл хода через `AI.EMIT`, `$ checkers.ai`, дефолтные алгоритмы `checkers:sacrifice` / `checkers:random` / `checkers:strong`. Правила доски — в [`game/checkers`](../game/checkers.md); UI — в [`views.screens/checkers`](../views.screens/checkers.md); диспетчер — в [`ai/ai`](./ai.md).
6
+
7
+ ## События
8
+
9
+ | Ключ | Строка | Смысл |
10
+ | ---------- | -------------------------- | --------------------------------------- |
11
+ | `INTERACT` | `vne:checkers_ai:interact` | Ход AI (если сторона не `player`). |
12
+ | `SET` | `vne:checkers_ai:set` | `$ checkers.ai set`: `{ color, type }`. |
13
+ | `UNSET` | `vne:checkers_ai:unset` | `$ checkers.ai unset <color>`. |
14
+
15
+ Слушает `CHECKERS.START` → `INTERACT`; `CHECKERS.MOVE_PLAYED` → unlock + `INTERACT`.
16
+
17
+ ## Константы / Shared / Params
18
+
19
+ | Ключ | Смысл |
20
+ | --------------------------------------------- | ----------------------------------------------------------------------- |
21
+ | `CONST.CHECKERS_AI.SOURCE` | `"checkers.ai.interact"` — ключ в `SourcesSet` |
22
+ | `CONST.CHECKERS_AI.EXEC_ACTIONS` / `AI_TYPES` | set/unset; `checkers:sacrifice` / `checkers:random` / `checkers:strong` |
23
+ | `shared.checkersAi` | `{ white, black }` → оба `player` по умолчанию |
24
+ | `PARAMS.CHECKERS_AI.AI_DELAY` | пауза перед ходом AI (мс, `1000`) |
25
+
26
+ Busy-флаг пишется в `shared.checkersInteractDisableSources` (владелец — `CHECKERS`).
27
+
28
+ Цвета сторон (`CONST.CHECKERS.AI_COLORS`) — в контракте game.
29
+
30
+ При загрузке контракта в `PARAMS.AI.ALGORITHMS` регистрируются `checkers:sacrifice` / `checkers:random` / `checkers:strong` (мутация как у `SCALE_MANA` → `PARAMS.SCALES.TYPES`).
31
+
32
+ ## Модули
33
+
34
+ | Модуль | Зона |
35
+ | ------------------------- | -------------------------------------------------- |
36
+ | `checkers.ai` | `$ checkers.ai set/unset` → `SET` / `UNSET` |
37
+ | `checkers.ai.start` | `CHECKERS.START` → `INTERACT` |
38
+ | `checkers.ai.interact` | `INTERACT` → delay → `AI.EMIT` (source = `SOURCE`) |
39
+ | `checkers.ai.move.played` | `CHECKERS.MOVE_PLAYED` → `rm(SOURCE)` → `INTERACT` |
40
+
41
+ ## Сценарий
42
+
43
+ ```vne
44
+ $ checkers.ai set white checkers:strong
45
+ $ checkers.ai set black player
46
+ ```
47
+
48
+ ## Бандл
49
+
50
+ `@vnejs/bundles.checkers` — `plugins.ai` + `plugins.ai.checkers` + `plugins.game.checkers` + `plugins.views.screens.checkers`.
51
+
52
+ ## Близкие плагины
53
+
54
+ - [ai/ai.md](./ai.md) — `EVENTS.AI.EMIT` / `PARAMS.AI.ALGORITHMS`
55
+ - [game/checkers.md](../game/checkers.md) — правила, `START` / `MOVE_PLAYED`
56
+ - [views.screens/checkers.md](../views.screens/checkers.md) — UI, gate по `SourcesSet`
@@ -0,0 +1,59 @@
1
+ # plugins/game/checkers/
2
+
3
+ Пакет: `@vnejs/plugins.game.checkers` · namespace: `CHECKERS`
4
+
5
+ Правила русских шашек и сценарные команды `$ checkers`. AI-оркестрация — в [`ai/checkers`](../ai/checkers.md) (`CHECKERS_AI`). UI — в [`views.screens/checkers`](../views.screens/checkers.md) (`CHECKERS_VIEW`).
6
+
7
+ ## События
8
+
9
+ | Ключ | Строка | Смысл |
10
+ | --------------- | ---------------------------- | -------------------------------------------------------------------------------------------------- |
11
+ | `SHOW` | `vne:checkers:show` | Старт партии: init доски → `BOARD_CHANGED` → `START`. |
12
+ | `HIDE` | `vne:checkers:hide` | Сброс busy sources и стейта. |
13
+ | `START` | `vne:checkers:start` | Партия готова (слушает `CHECKERS_AI` → `INTERACT`). |
14
+ | `STATE_UPDATE` | `vne:checkers:state_update` | Патч game-стейта. |
15
+ | `FINISH` | `vne:checkers:finish` | Конец: `waitTimeout(FINISH_DELAY)` → `sources.clear()` + `emitNext`. |
16
+ | `MOVES_GET` | `vne:checkers:moves_get` | `emitOne`: `{ board, turn }` → `{ moves, hanging, safe }`. |
17
+ | `MOVE_PLAY` | `vne:checkers:move_play` | `emitOne`: `{ move, controllerType? }` → `boolean`; успех → `MOVE_PLAYED` или при победе `FINISH`. |
18
+ | `MOVE_PLAYED` | `vne:checkers:move_played` | После хода (из `MOVE_PLAY`); цикл AI — в `CHECKERS_AI`. |
19
+ | `BOARD_CHANGE` | `vne:checkers:board_change` | Входной патч модели → `STATE_UPDATE` + `BOARD_CHANGED`. |
20
+ | `BOARD_CHANGED` | `vne:checkers:board_changed` | Снимок модели для view. |
21
+ | `BOARD_GET` | `vne:checkers:board_get` | `emitOne` → текущий снимок модели. |
22
+
23
+ ## Константы / Shared / Params
24
+
25
+ | Ключ | Смысл |
26
+ | ------------------------------------------------ | ---------------------------------------------- |
27
+ | `EXEC_ACTIONS` / `AI_COLORS` / `AI_COLOR_VALUES` | show/hide; white/black |
28
+ | `shared.checkersInteractDisableSources` | `SourcesSet` — блок интерактива на ход AI |
29
+ | `PARAMS.CHECKERS.FINISH_DELAY` | пауза перед `emitNext` на `FINISH` (мс, `300`) |
30
+ | `PARAMS.CHECKERS.ROWS` / `COLUMNS` | `8` |
31
+
32
+ ## Модули
33
+
34
+ | Модуль | Зона |
35
+ | --------------------------------------- | ---------------------------------------------- |
36
+ | `checkers` | `$ checkers show/hide` |
37
+ | `checkers.show` | SHOW init + START; HIDE cleanup |
38
+ | `checkers.board` | `BOARD_CHANGE` / `BOARD_GET` / `BOARD_CHANGED` |
39
+ | `checkers.moves` / `checkers.move.play` | ходы |
40
+ | `checkers.finish` | FINISH → delay + `emitNext` |
41
+
42
+ ## Сценарий
43
+
44
+ ```vne
45
+ $ checkers show
46
+ $ checkers hide
47
+ ```
48
+
49
+ `$ checkers.ai` — см. [`ai/checkers`](../ai/checkers.md).
50
+
51
+ ## Бандл
52
+
53
+ `@vnejs/bundles.checkers` — `plugins.game.checkers` + `plugins.ai.checkers` + `plugins.views.screens.checkers` + `plugins.ai`.
54
+
55
+ ## Близкие плагины
56
+
57
+ - [ai/checkers.md](../ai/checkers.md) — `CHECKERS_AI`
58
+ - [views.screens/checkers.md](../views.screens/checkers.md) — `CHECKERS_VIEW`
59
+ - [ai/ai.md](../ai/ai.md) — диспетчер `AI.EMIT`
@@ -1,102 +1,45 @@
1
1
  # plugins/views.screens/checkers/
2
2
 
3
- Пакет: `@vnejs/plugins.views.screens.checkers` · namespace: `CHECKERS`
3
+ Пакет: `@vnejs/plugins.views.screens.checkers` · namespace: `CHECKERS_VIEW`
4
4
 
5
- Экран русских шашек: доска 8×8, навигация стрелками через `@vnejs/module.controller.arrows.grid`, ход через ACCEPT / клик. Стороны — игрок или AI (`player` / `sacrifice` / `random` / `strong`) через `$ checkers ai`.
5
+ Экран русских шашек: доска 8×8, сетка, клик / ACCEPT. Правила — в [`game/checkers`](../game/checkers.md) (`CHECKERS`); AI — в [`ai/checkers`](../ai/checkers.md) (`CHECKERS_AI`).
6
6
 
7
- ## События
8
-
9
- | Ключ | Строка | Смысл |
10
- | ------------------- | -------------------------------- | ------------------------------------------- |
11
- | `SHOW` | `vne:checkers:show` | Показать экран и начать партию. |
12
- | `HIDE` | `vne:checkers:hide` | Скрыть экран. |
13
- | `UPDATE` | `vne:checkers:update` | Обновить React-view. |
14
- | `UPDATE_FAST` | `vne:checkers:update_fast` | Быстрый апдейт view (фокус сетки). |
15
- | `ACCEPT` | `vne:checkers:accept` | Выбор фигуры / клетки / закрытие после win. |
16
- | `STATE_UPDATE` | `vne:checkers:state_update` | Патч стейта (доска, ход, сетка). |
17
- | `GRID_NEXT` | `vne:checkers:grid_next` | Край сетки (отключён флагами). |
18
- | `GRID_PREV` | `vne:checkers:grid_prev` | Край сетки (отключён флагами). |
19
- | `GRID_CLEAR` | `vne:checkers:grid_clear` | Сброс `gridRow` / `gridColumn`. |
20
- | `GRID_UPDATE_ITEMS` | `vne:checkers:grid_update_items` | Пересобрать `gridItems` (64 клетки). |
21
- | `CELL_CLICK` | `vne:checkers:cell_click` | Клик по клетке → фокус + ACCEPT. |
22
- | `FINISH` | `vne:checkers:finish` | Конец партии → HIDE + `emitNext`. |
23
- | `AI_TURN` | `vne:checkers:ai_turn` | Ход AI (после SHOW / хода человека). |
24
-
25
- ## Константы
7
+ Bridge: `CHECKERS.SHOW/HIDE` → `CHECKERS_VIEW.SHOW/HIDE`. Модель доски зеркалится с `CHECKERS.BOARD_CHANGED`.
26
8
 
27
- | Ключ | Смысл |
28
- | -------------- | --------------------------------------------- |
29
- | `EXEC_ACTIONS` | `SHOW` → `"show"`, `AI` → `"ai"`. |
30
- | `AI_COLORS` | `WHITE` / `BLACK` → `"white"` / `"black"`. |
31
- | `AI_TYPES` | `PLAYER` / `SACRIFICE` / `RANDOM` / `STRONG`. |
32
-
33
- ## Shared
9
+ ## События
34
10
 
35
- | Ключ | Тип / дефолт | Смысл |
36
- | ---------------- | --------------------------------- | ------------------------------------- |
37
- | `checkersAi` | `{ white, black }` → оба `player` | Тип управления стороной. |
38
- | `checkersAiBusy` | `boolean` → `false` | Пока AI ходит — игнор ACCEPT / клика. |
11
+ | Ключ | Строка | Смысл |
12
+ | ------------------------ | ------------------------------------ | ------------------------------------------------------------------------ |
13
+ | `SHOW` / `HIDE` | `vne:checkers_view:show` / `…:hide` | Показ / скрытие экрана. |
14
+ | `UPDATE` / `UPDATE_FAST` | `vne:checkers_view:update` / `_fast` | React-view. |
15
+ | `ACCEPT` | `vne:checkers_view:accept` | Выбор клетки → `GRID_CLEAR` + `PLAYER_INTERACT`. |
16
+ | `STATE_UPDATE` | `vne:checkers_view:state_update` | Патч view-стейта (grid + зеркало доски). |
17
+ | `GRID_*` | `vne:checkers_view:grid_*` | Навигация сетки. |
18
+ | `CLICK` | `vne:checkers_view:click` | Клик → `GRID_CLEAR` + `PLAYER_INTERACT`. |
19
+ | `PLAYER_INTERACT` | `vne:checkers_view:player_interact` | UX выбора фигуры / клетки → `MOVES_GET` / `MOVE_PLAY` / `PLAYER_SELECT`. |
20
+ | `PLAYER_SELECT` | `vne:checkers_view:player_select` | Патч `selected` / `legalMoves` → `gridItems` + `UPDATE_FAST`. |
39
21
 
40
22
  ## Параметры
41
23
 
42
- | Ключ | Тип | Смысл |
43
- | --------------- | -------- | ----------------------------------------------------------------------- |
44
- | `TRANSITION` | `number` | Длительность анимаций экрана / клеток / фигур (мс), по умолчанию `300`. |
45
- | `AI_DELAY` | `number` | Пауза перед ходом AI (мс), по умолчанию `1000`. |
46
- | `ZINDEX` | `number` | z-index экрана. |
47
- | `ROWS` | `number` | `8`. |
48
- | `COLUMNS` | `number` | `8`. |
49
- | `CELL_SIZE` | `number` | Размер клетки в design-единицах (`getVneLength`). |
50
- | `CELL_GAP` | `number` | Зазор между клетками. |
51
- | `GRAVEYARD_GAP` | `number` | Отступ между доской и «кладбищем» взятых фигур. |
52
- | `VIEW_PROPS` | `object` | Layout screen / status / flex. Доска — CSS grid 8×8 в view. |
24
+ | Ключ | Смысл |
25
+ | ------------------------------------------ | ------------------------------------ |
26
+ | `TRANSITION` | анимации экрана / клеток (мс, `300`) |
27
+ | `ZINDEX` | z-index экрана |
28
+ | `ROWS` / `COLUMNS` | `8` |
29
+ | `CELL_SIZE` / `CELL_GAP` / `GRAVEYARD_GAP` | layout доски |
30
+ | `VIEW_PROPS` | layout screen / status / flex |
53
31
 
54
32
  ## Модули
55
33
 
56
- | Модуль | Зона ответственности |
57
- | ---------------------------- | --------------------------------------------------------------------------------------------------------------- |
58
- | `checkers.controller` | SHOW/HIDE; `beforeShow` — стартовая доска + снимок `shared.checkersAi` в state; `FINISH` → HIDE + next. |
59
- | `checkers.controller.grid` | `@vnejs/module.controller.arrows.grid`, 8×8, оба `isDisableGridChange* = true`. |
60
- | `checkers.controller.accept` | Выбор фигуры / ход / клик; после SHOW ждёт доску и эмитит `AI_TURN`; AI-цикл; победа → `FINISH`. |
61
- | `checkers` | `$ checkers show` → SHOW; `$ checkers ai <color> <type>` → `shared.checkersAi`. |
62
- | `checkers.view` | React: доска (`vne-cursor-type` на клетках), фокус, подсветка; анимации; кладбище (белые слева, чёрные справа). |
63
-
64
- ## AI-типы
65
-
66
- | Ключ | Поведение |
67
- | ----------- | -------------------------------------------------------------------------- |
68
- | `player` | ход человеком |
69
- | `sacrifice` | среди ходов, после которых у противника есть взятие; иначе любой легальный |
70
- | `random` | любой легальный ход |
71
- | `strong` | среди ходов без ответа-взятия; если таких нет — среди «подставляющих» |
34
+ | Модуль | Зона |
35
+ | ------------------------------------------------ | ---------------------------------------------- |
36
+ | `checkers_view.bridge` | SHOW/HIDE bridge |
37
+ | `checkers_view.controller` / `.grid` / `.accept` | экран, сетка, ACCEPT |
38
+ | `checkers_view.click` / `.player.interact` | клик и выбор (game: `MOVES_GET` / `MOVE_PLAY`) |
39
+ | `checkers_view.player.select` | `PLAYER_SELECT` → selection + grid |
40
+ | `checkers_view.board` | `BOARD_CHANGED` → `gridItems` + `UPDATE_FAST` |
41
+ | `checkers_view.view` | React |
72
42
 
73
43
  ## Сценарий
74
44
 
75
- ```vne
76
- % choose
77
- title: "Кто управляет белыми?"
78
- % choose.option "Игрок"
79
- $ checkers ai white player
80
- % choose.option "Слабый ИИ"
81
- $ checkers ai white sacrifice
82
- % choose.option "Средний ИИ"
83
- $ checkers ai white random
84
- % choose.option "Сильный ИИ"
85
- $ checkers ai white strong
86
- % choose
87
- title: "Кто управляет чёрными?"
88
- % choose.option "Игрок"
89
- $ checkers ai black player
90
- % choose.option "Слабый ИИ"
91
- $ checkers ai black sacrifice
92
- % choose.option "Средний ИИ"
93
- $ checkers ai black random
94
- % choose.option "Сильный ИИ"
95
- $ checkers ai black strong
96
- $ checkers show
97
- ```
98
-
99
- ## Бандл и игра
100
-
101
- - Бандл: `@vnejs/bundles.checkers` (`bundles/checkers`) — core + `canvas.layer` + controls/keyboard/gamepad/cursor + `text` + choose + `views.cursor` + этот плагин.
102
- - Тестовая игра: `games/checkers` — `npm run start` / `npm run dev`; иконки курсора — `media/icons/original-4k/cursor/default` (как у Coraline).
45
+ `$ checkers` — [`game/checkers`](../game/checkers.md); `$ checkers.ai` — [`ai/checkers`](../ai/checkers.md).