Предлагаю пятничные апрельские тезисы про Что наша жизнь? Эллипс...

Здесь нет кода и смысла, нет математики и ссылок на GitHub. Короче, самый то, чтобы не читать. Но ты прочти.

А началось все с этой морды:


Вернее сказать, началось все с этой строки
10 CLS

30 лет назад эта команда очистила экран IBM PC/XT. Я, как зачарованный, смотрел на потухшие 320 на 200 черных точки и понимал, что теперь могу их зажечь, как звезды на небе. Простой командой. Простой парень. И я зажег. Так зажег, что до сих пор остыть не могу.

Первая игра, сделанная в конце 80-ых, была написана на языке BASIC, который не имел компилятора, а исполнялся интерпретатором команд. И потому, чередующиеся картинки мигали, как слепой Пью на прицеле у Билли Бонса.

Пофик! До этого вся анимация, созданная мною, умещалась в 50 страницах маленького блокнота. Мы рисовали внизу каждой страницы человечка, выпускающего стрелу, стрела летела и поражала другого человечка. Потом страницы блокнота пролистывались большим пальцем правой руки — вжи-и-и-и-и-и-и-и-и-и-и-и-и-и-и-и-и-и-и-и-и-и-и-и-и-и-и-и-и-и-и-к, и 50 кадров мультика вызывали одобрительное гуканье. Было клево. Самые красивые девчонки школы просили блокнотик. Мягко клали руку на плечо и заглядывали в глаза. Стоп, я тону. Лучше вернемся к басику.

Так вот, первая сделанная игра на BASICе называлась Челюсти. Челюсти сжимались и разжимались. Конфигурация зубов менялась. Герой бегал внутри пасти, ел фрукты и пытался не попасть на зубок.

Короткое видео геймплея


Прошло время. Очень быстро. Проскочили компилятор для BASIC, Pascal, С, С++, JS, Obj-C и Swift.
Я делал игры на всем, что втыкается в розетку, и это были в том числе очень даже 3D симуляторы танкового полигона для Муромского/Арзамасского (тсс! строгая тайна!) завода бронетранспортеров и что только не было, лучше и не вспоминать.

И вдруг вчера мне приснилась та, первая игра. Представляете? Ну, что бы вы сделали на моем месте? И я такой же. 200 строк кода — и, опта! игра лежит в магазине, а код на GitHub-е.

Что изменилось за 30 лет? Изменилось программирование — раньше челюсти сжимались в цикле все с большей и большей частотой, пока не достигали скорости отрисовки изображения. И если компьютер был слабый — игрок жил бесконечно. Теперь все иначе. Циклов нет. Такты бешеные. А для расчета частоты схлопывания челюсти используют математику. Пусть простую, но интересную. Переходим к выводу формулы частоты движения челюсти.

Формулировка задачи


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

Итак что мы имеем?

1) Устанавливаем время обновления экрана iPhone в 50 герц. То есть 50 раз в секунду. 50 тиков на секунду. Запомним.

2) Предельная реакция игрока. Вспомним, спринтер на старте забега реагирует на выстрел с задержкой 280 миллисекунд — за это время сигнал проходит путь от его мозга до его же икроножных мышц. iPhone-юзер посылает сигнал не ногам, а своим щупальцам, путь нервного сигнала нерда короче вдвое, =140 миллисекунд — это минимальное время реакции. 7 тиков. Герою игры надо пробежать от края до края челюсти за 6 тапов. То есть минимум 6 тиков. Итого — челюсти, в пределе, не могут сжиматься быстрее, чем за 6+7=13 тиков.

3) Начальная скорость челюстей — 1 щелк за 50 тиков. Если челюсти будут щелкать слишком медленно — пользователь бросит игру. Поэтому уже через 5-10 секунд частота должна быть 1/25-1/35 тика.

Решение. Имеем нелинейную функцию:

f(0) = 50
f(10) = 30
f(10^10) = 13

Без дураков ясно — это гипербола. Записываем формулу:

f(t) = A + B/(C+t)

Три неизвестные — три уравнения, решаем (просто удовольствие решать школьные задачки). Ответ записываем в листинг программы.

  func setupDelay(_ ticks:Int) {
        let t = Double(ticks)
        let a:Double = 12.0
        let b:Double = 9000.0/2.2
        let c:Double = 100.0/2.2
        let d:Double = a + b/(c+t)
        delay = Int(d)
    }

Играть интересно на пределе человеческих способностей. Поэтому для тех, кто набирает более 1000 очков, реклама пропадает. Жалко же парней.

Хвала пуно, брате!

Прим. перев. Код на GitHub разумеется тяп-ляп, но картинки, звуки и некоторые приемы безусловно будут полезны начинающим swift-оманам.

UPD: Какой-то iPhone Александр уделал меня и набрал 2000 очков. Думаю он, подлец, с двух рук играет, а это нечестно.
Поделиться с друзьями
-->

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


  1. hamMElion
    08.04.2017 00:18
    -18

    Смешно, только поправьте адрес статьи с habrahabr на pikabu, а то в вашей статье научности до боли мало, по сравнению с публицистичностью. Уважайте хабр.


    1. PapaBubaDiop
      08.04.2017 00:38
      +5

      Спасибо за ссылку — смешные котики! Но на pikabu я не смог зарегистрироваться — в дропбоксе нет моего года рождения…


      1. hamMElion
        08.04.2017 01:07
        -7

        Когда человек вашего уважаемого возраста пишет такие статьи, то я чувсвтую себя старым…
        Но, судя по реакции сообщества, вижу, что вы пишете именно так, как того требуют люди. Что ж, популярно. Однако я люблю хабр именно за легко написанные статьи, в которых много мяса по существу. Видимо теперь, в ногу со временем, у нас в меню появились статьи и для науко-веганов.


        1. DnV
          08.04.2017 05:48
          +6

          Не пытайтесь логически обосновать реакцию сообщества, вы просто немного младше и всё пропустили :)


        1. olegkrasnov
          08.04.2017 08:40
          +9

          Чуть ли ни под каждой статьёй Вадима находится пассажир, севший не в тот трамвай =D


        1. PapaBubaDiop
          08.04.2017 09:33
          +1

          Я пишу на потеху себе, что ж до пользы — код игры выложен на публичное обозрение.
          Там много кунштюков. Может, заглянете, вопросы появятся. Торопитесь, пока я жив — отвечу. Но не сегодня. В субботу спорт вино и бабы.


        1. JC_IIB
          08.04.2017 11:16

          Ну покажите же класс, напишите статью в которой много мяса по существу!
          А мы поучимся, чо уж тут.

          p.s. это вас еще как-то лайтово заминусовали. Все могло быть гораздо хуже.


          1. saluev
            08.04.2017 13:12

            Так день только начался.


            1. hamMElion
              08.04.2017 18:50
              -1

              Да, карму подпортили, конечно. Скоро действительно налетят те, кто укусит, пока все кусают, пока можно, пока безопасно. Завтра им покажут новую жертву для травли и все повторится. Вот только все понимают, что трусливо ставить минусик может каждый, а встать и в лицо сказать "авторитету", что статья его некачественная, выразить свое мнение — ну, кто из вас решится? Страшно же, отхабрят! :) Ну если честно, перед собой: разве вы со мной не согласны? Но вы в этом не виноваты, вами, вашим мнением просто манипулируют. Манипулирует человек, который недостаток качества пытается в каждой строчке компенсировать своим возрастом. Он сделал из вас стаю и выпустил грызть тех, кто с ним не согласен. И уже не в первый раз, мы видим это из прошлых статей. И зачем мы позволяем ему себя так с нами вести? Что он считает, что мы не люди? Что у нас нет своего мнения? Или что нас можно просто заткнуть, сославшись на авторитет? Ему ведь очень страшно! Для него карма — мерило уверенности в себе. Он то — что о нем думаем мы. Ну что, Вадим? Покажите своим примером пахан ли вы на зоне или мудрый лидер, заботящийся о каждом в нашем сообществе. Каждый минус к моим сообщениям — это минус в вашу репутацию.


              1. andrew911
                08.04.2017 19:14
                +1

                Что это было? Если мнение совпадает с вашим, то человек разумный, если нет — то жертва манипуляций?
                До статей на хабре не знал автора, потом из одной из них узнал, что он в свое время сделал Поле Чудес.
                Но безотносительно авторитета мне нравятся его статьи, их подача и содержание, что мне теперь сделать?


                1. Shifty_Fox
                  08.04.2017 19:23
                  +2

                  _то_ самое поле Чудес под MS DOS? Вы не шутите?



                1. hamMElion
                  08.04.2017 19:27
                  +3

                  Я и сам с удовольствием играл в Поле Чудес и глубоко уважаю автора за его проекты, знания и опыт, а его веселое настроение в текстах всегда поднимает настроение и мне!
                  Если вам, как и мне, нравятся статьи автора — то читайте их, ставьте плюсы, комментируйте. А если какая-то статья выбилась из общего успешного потока, то не бойтесь высказать свою критику. Вы тем самым поможете автору писать еще лучше. Надеюсь, автор меня услышал и с благодарностью, а не с сарказмом, будет реагировать на критику.


                  1. PapaBubaDiop
                    08.04.2017 22:06

                    Я благодарен любому мнению (вы вообще меня изрядно удивили) и в жизни минусов никому не ставил, кроме одного случая, когда обидели художника. Музыканты — другое дело. Что до уровня моих статей — должен же кто-то понизить высокую интеллектуальную планку ресурса — иначе все в Кащенко попадем.


  1. IIvana
    08.04.2017 23:50
    +1

    Я конечно не отказываю автору в праве на самоопределение, но по-моему тут без дураков ясно, что это — экспонента.


    1. PapaBubaDiop
      09.04.2017 00:25
      -2

      У экспоненты нет ассимптотики. А вообще, смысл статьи в том, что жизнь — эллипс.


      1. PapaBubaDiop
        10.04.2017 12:36

        Пардон, смотрел лишь вперед. Назад, конечно, она стремится к нулю. Но гипербола дешевле решается и вычисляется в run-time.


  1. customtema
    09.04.2017 08:11

    В Муроме нет такого завода. На одном из местных заводов БТРы только ремонтируют, и то давно это было.


    1. PapaBubaDiop
      09.04.2017 09:26

      Зато есть полигон.
      И было это в 93-94.


      1. customtema
        13.04.2017 23:51

        М.б.

        Я из Мурома. Не видел.


        1. PapaBubaDiop
          14.04.2017 10:58

          На этом «ремонтном» заводе тренажеры для танков делали. Кажется, 8-ой цех.


  1. stargazr
    10.04.2017 12:14
    +1

    Автор, вы не пробовали писать тексты побольше?
    У вас очень интересный язык. Жаль, что такое здесь редкость.


    1. PapaBubaDiop
      10.04.2017 12:31

      Вспомнилось довлатовское:

      -Ты роман пишешь?
      -Пишу…
      -И я пишу!!! Махнем не глядя?


      Я игру делал быстрее, чем эту заметку. На большой текст мне не хватит ни таланта, ни твердости попы…

      С другой стороны, Стендаль свой первый роман Красное и черное (Амкар, Пермь!?) написал в 54 года. А мне лишь 53, вся жизнь впереди)