Не будет преувеличением сказать, что это гипербола

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

    Здесь нет кода и смысла, нет математики и ссылок на 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 очков. Думаю он, подлец, с двух рук играет, а это нечестно.
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 24

      –18

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

        +5
        Спасибо за ссылку — смешные котики! Но на pikabu я не смог зарегистрироваться — в дропбоксе нет моего года рождения…
          –7
          Когда человек вашего уважаемого возраста пишет такие статьи, то я чувсвтую себя старым…
          Но, судя по реакции сообщества, вижу, что вы пишете именно так, как того требуют люди. Что ж, популярно. Однако я люблю хабр именно за легко написанные статьи, в которых много мяса по существу. Видимо теперь, в ногу со временем, у нас в меню появились статьи и для науко-веганов.
            +6
            Не пытайтесь логически обосновать реакцию сообщества, вы просто немного младше и всё пропустили :)
              +9
              Чуть ли ни под каждой статьёй Вадима находится пассажир, севший не в тот трамвай =D
                +1
                Я пишу на потеху себе, что ж до пользы — код игры выложен на публичное обозрение.
                Там много кунштюков. Может, заглянете, вопросы появятся. Торопитесь, пока я жив — отвечу. Но не сегодня. В субботу спорт вино и бабы.
                  0
                  Ну покажите же класс, напишите статью в которой много мяса по существу!
                  А мы поучимся, чо уж тут.

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

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

                        +1
                        Что это было? Если мнение совпадает с вашим, то человек разумный, если нет — то жертва манипуляций?
                        До статей на хабре не знал автора, потом из одной из них узнал, что он в свое время сделал Поле Чудес.
                        Но безотносительно авторитета мне нравятся его статьи, их подача и содержание, что мне теперь сделать?
                          +2
                          _то_ самое поле Чудес под MS DOS? Вы не шутите?
                          +3
                          Я и сам с удовольствием играл в Поле Чудес и глубоко уважаю автора за его проекты, знания и опыт, а его веселое настроение в текстах всегда поднимает настроение и мне!
                          Если вам, как и мне, нравятся статьи автора — то читайте их, ставьте плюсы, комментируйте. А если какая-то статья выбилась из общего успешного потока, то не бойтесь высказать свою критику. Вы тем самым поможете автору писать еще лучше. Надеюсь, автор меня услышал и с благодарностью, а не с сарказмом, будет реагировать на критику.
                            0
                            Я благодарен любому мнению (вы вообще меня изрядно удивили) и в жизни минусов никому не ставил, кроме одного случая, когда обидели художника. Музыканты — другое дело. Что до уровня моих статей — должен же кто-то понизить высокую интеллектуальную планку ресурса — иначе все в Кащенко попадем.
              +1

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

                –2
                У экспоненты нет ассимптотики. А вообще, смысл статьи в том, что жизнь — эллипс.
                  0
                  Пардон, смотрел лишь вперед. Назад, конечно, она стремится к нулю. Но гипербола дешевле решается и вычисляется в run-time.
                0
                В Муроме нет такого завода. На одном из местных заводов БТРы только ремонтируют, и то давно это было.
                  0
                  Зато есть полигон.
                  И было это в 93-94.
                    0
                    М.б.

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

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

                    0
                    Вспомнилось довлатовское:
                    -Ты роман пишешь?
                    -Пишу…
                    -И я пишу!!! Махнем не глядя?


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

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

                    На середине статьи понял, что слог знакомый. Вернулся в начало страницы. И правда, угадал автора!

                    Only users with full accounts can post comments. Log in, please.