Как стать автором
Обновить

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

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

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


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

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


Собственно, зачем все это? Как говорят, магия существует, если в нее веришь. Чтобы не затевать холиваров, скажу свое имхо: я поверю, если смогу понять или доказать. Я верю в Малую Теорему Ферма, так как она (раз) работает и (два) могу ее доказать, то есть свести к каким-то постулатам или договоренностям.
Посему пусть:
  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
Теги:
Хабы:
+13
Комментарии 16
Комментарии Комментарии 16

Публикации

Истории

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

PG Bootcamp 2024
Дата 16 апреля
Время 09:30 – 21:00
Место
Минск Онлайн
EvaConf 2024
Дата 16 апреля
Время 11:00 – 16:00
Место
Москва Онлайн
Weekend Offer в AliExpress
Дата 20 – 21 апреля
Время 10:00 – 20:00
Место
Онлайн