--var
local r = require("robot") --для работы нужно запускать на роботе
local note = require("note") --требуется API нотного блока
local component = require("component")
local g = component.generator
local sides = require('sides')
b = 0
--begin
function dig() --функция добычи 3 блоков перед роботом
go() --дивагаемся на 1 блок, если мешают блоки то ломаем
r.swingUp() --ломаем блок над роботом
r.swingDown() --ломаем блок под роботом
end
function go() --функция которая заставляет двигаться вперед, если мешают блоки то ломает
while not r.forward() do --если не получается двигаться вперед
r.swing() --ломаем блок перед собой
end
end
function unloadInv() --функция выгрузки инвентаря робота
local selectedSlot = r.select() --запоминаем слот который был выбран
local k = 0 --сброс
r.select(16) --выбираем 16 слот в котором должны быть сундуки
r.placeDown() --ставим сундук под робота
for k = 1, 14 do --перебираем все слоты с ресурсами
r.select(k) --выбираем слот под индексом к
r.dropDown() --выгружаем все ресурсы вниз а если нет сундука то выбрасываем на пол
end
r.select(selectedSlot) --выбираем слот который был выбран изначально
end
function checkInv() --функция проверки инвентаря, если заполнен то идет домой выгружать
if r.count(14) > 0 then --если инвентарь заполнен, заполнен 14 слот
r.turnRight() -- повораичваем на право
moveTohome(b) --двигаемся на b блоков, домой
unloadInv() -- выгружаем ресурсы
r.turnRight() -- повораичваем на право
r.turnRight() -- повораичваем на право
moveTohome(b) --двигаемся на b блоков, там где закончили добычу
r.turnRight() -- повораичваем на право
end
end
function moveTohome(step) --функция заставляет робота двигаться на step блоков и издавать звук каждые 5 блоков
i = 0 --сброс
bip = 0 --сброс
while i < step do -- выполняем код ниже пока не пройдем step блоков
go() --перемещаемся на 1 блок
if bip == 5 then --если прошли 5 блоков
note.play(80, 0.1) --издаем звук
bip = 0 --сбрасываем счетчик блоков
end
bip = bip + 1 --считаем через сколько блоков издать звук
i = i + 1 --считаем пройденые блоки
end
end
note.play(90, 0.5) --издаем звук
r.turnRight() --поворачиваем вправо
fakelblock = 0 --сброс
while b < 100 do
dig() --копаем перед собой и передвигаемся на 1 блок вперед
dig() --копаем перед собой и передвигаемся на 1 блок вперед
dig() --копаем перед собой и передвигаемся на 1 блок вперед
if fakelblock == 10 then -- если прошли 10 блоков от предыдущего факела
fakelblock = 0 --сброс счетчика блоков через которые ставить факела
r.select(15) -- выбираем 15 слот в котором должны быть факела
r.placeDown() -- ставим предмет из 15 слота, факел
r.select(1) --выбираем 1 слот
end
r.turnLeft() -- поворачиваем влево
dig()
r.turnLeft() -- поворачиваем влево
dig() --копаем перед собой и передвигаемся на 1 блок вперед
dig() --копаем перед собой и передвигаемся на 1 блок вперед
dig() --копаем перед собой и передвигаемся на 1 блок вперед
dig() --копаем перед собой и передвигаемся на 1 блок вперед
dig() --копаем перед собой и передвигаемся на 1 блок вперед
dig() --копаем перед собой и передвигаемся на 1 блок вперед
r.turnRight() --поворачиваем вправо
dig() --копаем перед собой
r.turnRight() --поворачиваем вправо
dig() --копаем перед собой
dig() --копаем перед собой
dig() --копаем перед собой
b = b + 2 --считаем пройденные блоки
fakelblock = fakelblock + 2 --считаем через сколько блоков поставить факел
checkInv() -- проверяем не переполнен ли инвентарь
end
r.turnRight() --поворачиваем вправо
note.play(70, 0.1) -- издаем звук
moveTohome(b)
note.play(50, 0.5) -- издаем звук
unloadInv()
r.turnRight() --поворачиваем вправо
r.turnRight() --поворачиваем вправо
print("Complete!") --выводим сообщение в консоль робота