Как стать автором
Поиск
Написать публикацию
Обновить

Магия глазами программиста

Время на прочтение3 мин
Количество просмотров2.9K

Магия глазами программиста. Введение


Думаю, многие хотя бы раз задавались мыслью, мол, неплохо бы, чтобы магия в том или ином виде была доступна хотя бы мне. Опустим всякие спекулятивные моменты, нам интересно другое: какой бы была Магия, если бы ее придумал программист?

Начинаем фантазировать


Собственно, зачем все это? Как говорят, магия существует, если в нее веришь. Чтобы не затевать холиваров, скажу свое имхо: я поверю, если смогу понять или доказать. Я верю в Малую Теорему Ферма, так как она (раз) работает и (два) могу ее доказать, то есть свести к каким-то постулатам или договоренностям.
Посему пусть:
  1. Магия есть.
  2. Магия имеет логику, язык, синтаксис.
  3. Есть Стандартная Библиотека, содержащая то, что нам не надо делать самим. Она просто работает.
  4. И главное: мы можем всем этим пользоваться.

Что же мы получаем? Мы не можем сказать «Хочу найти ключи!». Почему? Да потому что, Магия, дорогой %username%, не знает, какие такие ключи ты хочешь найти и что для тебя значит «найти». Давайте разбираться, что же нам делать.

Волшебство начинается


Итак,
  1. import magic.core        # Основные инструменты
  2. import magic.physics     # Физика  
  3. import magic.effects     # Всякие свистелочки

Пусть это будут ключи и пусть они в этой комнате. Пусть они лежат на поверхности и ничем не накрыты. И, наконец, пусть «найти» значит для нас — увидеть светящиеся ключи на уровне глаз. Просто для начала.

Ключи


Ключи для нас — это 2–3 ключа на кольце + брелок. С другой стороны это практически цельный объект. Надо как-то ассоциировать конкретный объект со словом «ключи».

  1. alias=str(core.recognizeThought(presentThought))             # для наглядности пусть это будет string
  2. effects.fire(core.getFocusedObject(), MColor('#4C95DC'))     # подсвечиваем голубым пламенем объект в фокусе.
  3. # Например смотрим на него или думаем конкретно о нем
  4. if core.recognizeThought(presentThought):                    # да-да, мы умеем думать True
  5.     core.Shotrcuts.append({'id':alias,'object':core.getFocusedObject()})      # втыкаем ассоциацию объекта в Великий Массив Ярлыков
  6. else:
  7.     core.getFocusedObject().resetState()                     # снимаем эффект


Как-то так. Делаем прцедурку и идем по дому. Будем считать, что стандартные функции достаточно продуманы, чтобы делать именно то, что мы хотим. Да, не очень логично, но мы же просто развлекаемся;)
Так, любимые тапочки, ключи и мобилка уже известны нашей Магии.

Левитация


Теперь нам надо поднять ключики на уровень глаз. Для этого импортируем еще один модуль
  1. from magic.metrics import MyHeights
  2.  
  3. EyeLevel=MyHeights.FLOOR + MyHeights.HEIGHT - 0.15        # Уровень глаз = пол на котором я стою + мой рост - 15 сантиметров
  4. object=core.Shortcuts['ключи']
  5. effects.fire(object, MColor('#ff9800'))
  6. physics.moveTo(object, z=EyeLevel, x=object.getX(), y=object.getY(), smooth=True, freeze=True)    # Плавно поднимаем ключики до уровня глаз и тама фиксируем


Вуаля. Делаем простенькую процедурку и наслаждаемся.
С одной стороны, все крайне просто, однако, что делать если ключи в кармане или в другой комнате? А если нужно что-то создать, а не оперировать существующими объектами? Огромное поле для фантазии!
А в следующий раз мы будем заваривать чай!

P.S. Это так, разминка для ума, но доставляет удовольствие. Есть идеи — Делитесь!
UPD1: Java-версия dpaste.org/d1O1 Спасибо danilissimus
Теги:
Хабы:
Всего голосов 37: ↑25 и ↓12+13
Комментарии16

Публикации

Ближайшие события