Иногда хочется занять мозг чем-то не слишком напрягающим. Лично мне больше всего нравятся игры типа «три в ряд». В магазинах приложений их полно, но у всех есть реклама, и они не работают без интернета. Когда-то я наткнулся на «Плюс Сити» от Яндекса и очень долго сидел на ней. Но вчера её закрыли и перестали поддерживать.
Сначала я решил с помощью Claude найти этой игре достойную замену, желательно с офлайн-режимом (чтобы работала в лифте) и без рекламы. Но оказалось проще попросить его написать мне игру с нуля.
Claude предложил Canvas API, приглушённую палитру с геометрическими фигурами и PWA для офлайн-режима. Через пятнадцать минут у меня уже был рабочий прототип.
Дальше мы прошли двадцать итераций. Я добавлял спецблоки: линейную бомбу за четыре в ряд, радиальную за L-образную фигуру, радугу за пять. Потом я заметил, что взрыв бомбы рядом со звёздочкой просто её уничтожает, хотя по логике звёздочка должна активироваться. Так появились цепные реакции. Потом мы добавили лёд, перемешивание при тупиках и автоматическую проверку наличия ходов.
Отдельная история была с балансом сложности. На двадцать восьмом уровне я обнаружил, что для прохождения нужно набирать 268 очков за ход, хотя на первом уровне хватало пятидесяти. Линейная формула для ходов и мультипликатор для цели неизбежно приводят к Dark Souls на поздних уровнях. Мы перебрали несколько вариантов и в итоге остановились на квадратном корне: moves = 20 + sqrt(level) * 5, goal = 800 + sqrt(level) * 300. Сложность почти не растёт, но игра становится длиннее. Настоящий дзен.
Весь код уместился в один HTML-файл на 950 строк. Игра работает офлайн как PWA, сохраняет прогресс между сессиями и не требует ни сервера, ни фреймворка. Она, конечно, простецкая и без графики, но невероятно затягивает. Всё, что мне нужно, в ней есть.
Я выложил её на zen-match.eaprelsky.ru, исходники на GitHub.
Добро пожаловать в мир, где проще написать своё приложение, чем найти нормальное готовое.