Магия глазами программиста. Введение
Думаю, многие хотя бы раз задавались мыслью, мол, неплохо бы, чтобы магия в том или ином виде была доступна хотя бы мне. Опустим всякие спекулятивные моменты, нам интересно другое: какой бы была Магия, если бы ее придумал программист?
Начинаем фантазировать
Собственно, зачем все это? Как говорят, магия существует, если в нее веришь. Чтобы не затевать холиваров, скажу свое имхо: я поверю, если смогу понять или доказать. Я верю в Малую Теорему Ферма, так как она (раз) работает и (два) могу ее доказать, то есть свести к каким-то постулатам или договоренностям.
Посему пусть:
- Магия есть.
- Магия имеет логику, язык, синтаксис.
- Есть Стандартная Библиотека, содержащая то, что нам не надо делать самим. Она просто работает.
- И главное: мы можем всем этим пользоваться.
Что же мы получаем? Мы не можем сказать «Хочу найти ключи!». Почему? Да потому что, Магия, дорогой %username%, не знает, какие такие ключи ты хочешь найти и что для тебя значит «найти». Давайте разбираться, что же нам делать.
Волшебство начинается
Итак,
- import magic.core # Основные инструменты
- import magic.physics # Физика
- import magic.effects # Всякие свистелочки
Пусть это будут ключи и пусть они в этой комнате. Пусть они лежат на поверхности и ничем не накрыты. И, наконец, пусть «найти» значит для нас — увидеть светящиеся ключи на уровне глаз. Просто для начала.
Ключи
Ключи для нас — это 2–3 ключа на кольце + брелок. С другой стороны это практически цельный объект. Надо как-то ассоциировать конкретный объект со словом «ключи».
- alias=str(core.recognizeThought(presentThought)) # для наглядности пусть это будет string
- effects.fire(core.getFocusedObject(), MColor('#4C95DC')) # подсвечиваем голубым пламенем объект в фокусе.
- # Например смотрим на него или думаем конкретно о нем
- if core.recognizeThought(presentThought): # да-да, мы умеем думать True
- core.Shotrcuts.append({'id':alias,'object':core.getFocusedObject()}) # втыкаем ассоциацию объекта в Великий Массив Ярлыков
- else:
- core.getFocusedObject().resetState() # снимаем эффект
Как-то так. Делаем прцедурку и идем по дому. Будем считать, что стандартные функции достаточно продуманы, чтобы делать именно то, что мы хотим. Да, не очень логично, но мы же просто развлекаемся;)
Так, любимые тапочки, ключи и мобилка уже известны нашей Магии.
Левитация
Теперь нам надо поднять ключики на уровень глаз. Для этого импортируем еще один модуль
- from magic.metrics import MyHeights
-
- EyeLevel=MyHeights.FLOOR + MyHeights.HEIGHT - 0.15 # Уровень глаз = пол на котором я стою + мой рост - 15 сантиметров
- object=core.Shortcuts['ключи']
- effects.fire(object, MColor('#ff9800'))
- physics.moveTo(object, z=EyeLevel, x=object.getX(), y=object.getY(), smooth=True, freeze=True) # Плавно поднимаем ключики до уровня глаз и тама фиксируем
Вуаля. Делаем простенькую процедурку и наслаждаемся.
С одной стороны, все крайне просто, однако, что делать если ключи в кармане или в другой комнате? А если нужно что-то создать, а не оперировать существующими объектами? Огромное поле для фантазии!
А в следующий раз мы будем заваривать чай!
P.S. Это так, разминка для ума, но доставляет удовольствие. Есть идеи — Делитесь!
UPD1: Java-версия dpaste.org/d1O1 Спасибо danilissimus