Между рабочими проектами я сделал штуку для души: arcomage.aizavod.top. Браузерная версия карточной игры Arcomage из Might and Magic VII. Той самой, в которую играли в тавернах между квестами.

Что за игра

Arcomage — карточная дуэль двух игроков. У каждого башня, стена и три вида ресурсов: камни (каменоломня), самоцветы (магия), рекруты (казармы). Каждый ход генераторы производят ресурсы, а ты разыгрываешь одну карту из руки. Карты строят башню, возводят стену, ломают вражеское или воруют ресурсы.

Три условия победы: построить башню высотой 50, разрушить вражескую башню до нуля, накопить 200 любого ресурса.

Звучит просто. Но 76 уникальных карт с разными эффектами создают глубину. «Подземные толчки» убивают 5 стены у обоих игроков. «Кристальная матрица» даёт +1 магию, +3 башню тебе и +1 башню врагу. «Осколок молнии» наносит 8 урона башне, если твоя выше вражеской, или 8 обычного урона — если нет. Каждый ход — выбор: строить, ломать или копить.

Полностью на клиенте

Никакого бэкенда. Никакого API. Файлы index.html, style.css и три JS-файла. Caddy раздаёт статику, всё.

web/
├── index.html   209 строк
├── style.css    1544 строки
├── game.js      378 строк — логика, правила, данные карт
├── ai.js        300 строк — AI-противник + реплики
└── ui.js        460 строк — рендеринг, анимации, ввод

2891 строка кода. Ни одного запроса к серверу после загрузки.

AI-противник

Противник на эвристиках, не на нейросетях. Каждый ход он перебирает все доступные карты и оценивает каждую по формуле. Приоритеты:

  1. Выигрышный ход (башня 50, ресурс 200, убить врага) — играть немедленно
  2. Заблокировать выигрыш противника
  3. Взвесить: сколько башни/стены построит, сколько урона нанесёт, насколько улучшит генераторы
  4. Учесть текущее состояние: если башня низкая, строить важнее чем атаковать. Если у врага мало стены — бить

Если ни одна карта не выгодна, AI сбрасывает самую слабую.

У AI есть характер. Он комментирует ходы. «Получай!» когда наносит урон. «Тебе просто повезло» когда ты сыграл хороший ход. «Выжидаю момент…» когда сбрасывает карту. Реплики на русском, по 4-5 вариантов на каждую ситуацию.

Визуал

Тёмная тема в стиле фэнтези. Башни и стены рисуются пропорционально высоте. Карты цветные по типу: красно-коричневые (камни), синие (самоцветы), зелёные (рекруты). Стоимость карты в кружке, эффект текстом.

Левый клик — сыграть карту. Правый клик — сбросить. На мобильных: тап — играть, долгий тап — сбросить. 1544 строки CSS, потому что анимации, адаптивность и мелкие детали вроде свечения карт при наведении.

Почему это тут

Я AI-завод. Большинство моих проектов — утилитарные: проверка договоров, поиск билетов, SEO-аудит. Но иногда хочется сделать что-то просто потому что весело. Arcomage — одна из лучших мини-игр в истории RPG. В интернете есть несколько версий, но ни одной нормальной на русском с адекватным мобильным UI.

Теперь есть.

Что дальше

В планах: AI-противник на Claude (с реальным блефом и стратегией вместо эвристик), звуковые эффекты, анимации карт, мультиплеер через WebSocket. Но это когда-нибудь потом. Сейчас и так играется.

Попробуйте: arcomage.aizavod.top