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().
S
Description
Self-hosted project
Readme
54 KiB
0 Stars 1 Watchers 0 Forks