Виртуальный компьютер, управляющий выключателем лампочки в виртуальном мире
Minecraft уже больше, чем игра. Это стиль жизни и среда обитания многих, многих геймеров. Среда Minecraft может использоваться и для инженерных целей. К примеру, почему бы не научиться включать и выключать свою лампочку в комнате, разместив выключатель в игре?
Так и поступил один из игроков, ник которого — giannoug. Он работал со своим другом, создавая систему, управляющую noname WiFi лампочкой. Сейчас это не редкость, и купить их можно по относительно невысокой цене. Работал giannoug со своим другом, который провел реверс-инжиниринг протокола лампочки. Сам же автор идеи строил выключатель на основе OpenComputers мода.
Спустя некоторое время компьютер был готов, и автор смог открыть его всему миру через TCP/IP.
Протокол, который используется лампочкой, довольно прост. Байт заголовка, три дополнительных байта для определение RGB-цвета, байт для определения яркости, байт для переключения режима работы и конечный байт.
0x56 RED GREEN BLUE WHITE MODE 0xAA
В игре есть и минерал — аналог электричества в нашем мире. По умолчанию, блоки можно использовать как элементы электрической цепи. При помощи таких блоков создавались даже аналоги реальных процессоров.
Скрипт для работы лампочки:
local event = require('event')
local net = require('internet')
local myEventHandlers = {}
local running = true
local con = net.open('192.168.1.110', 5577)
function myEventHandlers.key_up(address, char, code, playerName)
if (char == 'q') then
running = false
print('Goodbye '… playerName… '!')
end
end
function myEventHandlers.redstone_changed(_, address, side)
local brightness = 0xff;
if side > 0 then
brightness = 0xff
else
brightness = 0x00
end
print('Sending '… brightness… ' to lamp...')
con:write(string.char(0x56))
con:write(string.char(0x00))
con:write(string.char(0x00))
con:write(string.char(0x00))
con:write(string.char(brightness))
con:write(string.char(0x0f))
con:write(string.char(0xaa))
con:flush()
end
function handleEvent(eventID, ...)
local event = myEventHandlers[eventID]
if (event) then
event(...)
end
end
if con then
print('Connected to the bulb!')
end
while running do
handleEvent(event.pull())
end
local net = require('internet')
local myEventHandlers = {}
local running = true
local con = net.open('192.168.1.110', 5577)
function myEventHandlers.key_up(address, char, code, playerName)
if (char == 'q') then
running = false
print('Goodbye '… playerName… '!')
end
end
function myEventHandlers.redstone_changed(_, address, side)
local brightness = 0xff;
if side > 0 then
brightness = 0xff
else
brightness = 0x00
end
print('Sending '… brightness… ' to lamp...')
con:write(string.char(0x56))
con:write(string.char(0x00))
con:write(string.char(0x00))
con:write(string.char(0x00))
con:write(string.char(brightness))
con:write(string.char(0x0f))
con:write(string.char(0xaa))
con:flush()
end
function handleEvent(eventID, ...)
local event = myEventHandlers[eventID]
if (event) then
event(...)
end
end
if con then
print('Connected to the bulb!')
end
while running do
handleEvent(event.pull())
end
И демонстрация работы всей схемы:
В Minecraft многие геймеры еще воссоздают модели реальных мест. Например, Антарктиды.
Мартин О'Лири (Martin O'Leary), гляциолог из Университета Суонси, воссоздал Антарктиду в Minecraft. Сейчас модель, с размером 1:1000 от реального континента, содержит более 3 миллиардов блоков. Мартин решился на такую масштабную работу после того, как в Minecraft стали появляться ученые, которые создавали различные модели, включая Манхэттен 19-го века.
Дополнительная информация по проекту «включи лампочку из Minecraft» — на сайте автора.
Olanonymous
Было на хабре пару дней назад.
habrahabr.ru/post/271527