Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local component = require("component")
- local robot = require("robot")
- local shell = require("shell")
- -- Проверка робот ли используется
- if not component.isAvailable("robot") then
- io.stderr:write("can only run on robots")
- return
- end
- -- Проверка параметров запуска
- local args, options = shell.parse(...)
- if #args < 1 then
- io.write("Zapusk: lesorub <razmer>\n")
- return
- end
- -- Проверка корректности ввода размера при старте
- local size = tonumber(args[1])
- if not size then
- io.stderr:write("razmer ne zadan")
- return
- end
- local crona = tonumber(args[2])
- -- Переменные
- local x, y, z, f = 0, 0, 0, 0
- -- Осн функция
- function lesorub()
- -- проверка наличия помех сверху при старте
- if sverhuDerevo() and robot.swingUp == false then
- io.write("Problema nad robotom!")
- return false
- end
- robot.up()
- for i = 1, size do
- for j = 1, size - 1 do
- if vperediDerevo() then
- if rubiDerevo() == false then
- io.write("Ne mogu ubrat blok. Error code 1!")
- return false
- end
- else
- robot.forward()
- end
- if i % 2 == 1 then
- y = y + 1
- else
- y = y - 1
- end
- end
- povorot(i)
- if vperediDerevo() then
- if rubiDerevo() == false then
- io.write("Ne mogu ubrat blok. Error code 2!")
- return false
- end
- else
- robot.forward()
- end
- x = x + 1
- povorot(i)
- end
- if idiNa(0, 0) == false then
- io.write("Ne mogu doiti!")
- return false
- end
- nukaVniz()
- kidaiLut()
- smotriNa(0)
- print( robot.level() )
- return true
- end
- -- Детект дерева спереди
- function vperediDerevo()
- local detect, reason = robot.detect()
- if detect and reason == "solid" then
- return true
- elseif detect and reason == "entity" then
- return vperediDerevo()
- end
- return false
- end
- -- Детект дерева сверху
- function sverhuDerevo()
- local detect, reason = robot.detectUp()
- if detect and reason == "solid" then
- return true
- elseif detect and reason == "entity" then
- return sverhuDerevo()
- end
- return false
- end
- -- Руби
- function rubi()
- if robot.swing() == false then
- rubi();
- end
- end
- -- Пытайся идти вперед
- function vpered()
- if robot.forward() == false then
- robot.swing()
- vpered()
- end
- end
- -- Рубка дерева
- function rubiDerevo()
- rubi()
- vpered()
- robot.swingDown()
- while sverhuDerevo() do
- robot.swingUp()
- robot.up()
- z = z + 1
- if crona and crona ~= 0 then
- for k = 1, 4 do
- if robot.detect() then
- rubi()
- if robot.forward() then
- rubi()
- robot.back()
- end
- end
- robot.turnRight()
- end
- end
- end
- while z > 0 do
- nukaVniz();
- z = z - 1
- end
- robot.placeDown()
- end
- -- Функция спуска вниз, с проверкой
- function nukaVniz()
- if robot.down() == false then
- robot.swingDown();
- nukaVniz()
- end
- end
- -- Функция поворота
- function povorot( some )
- if some % 2 == 1 then
- robot.turnRight()
- f = f + 1
- else
- robot.turnLeft()
- f = f - 1
- end
- end
- -- Вываливаем все в сундук
- function kidaiLut()
- for k = 2, 16 do
- robot.select(k)
- robot.drop()
- end
- robot.select(1)
- end
- -- Заставляем робота смотреть в нужную нам сторону
- function smotriNa( some )
- while f ~= some do
- if f > some then
- robot.turnLeft()
- f = f - 1
- else
- robot.turnRight()
- f = f + 1
- end
- end
- end
- -- Заставляем робота идти в указанную координату
- function idiNa( nX, nY )
- smotriNa(-1)
- while x ~= nX do
- if vperediDerevo() then
- if rubiDerevo() == false then
- io.write("Ne mogu ubrat blok. Error code 3!")
- return false
- end
- else
- vpered()
- end
- x = x - 1
- end
- smotriNa(-2)
- while y ~= nY do
- if vperediDerevo() then
- if rubiDerevo() == false then
- io.write("Ne mogu ubrat blok. Error code 4!")
- return false
- end
- else
- vpered()
- end
- y = y - 1
- end
- end
- repeat until not lesorub()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement