Любой сайт даёт просто играть. FourSight разбирает каждый твой ход, объясняет ошибки человеческим языком и превращает пятиминутную партию в урок — всё это в аккуратном двуязычном веб-приложении с рейтингами, задачами и магазином косметики.
🔗 Демо: foursight-pi.vercel.app
«Четыре в ряд» (Connect Four) — игра на двоих на поле 7×6. Игроки по очереди бросают фишки в колонки; фишка падает на нижнюю свободную клетку. Побеждает тот, кто первым выстроит четыре свои фишки подряд — по горизонтали, вертикали или диагонали. Если поле заполнилось без линии — ничья.
Правила учатся за минуту, а мастерство растёт годами — поэтому здесь и нужен тренер.
После партии каждый ход получает оценку — Лучший / Блестящий / Хороший / Неточность / Ошибка / Зевок / Упущенная победа / Вынужденный — с коротким объяснением по реальной доске («Теперь соперник выигрывает ходом в колонку 4»). Всё детерминированно, считается локально, без LLM в горячем пути.
Лёгкий, Средний и Сложный на основе negamax-движка на битбордах с альфа-бета-отсечением, итеративным углублением и приоритетом центра. Сложный смотрит на много ходов вперёд и наказывает за каждую оплошность.
Поделись ссылкой и играй в реальном времени через Supabase Realtime — для дружеской партии аккаунт не нужен. Роли, присутствие соперника и реванш работают вживую.
Подборка из 24 тактических задач, разбитых на разделы Лёгкие / Средние / Сложные, плюс «задача дня». Каждая позиция проверена движком (мат в 1 ход или вынужденный блок). Решение — в отдельном режиме с кнопками «ещё раз» / «дальше» и полноэкранным режимом.
Два независимых рейтинга Elo:
- PvE — за игры против ИИ (за более сильных ботов дают больше).
- PvP — за онлайн-партии против других зарегистрированных игроков.
Два отдельных глобальных лидерборда (/leaderboard?mode=pve|pvp). У всех старт с 0, рейтинг растёт только от реальных партий.
Побеждай, копи монеты (+10 за победу / +5 за ничью) и трать их в магазине:
- 🎨 12 цветов фишек — отдельно для своих и для соперника.
- 🟦 6 тем доски (Классика, Графит, Лес, Багрянец, Полночь, Закат).
Купил один раз, «надел» — и скины применяются в локальных играх, против ИИ и в онлайне.
Вход по магической ссылке или через Google (Supabase). Новый игрок обязан выбрать ник (онбординг-гейт), чтобы в лидерборде не всплывала почта. История партий с реплеями.
- Подсказки — лучший ход движка в один тап.
- Полноэкранный режим с подсказкой, новой игрой и выходом.
- Реплей с перемоткой — график оценки и комментарий к каждому ходу.
- Двуязычие — полностью русский и английский интерфейс.
- Тёмная тема, mobile-first вёрстка, анимация падения фишек.
Каркас под Stripe с кнопкой Upgrade to Pro — для более глубокого анализа, дебютной книги и эксклюзивных скинов.
| Слой | Технология |
|---|---|
| Фреймворк | Next.js 16 (App Router, RSC) |
| Язык | TypeScript 5 |
| UI | React 19, Tailwind CSS v4, lucide-react |
| Состояние | Zustand (с сохранением в localStorage) |
| Движок | Свой битборд negamax + альфа-бета |
| Бэкенд | Supabase — Postgres, Auth, Realtime, RLS |
| Темы | next-themes (система / светлая / тёмная) |
| Хостинг | Vercel |
Движок использует классическую битборд-кодировку Паскаля Понса (7 колонок × 7 бит, на BigInt) — ту же, что и топовые решатели «Четырёх в ряд». Проверка победы, угроз и генерация ходов — операции сдвига-и-маски за O(1).
npm install
cp .env.local.example .env.local # вписать ключи Supabase (опционально)
npm run devОткрой http://localhost:3000.
Без настроенного Supabase приложение работает в гостевом режиме — локальная игра вдвоём и партии с ИИ доступны; вход, история, рейтинги, магазин и онлайн — выключены.
- Создай бесплатный проект на supabase.com.
- Впиши URL проекта и anon-ключ в
.env.local. - Выполни SQL из
supabase/migrations/по порядку (0001→0004) в SQL-редакторе Supabase. - В Auth → Providers включи нужные способы входа (email по умолчанию включён; для Google добавь OAuth-клиент).
- Перезапусти
npm run dev.
src/
lib/
engine/
bitboard.ts – примитивы битбордов Паскаля-Понса, проверка победы
game.ts – GameState, легальные ходы, статус, отмена
solver.ts – negamax + α-β + итеративное углубление + пресеты ИИ
coach.ts – пост-анализ партии: метки ходов, поиск угроз
cosmetics.ts – каталог магазина (скины фишек, темы доски) + резолвер
elo.ts – математика Elo + награды монетами
puzzles/ – выверенные движком позиции
i18n/ – словарь RU/EN + контекст и хуки
store/ – Zustand-стор партии (localStorage)
supabase/ – браузерный и SSR-клиенты (мягко деградируют)
hooks/ – useUser, useMatchPersistence, useGuestId
components/
Board.tsx – игровая доска, рендер с учётом скинов
GameView.tsx – локальный режим / ИИ + полный экран
OnlineRoom.tsx – онлайн через каналы Supabase
CoachPanel.tsx – степпер + график оценки + комментарий
UsernameGate.tsx, NavBar, AuthMenu, ThemeToggle, LanguageToggle …
app/
page.tsx лендинг (bento-сетка фич)
play/ local/ ai/ online/ режимы игры
puzzles/ библиотека задач + решение
coach/, coach/[id]/ анализатор
shop/ монеты и магазин косметики
leaderboard/ лидерборды PvE / PvP
onboarding/ выбор обязательного ника
history/, login/, pro/
api/smoke/ встроенные тесты движка
supabase/migrations/ 0001 схема → 0004 монеты и косметика
Для каждого хода движок считает позицию до хода и сравнивает оценку лучшего хода с оценкой сыгранного:
| Потеря в оценке | Метка |
|---|---|
| ≤ 1 | Лучший |
| ≤ 3 | Хороший |
| ≤ 6 | Неточность |
| ≤ 12 | Ошибка |
| > 12 | Зевок |
Паттерны перекрывают оценку: сыграл выигрыш сразу → Лучший; не сыграл доступный выигрыш → Упущенная победа; закрыл единственную проигрышную клетку → Вынужденный; проигнорировал угрозу соперника → Зевок; лучший ход, создающий ≥ 2 выигрывающих ответа → Блестящий.
При запущенном дев-сервере открой http://localhost:3000/api/smoke. Прогоняются встроенные проверки движка (победы по горизонтали / вертикали / диагонали, отмена хода, отказ при полной колонке, поиск немедленного выигрыша и блока) и валидность решений всех задач — ответ { ok: true, errors: [] }.
MIT.