Предлагаю пятничные апрельские тезисы про Что наша жизнь? Эллипс...
Здесь нет кода и смысла, нет математики и ссылок на GitHub. Короче, самый то, чтобы не читать. Но ты прочти.
А началось все с этой морды:
Вернее сказать, началось все с этой строки
30 лет назад эта команда очистила экран IBM PC/XT. Я, как зачарованный, смотрел на потухшие 320 на 200 черных точки и понимал, что теперь могу их зажечь, как звезды на небе. Простой командой. Простой парень. И я зажег. Так зажег, что до сих пор остыть не могу.
Первая игра, сделанная в конце 80-ых, была написана на языке BASIC, который не имел компилятора, а исполнялся интерпретатором команд. И потому, чередующиеся картинки мигали, как слепой Пью на прицеле у Билли Бонса.
Пофик! До этого вся анимация, созданная мною, умещалась в 50 страницах маленького блокнота. Мы рисовали внизу каждой страницы человечка, выпускающего стрелу, стрела летела и поражала другого человечка. Потом страницы блокнота пролистывались большим пальцем правой руки — вжи-и-и-и-и-и-и-и-и-и-и-и-и-и-и-и-и-и-и-и-и-и-и-и-и-и-и-и-и-и-и-к, и 50 кадров мультика вызывали одобрительное гуканье. Было клево. Самые красивые девчонки школы просили блокнотик. Мягко клали руку на плечо и заглядывали в глаза. Стоп, я тону. Лучше вернемся к басику.
Так вот, первая сделанная игра на BASICе называлась Челюсти. Челюсти сжимались и разжимались. Конфигурация зубов менялась. Герой бегал внутри пасти, ел фрукты и пытался не попасть на зубок.
Прошло время. Очень быстро. Проскочили компилятор для BASIC, Pascal, С, С++, JS, Obj-C и Swift.
Я делал игры на всем, что втыкается в розетку, и это были в том числе очень даже 3D симуляторы танкового полигона для Муромского/Арзамасского (тсс! строгая тайна!) завода бронетранспортеров и что только не было, лучше и не вспоминать.
И вдруг вчера мне приснилась та, первая игра. Представляете? Ну, что бы вы сделали на моем месте? И я такой же. 200 строк кода — и, опта! игра лежит в магазине, а код на GitHub-е.
Что изменилось за 30 лет? Изменилось программирование — раньше челюсти сжимались в цикле все с большей и большей частотой, пока не достигали скорости отрисовки изображения. И если компьютер был слабый — игрок жил бесконечно. Теперь все иначе. Циклов нет. Такты бешеные. А для расчета частоты схлопывания челюсти используют математику. Пусть простую, но интересную. Переходим к выводу формулы частоты движения челюсти.
Итак что мы имеем?
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)
Три неизвестные — три уравнения, решаем (просто удовольствие решать школьные задачки). Ответ записываем в листинг программы.
Играть интересно на пределе человеческих способностей. Поэтому для тех, кто набирает более 1000 очков, реклама пропадает. Жалко же парней.
Хвала пуно, брате!
Прим. перев. Код на GitHub разумеется тяп-ляп, но картинки, звуки и некоторые приемы безусловно будут полезны начинающим swift-оманам.
UPD: Какой-то iPhone Александр уделал меня и набрал 2000 очков. Думаю он, подлец, с двух рук играет, а это нечестно.
Здесь нет кода и смысла, нет математики и ссылок на 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)
IIvana
08.04.2017 23:50+1Я конечно не отказываю автору в праве на самоопределение, но по-моему тут без дураков ясно, что это — экспонента.
PapaBubaDiop
09.04.2017 00:25-2У экспоненты нет ассимптотики. А вообще, смысл статьи в том, что жизнь — эллипс.
PapaBubaDiop
10.04.2017 12:36Пардон, смотрел лишь вперед. Назад, конечно, она стремится к нулю. Но гипербола дешевле решается и вычисляется в run-time.
customtema
09.04.2017 08:11В Муроме нет такого завода. На одном из местных заводов БТРы только ремонтируют, и то давно это было.
PapaBubaDiop
09.04.2017 09:26Зато есть полигон.
И было это в 93-94.customtema
13.04.2017 23:51М.б.
Я из Мурома. Не видел.PapaBubaDiop
14.04.2017 10:58На этом «ремонтном» заводе тренажеры для танков делали. Кажется, 8-ой цех.
stargazr
10.04.2017 12:14+1Автор, вы не пробовали писать тексты побольше?
У вас очень интересный язык. Жаль, что такое здесь редкость.PapaBubaDiop
10.04.2017 12:31Вспомнилось довлатовское:
-Ты роман пишешь?
-Пишу…
-И я пишу!!! Махнем не глядя?
Я игру делал быстрее, чем эту заметку. На большой текст мне не хватит ни таланта, ни твердости попы…
С другой стороны, Стендаль свой первый роман Красное и черное (Амкар, Пермь!?) написал в 54 года. А мне лишь 53, вся жизнь впереди)
hamMElion
Смешно, только поправьте адрес статьи с habrahabr на pikabu, а то в вашей статье научности до боли мало, по сравнению с публицистичностью. Уважайте хабр.
PapaBubaDiop
Спасибо за ссылку — смешные котики! Но на pikabu я не смог зарегистрироваться — в дропбоксе нет моего года рождения…
hamMElion
Когда человек вашего уважаемого возраста пишет такие статьи, то я чувсвтую себя старым…
Но, судя по реакции сообщества, вижу, что вы пишете именно так, как того требуют люди. Что ж, популярно. Однако я люблю хабр именно за легко написанные статьи, в которых много мяса по существу. Видимо теперь, в ногу со временем, у нас в меню появились статьи и для науко-веганов.
DnV
Не пытайтесь логически обосновать реакцию сообщества, вы просто немного младше и всё пропустили :)
olegkrasnov
Чуть ли ни под каждой статьёй Вадима находится пассажир, севший не в тот трамвай =D
PapaBubaDiop
Я пишу на потеху себе, что ж до пользы — код игры выложен на публичное обозрение.
Там много кунштюков. Может, заглянете, вопросы появятся. Торопитесь, пока я жив — отвечу. Но не сегодня.
В субботу спорт вино и бабы.JC_IIB
Ну покажите же класс, напишите статью в которой много мяса по существу!
А мы поучимся, чо уж тут.
p.s. это вас еще как-то лайтово заминусовали. Все могло быть гораздо хуже.
saluev
Так день только начался.
hamMElion
Да, карму подпортили, конечно. Скоро действительно налетят те, кто укусит, пока все кусают, пока можно, пока безопасно. Завтра им покажут новую жертву для травли и все повторится. Вот только все понимают, что трусливо ставить минусик может каждый, а встать и в лицо сказать "авторитету", что статья его некачественная, выразить свое мнение — ну, кто из вас решится? Страшно же, отхабрят! :) Ну если честно, перед собой: разве вы со мной не согласны? Но вы в этом не виноваты, вами, вашим мнением просто манипулируют. Манипулирует человек, который недостаток качества пытается в каждой строчке компенсировать своим возрастом. Он сделал из вас стаю и выпустил грызть тех, кто с ним не согласен. И уже не в первый раз, мы видим это из прошлых статей. И зачем мы позволяем ему себя так с нами вести? Что он считает, что мы не люди? Что у нас нет своего мнения? Или что нас можно просто заткнуть, сославшись на авторитет? Ему ведь очень страшно! Для него карма — мерило уверенности в себе. Он то — что о нем думаем мы. Ну что, Вадим? Покажите своим примером пахан ли вы на зоне или мудрый лидер, заботящийся о каждом в нашем сообществе. Каждый минус к моим сообщениям — это минус в вашу репутацию.
andrew911
Что это было? Если мнение совпадает с вашим, то человек разумный, если нет — то жертва манипуляций?
До статей на хабре не знал автора, потом из одной из них узнал, что он в свое время сделал Поле Чудес.
Но безотносительно авторитета мне нравятся его статьи, их подача и содержание, что мне теперь сделать?
Shifty_Fox
_то_ самое поле Чудес под MS DOS? Вы не шутите?
andrew911
Абсолютли )
hamMElion
Я и сам с удовольствием играл в Поле Чудес и глубоко уважаю автора за его проекты, знания и опыт, а его веселое настроение в текстах всегда поднимает настроение и мне!
Если вам, как и мне, нравятся статьи автора — то читайте их, ставьте плюсы, комментируйте. А если какая-то статья выбилась из общего успешного потока, то не бойтесь высказать свою критику. Вы тем самым поможете автору писать еще лучше. Надеюсь, автор меня услышал и с благодарностью, а не с сарказмом, будет реагировать на критику.
PapaBubaDiop
Я благодарен любому мнению (вы вообще меня изрядно удивили) и в жизни минусов никому не ставил, кроме одного случая, когда обидели художника. Музыканты — другое дело. Что до уровня моих статей — должен же кто-то понизить высокую интеллектуальную планку ресурса — иначе все в Кащенко попадем.