master
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-символы фигур
Запуск
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().