Семейство: BoardGrid
Интерактивные поля N×M, захват клеток, match-3.
Игры
sto_kletok, ne_krestiki, tri_v_ryad, chapaev, dice_board, holodno_goryacho
Use Cases
flowchart LR
Player((Player)) --> UC_Select[UC-SelectCell]
Player --> UC_Swap[UC-SwapTiles]
System((System)) --> UC_Render[UC-RenderBoardPNG]
UC_Select --> UC_Validate[UC-ValidatePlacement]
UC_Swap --> UC_Cascade[UC-MatchCascade]
FSM
stateDiagram-v2
[*] --> AwaitMove: turnStart
AwaitMove --> PlaceToken: cellSelected
AwaitMove --> SwapTiles: swapValid
PlaceToken --> CheckWin: tokenPlaced
SwapTiles --> Cascade: matchesFound
Cascade --> CheckWin: settled
CheckWin --> GameOver: winCondition
CheckWin --> NextTurn: continue
NextTurn --> AwaitMove
GameOver --> [*]
Sequence: ход на поле
sequenceDiagram
participant P as Player
participant API as GameService
participant G as GridModule
participant M as MediaRenderer
P->>API: choose_cell {row,col}
API->>G: validate_placement
G-->>API: ok
API->>G: apply + check_win
API->>M: render_board_png
API-->>P: view + WS broadcast
Shared module: grid.py
create_board(rows, cols, fill)get_neighbors(row, col)check_n_in_row(board, n, player_id)territory_capture(board, cell, player_id)— для sto_kletok
Per-game вариации
| Игра | Поле | Победа |
|---|---|---|
sto_kletok |
10×10 | Больше клеток / очков |
ne_krestiki |
3×3+ | Нестандартные правила (не X/O) |
tri_v_ryad |
8×8 | Match-3, каскады |
dice_board |
6×6 | 3 в ряд после броска кубиков |
chapaev |
бильярд | Упрощение: пошаговый «удар» |
NFR
- NFR-G01, NFR-005 (media render p95 < 500ms)
- NFR-G07: touch на сетке 320px+