Предлагаю пятничные апрельские тезисы про Что наша жизнь? Эллипс...
Здесь нет кода и смысла, нет математики и ссылок на 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 очков. Думаю он, подлец, с двух рук играет, а это нечестно.