Виртуальный компьютер, управляющий выключателем лампочки в виртуальном мире

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

И демонстрация работы всей схемы:



В Minecraft многие геймеры еще воссоздают модели реальных мест. Например, Антарктиды.
Мартин О'Лири (Martin O'Leary), гляциолог из Университета Суонси, воссоздал Антарктиду в Minecraft. Сейчас модель, с размером 1:1000 от реального континента, содержит более 3 миллиардов блоков. Мартин решился на такую масштабную работу после того, как в Minecraft стали появляться ученые, которые создавали различные модели, включая Манхэттен 19-го века.

Дополнительная информация по проекту «включи лампочку из Minecraft» — на сайте автора.

Комментарии (2)


  1. Olanonymous
    27.11.2015 02:00
    +4

    Было на хабре пару дней назад.
    habrahabr.ru/post/271527


  1. zim32
    28.11.2015 13:33

    Майнкрафт это просто алиас. Настоящее название Matrix (0.1.303409-alpha)