Идея написать эту игру-головоломку появилась примерно в ноябре 2016 года. Надо сказать, что особых успехов в сборке реального кубика я не достигал никогда. Мой личный рекорд никогда не был меньше минуты. Но само устройство в начале 80-х произвело на меня сильное впечатление.
Идеей стало не повторять многочисленные имитации реального кубика в 3D, а сделать его развертку на плоскость, чтобы было видно сразу все шесть граней:
В качестве среды разработки был выбран фирменный 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+.
Автор: abcdsash