# chess-web — шахматы в браузере Браузерные шахматы на **React + TypeScript** с движком правил **chess.js** и простым ИИ (minimax + alpha-beta). ## Что уже работает - Рендер доски 8×8 с координатами, подсветкой выбора, легальных ходов и последнего хода. - Ходы кликом (выбрать фигуру → нажать целевую клетку). - Все правила: рокировка (обе), эн-пан, превращение пешки, шах/мат/пат, определение ничьей. - Режим **Hotseat** (два игрока за экраном) и **против ИИ** (ход белых или чёрных). - История ходов в SAN-нотации с навигацией назад/вперёд. - Отмена хода, переворот доски (заглушка в `Controls`, логика в `Board`), новая игра. - Индикатор «ИИ думает…», статус партии. ## Структура ``` chess-web/ ├── src/ │ ├── main.tsx # точка входа React │ ├── App.tsx # состояние партии, связующее звено │ ├── styles.css │ ├── chess/ │ │ ├── useChess.ts # оборотка chess.js, statusInfo │ │ └── board.ts # Position, pieces, legalMoves │ ├── ai/ │ │ └── minimax.ts # minimax + alpha-beta, depth=3 │ └── components/ │ ├── Board.tsx │ ├── MoveHistory.tsx │ ├── Controls.tsx │ └── pieces.tsx # Unicode-символы фигур ``` ## Запуск ```bash npm install npm run dev # http://localhost:5173 npm run build # production-сборка в dist/ npm run preview # превью собранного ``` ## Дедлайны / следующие шаги - [ ] Реальный drag-and-drop вместо клика. - [ ] Подтверждение превращения (выбор фигуры: ферзь/ладья/конь/слон). - [ ] Ограничение времени на ход, таймер. - [ ] Отмена хода в режиме против ИИ должна откатывать 2 хода (ход игрока + ход ИИ). - [ ] Убрать заглушку `onFlip` в `Controls` — передать флаг переворота в `Board`. - [ ] Анимации ходов, звуковое сопровождение, тема. ## Заметки по chess.js v1.x - `move()` принимает **SAN-строку** (`'e4'`, `'O-O'`, `'Qxf7#'`), а не `{from, to}`. - Рокировка короткая — `O-O`, длинная — `O-O-O`. - Эн-пан: пешка переходит на клетку **за** взятой (`dxc5`, не `d6`). - Проверки: `isCheckmate()`, `isStalemate()`, `isDrawByFiftyMoves()`, `isThreefoldRepetition()`.