habrahabr

Сто строчек кода для любимой

  • воскресенье, 8 марта 2015 г. в 02:11:12
http://habrahabr.ru/post/252421/

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


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

Клон


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

  • Девушки любят вспоминать счастливые моменты вместе;
  • Девушки любят, когда мы помним все даты;
  • Девушки любят сюрпризы.

Игра точно попадала в целевую аудиторию, и мне, как профессиональному геймдизайнеру, было очевидно — эту идею необходимо склонировать. Но прежде стоило оценить риски.
Мой вопрос Его ответ Мои мысли
Сколько времени ушло? Часов пять ночью. Отлично! Одну ночку посидеть.
На чем кодил? Unity3D. У меня за плечами — 12 лет в Game Maker.
С ним управлюсь и того быстрее!
Ей понравилось? Ты что, она была в восторге!
Не думала, что такое возможно.
Она со своим Андройдом на «Вы».
В игры не играет.
Только смски пишет и ВКонтакте сидит.
F*ck Yeah!

Последний ответ развеял все сомнения: игра стоила свеч, ещё как стоила! Остались технические нюансы.
Тэп по фотографии выводил текст прямо поверх неё. Если выбрано правильное фото, похвала и воспоминания. Если девушка не угадала, текст в духе: «Солнышко, неужели ты не помнишь?» И, опять же, приятные воспоминания. Никакого негатива. Реиграбельность (интересно ведь, что сказано о других снимках). Интуитивно понятный интерфейс.
Всего двадцать фотографий. По две на экране. Нажал — выбранное фото масштабируется и улетает вниз. Второе фото тут же исчезает. Появляются ещё два. И так далее.

В конце, когда лучшие моменты жизни отобраны, фотографии взмывают ввысь, к самому центру сцены, чтобы там перевернуться, подобно скрижалям, составляя главные слова:


— Стоп, а как ты сделал переворот?
— Просто меняю скейл карточки по иксу.
— Фуф… Отлегло.

Первая кровь


Я принялся за подарок в первую мрачную ночь. Притворился, что есть срочная работа.
Меня ждала адская прорва анимации. Но раз коллега смог, и я смогу. Помнится, он подключал библиотеку LeanTween для Unity3D. Я решил ответить на это TweenGMS в GameMaker: Studio.

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

У моей девушки есть iPhone и iPad mini, а значит, нужно во что бы то ни стало подогнать игру под все разрешения вообще. Вы спросите, где логика? Три ночи. Я ухожу в дебри скейлинга, сажусь на крючок анкоров, привязываюсь к DPI. Впору заревновать. Светает… Первая ошибка Тони Вендиса.

Настоящий детектив


Рабочим днём, да простит меня коллектив, я попытался осознать, что пошло не так, покаялся программисту, поведал о планах. Клон мой он благословил и наставил на путь истинный.

Следующей ночью было уже не до шуток: девушка заподозрила что-то неладное. Близились выходные, а я отчаянно не успевал. Оказалось, что подобрать двадцать фотографии за три года нашей совместной жизни не так-то просто: они разбросаны не только по папкам, но и по устройствам. Ещё сложнее узнать, какая была снята раньше. EXIF-данные отчаянно свистят. «И лампа не горит, и врут календари…» Приходится восстанавливать ход событий по её Инстаграму: нахожу посты в тех же локациях, выписываю даты, сверяюсь. Готово. Я МакКонахи, блин, я — True Detective.


Выходные. Скрывать сюрприз всё опаснее. Девушка поглядывает на меня, негодуя. Нужно срочно что-то решать. Я решаю, что нельзя просто так взять и добавить фотографии, нужно делать дизайн, чтобы каждый снимок под полароид. Ищу шаблоны Polaroid для Фотошопа, качаю плагин для чтения PSD в Paint.NET, обновляю Paint.NET. Спокойной ночи, любимая!

В белых домашних тапочках, шаркающей кавалерийской походкой мешая любимой спать, поздней ночью третьего дня разработки я вышел на кухню с ноутом: впопыхах делать подписи к фотографиям. Хочется добавить, что «закат догорал на галёрке китайским веером», но догорали нервы, а сроки сгорели дотла, когда я дописал, наконец, последнюю строчку кода, запустил приложение на своём андройде FNF iFive mini с экраном iPad mini и… 10 из 10, Господи! 10 из 10!


Доброй ночи и удачи


Осталась малость: незаметно установить приложение на её айпад. VMware, настало твоё время. Виртуальный мак ругается на сертификаты. iPad лежит в её сумке, сумка — рядом с кроватью. Ночь. Тьма. Я пытаюсь достать его, пальцы дрожат, сердце вот-вот выскочит из груди, она вздрогнула, я замер, она повернулась на другой бок. iPad у меня в руках! Я собираю приложение и валюсь с ног.

С утра, когда она собирается на работу, я передаю ей iPad и с гордостью сообщаю, что вот он — её сюрприз. Чтобы хоть как-то оправдаться, добавляю, что именно над ним я корпел последние два дня и три ночи. Милая иконка с сердечком:


Приложение запускается. Звучит наша песня. Сейчас вылетят карточки, такие красивые, совсем как мы. Сейчас… Сейчас… Можно, я покажу на своём планшете?

Перед рассветом

Его вопрос Мой ответ Мои мысли
Сколько времени ушло? Два дня и три ночи. Больше никогда!
На чем кодил? Game Maker: Studio. Никогда.
Ей понравилось? Она посмотрела и поблагодарила. Никогда…
Через два дня я услышу, как она говорит сестре:

— Куда ходили? Никуда… Он все выходные просидел за компом, со мной не общался. Что подарил? Ну, он сделал мне игру…

Наши отношения становятся напряженнее. Я не хочу больше думать об этом подарке.
Через неделю, переписав часть кода, я найду, почему игра работала на Android и не работала на iOS (TweenGMS не успевал инициализироваться).

И открою главную причину провала клона: оригинал создавался, исходя из возможностей. Мой коллега правильно оценил сроки, потому что видел в голове не результат и реакцию, но процесс от и до. Все фотографии были в телефоне и легко сортировались по дате. Он использовал LeanTween много раз. Unity UI автоматически адаптирует картинку под любое разрешение. У девушки телефон на Android. Он помнил, что времени мало, и не зацикливался на дизайне. Она знала, что он — программист, но не знала, что он ТАК может. Он не тратил их совместное время на разработку. Они часто выбираются вместе куда-то, а этот подарок был чем-то принципиально новым. Уникальность, момент, маркетинг, аудитория. Всего этого я, конечно, не учёл.

И тут меня осенило! Это и есть разработка игр, совсем как в индустрии. Ты играешь в Clash of Clans, читаешь о трёх месяцах на прототип, считаешь чужую выручку, и кажется, что клон — это лучшая идея. Спустя год разработки, когда момент выхода упущен, ты понимаешь, что потратил кучу времени и денег, и всё должно было быть по-другому.

Когда я, в конце концов, закинул рабочую версию на iPad девушки, она окинула меня, уставшего, понимающим, ласковым взглядом:

— Мне понравилось… Правда. Так приятно, что ты всё помнишь!

Завтра 8 марта. Я больше не буду учитывать. Стихотворение написано. Столик забронирован. Я ещё не знаю, что подарю ей, но знаю точно: мы заснём этой ночью вдвоём, друг у друга в руках, там, где раньше были планшеты.