Сайт использует файлы cookie — для входа в кабинет и обезличенной статистики. Подробности — в политике обработки данных.
Игра для iOS · головоломка + веб-версия

«Час пик»

Головоломка на планирование: развезти очередь пассажиров, выводя автобусы с забитой парковки. Написана с нуля — свои правила, свой решатель уровней, своя графика в коде. Вторая, самостоятельная реализация тех же правил на JavaScript даёт играть по ссылке, без магазина приложений.

Роль: игра «под ключ»iOS + веб-версияРусский и английский
«Час пик»
СтекSwift 5SwiftUISpriteKitCore GraphicsJavaScriptCanvas 2DPWA

О проекте

Сверху — очередь пассажиров, снизу — забитая парковка автобусов. Автобус выезжает на платформу, только если перед его стрелкой до края парковки пусто; на платформе три места, пассажиры садятся сами — каждый в автобус своего цвета. Кому автобуса нет, тот ждёт на скамейке; кончилась скамейка и посадить некого — затор.

Игра сделана без единой сторонней библиотеки: 6 646 строк своего кода — 3 787 на Swift для iOS и 2 322 на JavaScript для браузера. Правила вынесены в отдельную структуру без единой ссылки на интерфейс, поэтому ту же партию можно тысячами копий прогонять в решателе.

Веб-версия — не обёртка вокруг приложения, а вторая самостоятельная реализация тех же правил. Она ставится на домашний экран как обычное приложение и работает офлайн после первого открытия. Клиенту достаточно ссылки.

Возможности

01

Решатель уровней

Перебор ходов по состояниям с отсечением повторов: до 200 000 состояний в приложении и 120 000 в браузере. Уровень отдаётся игроку, только если решатель дошёл до победы — непроходимая раскладка исключена.

02

Подсказка из выигрышной ветки

Подсказка отдаёт не «любой доступный ход», а первый ход той ветки, которая ведёт к победе. Её считает тот же решатель.

03

Своя метрика сложности

Проверки «уровень проходится» мало: она не отличает головоломку от коридора. Считаем долю первых ходов, ведущих в тупик, и требуем её роста по уровням — от нуля на первых шести до 0,45 после двадцатого.

04

Генератор со ступенями смягчения

Если решатель не находит проход, генератор снимает сложность по одной ступени: сначала чемоданы, потом замки и шлагбаумы, теснота, и лишь в последнюю очередь возвращает третье место на платформе. Сложный уровень деградирует плавно, а не обрывается.

05

Одинаковый «уровень дня» у всех

Свой детерминированный генератор случайных чисел вместо стандартного: уровень с одним номером раскладывается одинаково на любом устройстве, а ежедневная задача солится датой — всем в этот день выпадает одна и та же.

06

Графика рисуется кодом

Асфальт с разметкой, платформа с навесом, скамейка, город на горизонте, шлагбаумы и замки рисуются в текстуры на лету. Спрайты автобусов и пассажиров собираются из слоёв SVG одним скриптом сразу для iOS и для браузера — силуэт красится цветом маршрута.

Экраны игры

Стек технологий

iOS
Swift 5SwiftUI (меню, карта уровней, оверлеи)SpriteKit (сцена и анимации)Core Graphics (процедурные текстуры)AVAudioEngine (синтез звука)iOS 17+, iPhone и iPad
Веб-версия
JavaScript (ES-модули, без сборщика)Canvas 2DWeb Audio APIService Worker + Web App ManifestОфлайн после первого открытияlocalStorage
Инструменты
Python (конвейер спрайтов из SVG)Xcode / xcodebuildbash + rsync (выкладка)Сторонних зависимостей: 0

Результат

6 646
строк своего кода, без библиотек
0
сторонних зависимостей
2
реализации правил: Swift и JavaScript
RU / EN
переключение без перезапуска

Хотите так же?

Соберём сайт, платформу или мобильное приложение под вашу задачу — быстро, под ключ и с личным кабинетом. Бесплатная оценка сроков и цены — обычно отвечаем в течение часа в рабочее время.

Обсудить проект
Такую же задачу закрываем услугой