Слепой программист и цепи кованные

Здорово, инвалиды (людям с нормальным зрением эта статья неинтересна).
Случилось так, что я с детства близорук. Близорук не от того, что читал под одеялом, а по наследству. И отец мой носил очки, и дед и даже прадед. А я не желал быть очкариком — любил всякие баскетболы-волейболы-хоккеи-водные поло. В 1998 году в возрасте 34 зрение упало до -7 на левом и до -14 на правом глазах. Тут чудо, спасибо Японии и Швейцарии, изобрели ЛАСИК, операцию на глаза — и я одним из первых в Москве лег под лазер — и стал счастлив, как Одиссей, вырвавшийся из лап Циклопа. Процесс восстановления зрения после операции занял 2 недели — дело в том, что в течении этих 2 недель клиент абсолютно дальнозорк — ты видишь время на высотке МГУ из любой точки Москвы, но не можешь прочитать ни строчки в новом рассказе Конан-Дойля. ? Он умер? Жаль, парень хорошо сочинял детективы.

Так вот, жил я счастливо полторы дюжины лет, как вдруг исправленное зрение вновь стало портиться. Возможно, потому что тот первый ЛАСИК частично делали скальпелем. Это сейчас появился ФЕМТО-ЛАСИК 3-его или 4-ого поколения, когда все делается лазером. Я не буду подробно описывать технологию операции — ни к чему это. Поверьте, весь процесс занимает 30 секунд и не приносит никаких физических болей и неудобств. Особенно, если не знать, что тебе конкретно делают.
И вот я таки решил повторно сделать ЛАСИК или, как сказал врач: Поднять лоскуты на место. Похоже, за 17 лет активной жизни операционные лоскуты на роговице сползли. — Пациент, почему у вас повязка на ноге? Сползла…

Ну, слава Богу, сделали мне повторную процедуру (чем не рекурсия?) и я стал ждать 2 недели, как в молодости.

Ан нет, шалишь — процесс восстановления ближнего зрения затянулся на полгода. И даже до сих пор не закончился. Что обнадеживает.

Всем, кто решится на операцию, рекомендую перед тем, как отдаться врачам наметить реперные точки. Выбрать в качестве образцов плакаты с текстом на улице и на стене в квартире. В любимом туалете повесить таблицу API, короче найти стационарный текст на разных расстояниях, который Вы будуте распознавать до и после операции. И запомнить, как хорошо вы распознаете этот текст ДО визита к врачам. И, второе, купить большие темные очки — чтобы 3–4 дня после резки ни солнце, ни пыль, ни ветер, ни случайные отмашки не трогали Ваши чудесные новые очи. Очки взять с собой на операцию! Они нужны будут сразу.

Лучший возраст для корректировки зрения 30–45 лет. Организм быстро восстановится. Я вот в свои 52 попал конкретно, тем более повторный ЛАСИК на глаза — это вообще редкость, не знаю аналогов. Глаза привыкают к новому состоянию очень медленно. Представьте, что вы ничего не видите вблизи — ни текст книг, ни экран смартфона, ни Xcode, ни MSVC. Это ужасно. Очки для чтения не помогают, зрение не стабилизовалось.

При этом футбол, хоккей, пейзажи, лица красивых женщин — все прекрасно, вдали видишь очень неплохо. Тьфу-тьфу-тьфу.

Но как жить без чтения? Я привык уходить от проблем в кодирование игр, в решения головоломок, в карточные игры. Всего этого я лишился. Сначала я даже хотел отравиться, но не смог найти нужного яда — ни черта же не видно, что написано на этикетке. Патроны тоже не нашел, скрепки какие-то все попадались. Пришлось попросить приятеля настроить Xcode для плоховидящего программиста. Установки-шрифты-размер 24 вместо 14. И более-менее стал кодировать.

Но здесь снова проблема — я не могу сделать головоломку с мелкими деталями — мне доступна сетка 3 на 3 с большими цифрами и разными цветами. Слава Аллаху, цвета я различаю так же хорошо, как чистые носки от использованных. Нюх, кстати, стал удивительно тонок.

Ладно, 3 цвета и 3 цифры? Можно ли придумать игру на таких простых условиях на 2016+6000 году существования человечества? А можно. Конечно, эта головоломка абсолютна не ширпотребна, но среди читателей Хабра найдутся перцы, которые смогут в нее сыграть и даже победить. Тут полно сумасшедших.

Так вот, как родилась игра, условное название Crazy Chains, — сначала было поле 3 на 3.

image

Все фишки упорядочены по цветам и достоинству. Зеленые 1–2–3. Оранжевые 1–2–3. И синие 1–2–3.
Бешено перемешиваем все фишки и получаем такую картинку.

ef2725e658a4433e9d39f93dad177ded.png

Теперь задача — за наименьшее число ходов восстановить начальную упорядоченную картинку. Правило такое- можно менять местами любые фишки одинакового цвета или одинакового достоинства.

Все. Заметьте, для создания игры мне не надо рисовать картинки — все фишки отображаются простым UILabel. Цвета я взял из Интернета по запросу flat design color set, шрифт — системный на стороне игрока, скругление фона делается двумя операторами.

       let p: UILabel =  itemImage
       p.layer.backgroundColor  = color.CGColor
       p.layer.cornerRadius = 2
 

Быстро сделал прототип игры — поиграл — заскучал. К концу дня стало неинтересно играть — любой расклад собирается за 20 ходов. Пробовал увеличить доску до 4 на 4 и даже 5 на 5 (бедные глаза!). Быстро учишься, игра приедается. И я подумал, а может разрешить менять только 1 фишку? Как бы объявить её перевалочным пунктом. Скажем, нижний правый угол. Игра та же, но менять можно только нижнюю правую клетку на любую другую такого же цвета или достоинства.

Стал проверять на сходимость расклады — менял попарно любые две фишки. Все вроде сходилось, пока не встретился такой расклад. И вот тут я сломал голову.

e6990a52a934481eb1ed6c687c79b8ad.png

Бился я, бился над ним, плюнул, решил что не собирается. И стал раздумывать о группах и вяло менять фишки — как вдруг, бац, расклад сложился. Мне пришлось сильно напрячь мозги, чтобы научиться мыслить в рамках игрового процесса, зато теперь любой расклад я собираю за 22 хода, а раскладов, вообще говоря, не очень много — всего-то 9!… Если будете делать игру на Андроиде, можно добавить доски 4 на 4 и 5 на 5. Насчет 3 на 4 не думал. Возможно, будет интересно.

Выложил игру в магазин и забыл про нее. Но вдруг обнаружил, что зрение мое чуть-чуть улучшилось. И даже можно подобрать очки для чтения. Через месяц зрение снова чуть поправилось и я сменил очки на более подходящие и забодал новую игру размером 5 фишек в ряд — на iPhone я теперь вижу это разрешение и без очков. Игра простая — смесь Six Towers и 2048, я назвал ее King Towers и с удовольствием повторил эксперимент по созданию игры без единой картинки. Для рисования звездочек и мордочек я просто использовал символы UTF-8.

74d8409da8be453bb3ca6a0cfb06e92b.png

Код для отображения картинок довольно прост.

       let symb = ["\u{250f}", "\u{2513}", "\u{251b}", "\u{2517}", "\u{2501}", "\u{2503}"]
       p.text = symb[d]

Примитивизм, конечно, но разве не этому придет человечество через пару лет?

Увидимся, братцы)

Комментарии (1)

  • 5 сентября 2016 в 14:18

    0

    мне вот интересно, а если купить беспроводную мышь и клавиатуру, монитор 24 дюйма и сесть в 2х метрах от монитора — это не решит проблему с дальнозоркостью?

© Habrahabr.ru