Flat Cubik (развертка кубика Рубика на плоскость) +23


Идея написать эту игру-головоломку появилась примерно в ноябре 2016 года. Надо сказать, что особых успехов в сборке реального кубика я не достигал никогда. Мой личный рекорд никогда не был меньше минуты. Но само устройство в начале 80-х произвело на меня сильное впечатление.

Идеей стало не повторять многочисленные имитации реального кубика в 3D, а сделать его развертку на плоскость, чтобы было видно сразу все шесть граней:

Скриншот
image

В качестве среды разработки был выбран фирменный Xcode, а в качестве языка — Swift. К тому времени у меня уже был опыт работы с этой средой и языком, поэтому особых сложностей само кодирование вызывать было не должно. Хотя, некоторые моменты алгоритмического характера требовали пеших прогулок и раздумывания над ними. Вот только один пример: на каждом шаге (ходе) пользователя нужно проверять собранность кубика. Если решать задачу в лоб, то можно просто пробегать по элементам массивов и сравнивать их на одинаковость.

Исходный массив (кубик собран, как в самом начале игры) представлен в виде:

var Tnew = [
    [[1, 1, 1], [1, 1, 1], [1, 1, 1]], // синий
    [[2, 2, 2], [2, 2, 2], [2, 2, 2]], // белый
    [[3, 3, 3], [3, 3, 3], [3, 3, 3]], // зеленый
    [[4, 4, 4], [4, 4, 4], [4, 4, 4]], // желтый
    [[5, 5, 5], [5, 5, 5], [5, 5, 5]], // оранжевый
    [[6, 6, 6], [6, 6, 6], [6, 6, 6]]  // красный
]

То уже после сборки можно получить перестановки строк в любом порядке, например, вот так:

var Tnew = [
    [[5, 5, 5], [5, 5, 5], [5, 5, 5]], // оранжевый
    [[3, 3, 3], [3, 3, 3], [3, 3, 3]], // зеленый
    [[1, 1, 1], [1, 1, 1], [1, 1, 1]], // синий
    [[4, 4, 4], [4, 4, 4], [4, 4, 4]], // желтый
    [[2, 2, 2], [2, 2, 2], [2, 2, 2]], // белый
    [[6, 6, 6], [6, 6, 6], [6, 6, 6]]  // красный
]

Но при этом расположении надо считать, что кубик так же успешно собран.

Для лучшего погружения в задачу на рынке был куплен простенький и дешевый вариант кубика. И творчество началось… с исследования реального кубика. Граням присвоены номера, строкам и столбцам на гранях — координаты.

При этом движение строки или столбца должно приводить в движение «связанные» с ним строки или столбцы. Все как во взрослом кубике — перемещаете одно — в движение вовлекаются и «соседи».

Но при использовании %device% мы, если и задумываемся над этим, то весьма мимолетно и не особо глубоко. Для нас это как часть картины мира, которая особо и не удивляет. Другое дело — программная модель! Тут уже надо создать искусственную реальность, а потому понимать «реальную реальность» надо достаточно полно.

Были изрисованы и исписаны десятки листов. Иногда заметки или идеи приходилось записывать просто на том, что есть под рукой, чтобы потом уже не потерять их насовсем. И где-то к началу апреля получился работающий прототип программы. Кубик можно было собирать. Но и правило 20 на 80 (или его вариант 30 на 70) работало по полной. Надо было доделать массу сервисных мелочей: таймер сборки, счетчик ходов, какую нибудь сигнализацию об окончании сборки, подключить Game Center. И подумать о возможной монетизации. Это было бы весьма приятным бонусом.

В итоге где то к середине мая программа была готова к тому, чтобы ее можно было начинать тестировать не только на устройстве разработчика. Был оплачен аккаунт разработчика и несколько избранных из разных городов и сёл планеты получили возможность «покрутить» плоский кубик на своих устройствах (программа распространялась через Test Flight).

Что касается локализации, то я сразу решил не делать никаких надписей на экране и тем самым уйти от этой проблемы. Пока это удается.
Экран весьма минималистичен. Пользователь видит классическую развертку кубика на плоскость в виде креста, четыре кнопки: собрать кубик, запутать кубик, сменить фон и показать Game Center. Ну а вверху два счетчика: ходы и время. Время стартует только после нажатия кнопки «Запутать». Если пользователь запутал кубик сам и потом собрал — считаются только ходы.

Впечатления от программы у «аудитории»


Естественно, что меня всегда интересовало мнение тех, кто тестировал программу. Кто-то говорил, что кубик надо делать в 3D, на что я отвечал, что такие варианты кубика в АппСторе уже есть и делать их очередной клон у меня нет никакого интереса. Видимо само магическое слово «3D» уже как то привлекало людей и они считали это хорошей идеей. Кто-то сразу понимал идею развертки. Однако, наблюдения за тестерами показали, что переход «3D -> 2D» у большинства нормальных людей вызывает не иллюзорные сложности. Даже те, кто довольно легко умеют собирать реальный кубик, не могли сразу собрать правильно даже одну грань. Не говоря уже о дальнейшей сборке. Впрочем, каждый может сам попробовать это на себе.

Забавно наблюдать за Game Center. Точнее за появление в нем новых пользователей. Эта штука просто нереально крута! Я сделал в GC две таблицы: время сборки и количество ходов. В них попадает любой, кто соберет кубик полностью. А если при дальнейших сборках какой то результат будет улучшаться, то он будет оставаться в соответствующей таблице. Довольно долгое время в таблицах были только мои результаты, записанные с устройств разных тестеров под их именами. И я потихоньку начал разочаровываться в человечестве. И вот не так давно в таблицы попал совершенно не известный мне персонаж. Сначала он находился в обоих таблицах в нижних строчках. Затем начал уверенно двигаться вверх. Примерно через пару суток он занял верхние строчки обоих таблиц с довольно потрясающими результатами: 1 минута 40 секунд и 80 шагов. Впрочем, его рекорд до сих пор никем не побит в рамках Flat Cubik.

И еще совсем недавно появился второй (!) собравший, который собрал Flat Cubik за 25 минут 01 секунду и 254 хода. И занял пока шестое место в рейтинге. При этом упорства в улучшении своих достижений он не проявляет. По крайней мере лучших результатов от него не появляется.

Что сейчас и дальнейшие планы


Первая версия программы попала в App Store в последних числах июня.
Первой ошибкой было ставить на программу цену в 1$. Первый день принес 6 платных скачиваний, потом число скачиваний упало до 2.
Можно ли считать это провалом? Очень на то похоже… Позже игра стала бесплатной и в настоящее время набрала около 200 скачиваний.
Рекламы нигде не было. Если не считать короткое сообщение в конференции iXBT (внутри одной из тем MacLife).

В дальнейшем планируется добавить баннер AdMob. Была идея сделать undo для ходов пользователя. А так же определенные варианты подсказок ходов. Пока с подсказками все находится на той же стадии прогулок и размышления. Те, кто знает, как собирать кубик, понимают, что от текущего состояния можно прийти к собранному совершенно разными путями.
Да вот хотя бы маленький пример: перестановка 3-х угловых элементов: я знаю вариант в 22 хода и вариант в 8 ходов. Сам использую 8-ми ходовку.

Или вот сама стратегия сборки: самая простая — послойная. Начиная, например, с белого креста, затем углы, затем второй слой, а затем и третий. Но рано или поздно, можно попытаться пойти по варианту: 6 крестов (все грани), а затем 8 углов. В общем путей много.

В разработке сейчас версия для Андроид. Ну, а сейчас программа полностью бесплатна и доступна в АппСторе для всех устройств с установленной iOS 10. Буду рад появлению в таблицах GC новых людей.

P.S.: iOS 10 была выбрана после потери нескольких дней на поиск проблемы во внутренних библиотеках Apple (может потом напишу про это отдельную заметку). Обнаружилось, что проблема отсутствует в версиях iOS, начиная с 10. Чтобы не обходить проблему в более ранних версиях iOS и было принято решение, что Flat Cubik будет работать на устройствах с iOS10+.

PS2: демонстрация сборки кубика
видео

-->


К сожалению, не доступен сервер mySQL