
Предисловие
Вернемся к истокам. Когда я опубликовал свой первый материал о клоне Flappy Bird, я рассчитывал на некое внутреннее удовлетворение, но итог оказался смешанным. Я освежил знания по физике, изучил тонкости рендеринга и понял, в чем секрет феноменальной популярности этой игры. Однако один комментарий заставил меня взглянуть на ситуацию иначе:
Один из читателей под ником Einherjar отметил: «Еще в 2004 году на моем кнопочном LG была предустановлена точно такая же игра, только вместо птицы там была подлодка. Так что этот проект вряд ли можно назвать великим или оригинальным».
И он абсолютно прав. Концепция игры с преодолением препятствий через «тап» существовала задолго до релиза Донга Нгуена. Я и сам припоминаю подобные тайтлы, хотя ошибочно полагал, что они вышли в эпоху после Flappy Bird. Теперь я осознаю свою ошибку.
После публикации я долго анализировал отзывы и пришел к выводу: технически проект жизнеспособен, но ему не хватает души. Как говорил Альберт Эйнштейн:
«Самое прекрасное, что мы можем испытать — это ощущение тайны. Она источник всякого подлинного искусства и науки»
Мне этого ощущения не хватало: я просто воспроизвел узнаваемый стиль, не добавив в него ни капли «магии». Именно тогда я решил создать нечто свое — если не в плане концепции, то хотя бы в плане необычного подхода к реализации.
Почему простого копирования недостаточно
Я мог бы закрыть проект на фразе «клон готов, расходимся», но чувство незавершенности не давало покоя. Знакомо ли вам это ощущение, когда работа сделана, но финального удовлетворения нет? Это сродни завершенному полотну, на котором автор забыл поставить свой уникальный мазок.
Первым порывом было внедрить нейросети — тренд, который первым приходит на ум при попытке автоматизировать что-либо. Я подобрал стек, планировал использовать TensorFlow для обучения с подкреплением и Q-learning — звучало серьезно. Просидев пару вечеров над документацией, я поймал себя на мысли: «Не стреляю ли я из пушки по воробьям?» (отсылка к Звездным войнам).

Все параметры игры — гравитация, прыжок, препятствия — описываются парой формул из школьного курса физики (v = v₀ + gt). Зачем здесь нейросеть, если компьютер способен мгновенно рассчитать траекторию?
И тут меня осенило: почему бы не реализовать честный алгоритмический перебор? По аналогии с шахматными движками, которые просчитывают варианты на несколько ходов вперед, можно создать «автопилот» на основе чистой комбинаторики и математики. Никаких «черных ящиков» и тяжелых вычислений — только логика.
А что дальше?
Возникла новая дилемма: если бот будет просто идеально проходить игру, это быстро наскучит. Игроку нужны эмоции и динамика, чтобы даже наблюдение за игрой ИИ приносило удовольствие.
Так я взялся за усложнение механики: добавил подвижные трубы, летящие навстречу объекты и смену погодных условий (шторм и ночной цикл).
Основная часть
Прогрессия сложности: почему статичность губит интерес
В оригинале Flappy Bird уровень сложности практически не менялся, что удивительно для столь популярного проекта. Первая и последняя труба были идентичны. В моем же клоне, как я заметил ранее, физика была слишком предсказуемой: игрок быстро находил «золотую середину» и терял азарт. Целью стало создание прогрессии, которая заставила бы игрока чувствовать себя мастером при достижении новых рубежей.
Движущиеся трубы: магия синусоиды
Вертикальная динамика труб — стандарт жанра, но она отлично работает. После достижения 20 очков трубы начинают колебаться:
const offset = Math.sin(this.pipeMovePhase + pipe.x * 0.01) * amplitude;
pipe.topHeight = pipe.baseTopHeight + offset;
pipe.bottomY = pipe.topHeight + PIPE_GAP;
Вместо случайных значений я выбрал синусоиду, так как она делает поведение объектов предсказуемым, но сложным для прохождения. Каждая труба имеет свою фазу, а с ростом счета амплитуда увеличивается, сужая «окно» для маневра с 150 до 70 пикселей.
getCurrentAmplitude() {
const levelsAbove = Math.floor((this.score - 20) / 10);
return Math.min(25 + levelsAbove * 8, 80);
}
getCurrentMoveSpeed() {
const levelsAbove = Math.floor((this.score - 20) / 10);
return Math.min(0.8 + levelsAbove 0.3, 3.5);
}
Новые механики
Встречные препятствия

При наборе 50 очков в игру вводятся летящие навстречу объекты. Коллизии рассчитываются через простую проверку пересечения двух окружностей, что мгновенно завершает сессию.
checkCircleCollision(x1, y1, r1, x2, y2, r2) {
const dist = Math.sqrt((x1-x2)2 + (y1-y2)2);
return dist < (r1 + r2);
}
Смена времени суток
Чтобы дать игроку передышку, каждые 70+ очков активируется «ночной режим». В это время трубы движутся спокойнее, проем становится шире, а опасные сферы пропадают — это отличный способ снизить психологическую нагрузку перед новым этапом.
Автопилот: архитектура принятия решений
Бот оценивает ситуацию на основе трех факторов: текущая позиция, вектор скорости и временной интервал до следующей трубы. Он перебирает последовательности прыжков, стараясь выбрать ту, которая позволит птице пройти строго через центр просвета.
Предсказание траектории
Бот анализирует будущее положение трубы, используя ту же математическую модель, что и сам движок игры:
predictPipePosition(pipe, frames) {
const futureX = pipe.x - pipeSpeed frames;
const futurePhase = this.engine.pipeMovePhase + moveSpeed 0.02 frames;
const predictedOffset = Math.sin(futurePhase + futureX 0.01) amplitude;
const predictedTopHeight = pipe.baseTopHeight + predictedOffset;
return { topHeight: predictedTopHeight, bottomY: predictedTopHeight + 150 };
}
В экстренных случаях (если птица критически близка к столкновению) алгоритм переходит в режим мгновенной реакции, минуя сложный расчет планов.
Заключение

Я достиг своей цели: превратил базовый клон в динамичный проект с уникальными механиками. Главный вывод для меня: нейросети — мощный инструмент, но для конкретных, формализованных задач классическая математика зачастую оказывается эффективнее и элегантнее.
Не усложняйте систему без реальной необходимости. В моем случае хватило школьной физики и здравого смысла.
Полезные ссылки
Попробовать игру в действии можно здесь (клавиша «B» активирует бота).
Исходный код проекта доступен на GitHub. Буду рад вашим идеям и предложениям по развитию проекта.
© 2026 ООО «МТ ФИНАНС»


