Трудно быть Богом

в 4:50, , рубрики: controls, mobile development, История ИТ, разработка под iOS, метки: ,

В середине рабочей недели бывает трудно.
Ты бегаешь к умывальнику и бросаешь в глаза холодную воду.
Кто-то уходит в тоску, запой или Хабр.
В этот непростой час хочу напомнить, что ты — подобен Богу.
Пишущий

 <body>Новый мир</body> 

или

s/я/мы/

— почти Бог, зодчий нового мира.
Хорошего, плохого, я не это обсуждаю.

Любое приложение — новый мир. Skype или Tetris, Xcode или нонейм из GooglePlay — новый мир, в который ты вдруг заходишь.
Ты покидаешь его или остаешься жить.

То же самое происходит с созданными тобой Вселенными.

В них действуют законы, которые придумал ты, вольно или невольно.
И как люди, твои миры рождаются и умирают.

К чему это я?

Про тетрис

Упомянутый всуе тетрис был когда-то популярен, но все мы его покинули. Стакан пуст и сух.
Вспомни, сколько лет назад ты играл в него? Но разве в юности ты не создавал собственный мир тетриса на С, Паскале или Javasript?

Всех завораживал процесс заполнения дырок кубиками.

По мере постижения мастерства, человек пресыщался. И получал удовольствие только в максимально сложном, адреналиновом режиме.
Выжить на максимальной скорости. На заполненном до краев стакане. Когда на спасение остается пол-секунды.
В мозгу рождались комбинации клавиш, которые надо почти одновременно нажать. И фигурка опускалась в предназначенное ей ложе.
По скорости печатания игроки в тетрис догоняли профессиональных машинисток. 700 знаков в минуту.

Игровой процесс

Ладно, покончим с лирикой. Формализуем игровой процесс.
Отбрасывая условности, в тетрисе было всего 4 кнопки. (a)право, (b)лево, ©крутить по часовой, (d)крутить против часовой.
Понятно, что преобразования в тетрисе, например, a*c*c = с*a*c = c*c*a коммутативны.
То есть, результат не зависит от очередности нажатий на клавиши.

Именно в простых мирах верно равенство при перестановке (коммутативный закон)

a*b = b*a

Мир тетриса прост. Повторю. Вот почему его все бросили.

Реальный мир другой. Он сложный. Хотя в нем, как в тетрисе, происходят события A или B, изменяющие его.

  W=A*W;
  W=B*W;

Говорят, что древние греки события A и B называли аффиными преобразованиями. Не знаю, не уверен.

Так вот, для аффинных преобразований из большого мира A*B не равно B*A.

Пример? Пожалуйста.

A="Мы выпили вина и приятно провели время"
B="Я пришел домой к жене"

Согласитесь, что A*B совсем не то, что B*A.
Мало того, в результате перестановки двух преобразований полученный мир может отличаться катастрофически.

Так куда ушли игроки в тетрис? В трехмерный стакан, куда еще, ведь CS тогда еще не было.
И в трехмерном тетрисе A*B не равно B*A.

Немного истории про трехмерный мир

Если не ошибаюсь, трехмерный тетрис назывался BlockOut и был сделан в далеком 1990 году для 286 процессора.
В нем шесть кнопок для вращений в трех плоскостях и 8 кнопок для движения вдоль двух осей X и Y.
Игра вечная.
Я знаю 50-летних ребят, которые купили компьютеры, только для того, чтобы иногда вспомнить молодость и поиграть в BlockOut.
И играют они только в одном режиме. Стакан размером 3x3x18. Глубина по оси Z = 18. Сложный набор фигур.
Набравший в эту игру 200 000 очков считается гуру.
Его трехмерному мышлению завидуют Риман, Гильберт и А.Т.Фоменко.

У самой игры есть сайт, рейтинги, залы славы, правила, система подсчета очков, наборы фигур и даже исходный код.

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

Поймите, что на быстрых уровнях фигурка падает на дно за 1.1 секунду и человек должен успеть сделать 3-5 последовательных нажатий.
Причем последовательность нельзя менять! А ему предлагают мультитачем крутить фигуру в плоскости XY.
На один только мультитач-вращение уходит почти секунда.

Короче, надо придумывать свое.

Я рассмотрел четыре варианта и проверил 3 из них.

Продолжение и результат во второй части для гиков BL

Автор: PapaBubaDiop

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js