Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local r = require('robot')
- local comp = require('computer')
- local term = require('term')
- local sides = require('sides')
- local inv = require('component').inventory_controller
- function place(a)
- while not r.place(a) do
- r.swing()
- end
- end
- loc = {x=0, y=0, z=0, b=0}
- function f1()
- local bl,en = r.swing()
- while en ~='block' do
- r.swing()
- bl,en = r.swing()
- end
- forward()
- end
- function forward()
- os.sleep(0.2)
- while not r.forward() do
- r.swing()
- end
- if loc.b == 0 then loc.y = loc.y+1
- elseif loc.b == 1 then loc.x = loc.x+1
- elseif loc.b == 2 then loc.y = loc.y-1
- else loc.x = loc.x-1 end
- return true
- end
- function back()
- os.sleep(0.2)
- while not r.back() do
- os.sleep(0.2)
- end
- if loc.b == 0 then loc.y = loc.y-1
- elseif loc.b == 1 then loc.x = loc.x-1
- elseif loc.b == 2 then loc.y = loc.y+1
- else loc.x = loc.x+1 end
- return true
- end
- function up()
- os.sleep(0.2)
- while not r.up() do
- r.swingUp()
- end
- loc.z = loc.z+1
- return true
- end
- function down()
- os.sleep(0.2)
- while not r.down() do
- r.swingDown()
- end
- loc.z = loc.z-1
- return true
- end
- function turnRight()
- loc.b = (loc.b+1)%4
- r.turnRight()
- end
- function turnAround()
- loc.b = (loc.b+2)%4
- r.turnAround()
- end
- function turnLeft()
- loc.b = (loc.b+3)%4
- r.turnLeft()
- end
- function d1()
- local d = loc.b
- local p = loc.x
- local t = loc.y
- local g = loc.z
- if loc.b ~= 2 then
- while loc.b ~= 2 do
- turnRight()
- end
- end
- if loc.z>0 then
- while loc.z > 0 do
- down()
- end
- end
- if loc.z < 0 then
- while loc.z < 0 do
- up()
- end
- end
- if loc.x > 0 then
- turnRight()
- while loc.x > 0 do
- forward()
- end
- turnLeft()
- end
- while loc.y > 0 do
- forward()
- end
- while comp.energy() < 100000 do
- os.sleep(8)
- end
- turnRight()
- for i=9,11 do
- r.select(i)
- r.drop()
- end
- for i=1,8 do
- r.select(i)
- r.suck(64-r.count(i))
- end
- turnRight()
- while loc.y ~= t do
- forward()
- end
- if loc.x ~= p then
- turnRight()
- while loc.x ~=p do
- forward()
- end
- end
- if loc.b ~= d then
- while loc.b ~= d do
- turnLeft()
- end
- end
- if g<0 then
- while loc.z>g do
- down()
- end
- end
- if g>0 then
- while loc.z<g do
- up()
- end
- end
- end
- function t()
- local bl,en=r.detectUp()
- if en == 'solid' then
- while (en=='solid') and (loc.z<10) do
- up()
- r.swingUp()
- bl,en=r.detectUp()
- end
- while loc.z>0 do
- down()
- end
- end
- local bl,en = r.detectDown()
- if en ~= 'solid' then
- while en ~= 'solid' do
- down()
- bl,en = r.detectDown()
- end
- while loc.z<-1 do
- up()
- inventar()
- r.placeDown()
- end
- up()
- end
- r.select(16)
- if (r.compareDown()==false) or (r.detectDown()==false) then
- os.sleep(0.2)
- r.swingDown()
- os.sleep(0.2)
- inv1()
- end
- end
- function inv1()
- r.select(12)
- if r.count()==0 then
- local b = 12
- while (r.count() == 0) and (b <=16) do
- r.select(b)
- b=b+1
- end
- end
- r.placeDown()
- r.select(a)
- end
- function inventar()
- r.select(1)
- if r.count(1)==0
- then
- a = 1
- while (r.count() == 0) and (a <=11) do
- r.select(a)
- a=a+1
- end
- end
- if r.count() == 0 then
- d1()
- end
- end
- t()
- for o=1,6 do
- for i=1,16 do
- r.swing()
- forward()
- t()
- end
- if o <= 6 then
- turnRight()
- r.swing()
- forward()
- t()
- turnRight()
- end
- for i=1,16 do
- r.swing()
- forward()
- t()
- end
- turnLeft()
- r.swing()
- forward()
- t()
- turnLeft()
- end
- for i=1,16 do
- r.swing()
- forward()
- t()
- end
- up()
- for i=1,4 do
- turnLeft()
- for i=1,12 do
- forward()
- inv1()
- end
- end
- if loc.b ~= 2 then
- while loc.b ~= 2 do
- turnRight()
- end
- end
- if loc.x > 0 then
- turnRight()
- while loc.x > 0 do
- forward()
- end
- turnLeft()
- end
- while loc.y > 0 do
- forward()
- end
- down()
- turnRight()
- for i=1,16 do
- r.select(i)
- os.sleep(0.2)
- r.drop()
- end
- turnLeft()
- r.select(1)
- for i=1,8 do
- os.sleep(0.2)
- r.suck()
- end
- r.select(16)
- r.suck()
- r.select(4)
- turnAround()
- up()
- for i=1,10 do
- forward()
- end
- turnRight()
- for i=1,6 do
- forward()
- end
- down()
- r.select(9)
- r.swingDown()
- down()
- for i=1,3 do
- for i=1,3 do
- f1()
- end
- for i=1,3 do
- back()
- end
- turnLeft()
- end
- for i=1,5 do
- forward()
- end
- turnRight()
- for i=1,3 do
- forward()
- end
- turnLeft()
- for i=1,3 do
- forward()
- end
- turnLeft()
- forward()
- up()
- r.select(4)
- forward()
- place()
- back()
- place()
- down()
- back()
- r.place()
- turnRight()
- back()
- place()
- r.select(1)
- for i=1,2 do
- back()
- place(3)
- end
- turnRight()
- back()
- place(5)
- for i=1,2 do
- back()
- place(3)
- end
- turnLeft()
- back()
- place(4)
- for i=1,7 do
- back()
- place(3)
- end
- up()
- r.select(9)
- r.placeDown()
- r.select(1)
- turnLeft()
- for i=1,3 do
- forward()
- end
- turnRight()
- for i=1,3 do
- forward()
- end
- turnRight()
- down()
- forward()
- place(3)
- back()
- place(3)
- up()
- r.select(9)
- r.placeDown()
- r.select(1)
- up()
- for i=1,6 do
- forward()
- end
- turnAround()
- for i=1,2 do
- down()
- end
- forward()
- place(3)
- back()
- place(3)
- up()
- r.select(9)
- r.placeDown()
- r.select(2)
- turnLeft()
- for i=1,2 do
- forward()
- end
- turnRight()
- up()
- for i=1,2 do
- for o=1,4 do
- down()
- r.select(2)
- turnLeft()
- place()
- turnAround()
- place()
- turnLeft()
- up()
- r.select(16)
- turnLeft()
- place()
- turnAround()
- place()
- turnLeft()
- if o<4 then
- forward()
- end
- forward()
- end
- if i<2 then
- turnRight()
- for i=1,4 do
- forward()
- end
- turnRight()
- forward()
- end
- end
- forward()
- turnLeft()
- for i=1,3 do
- forward()
- end
- turnAround()
- for i=1,4 do
- for o=1,11 do
- if (o==1) or (o==6) or (o==11) then
- r.select(3)
- turnLeft()
- place()
- turnRight()
- end
- if o<11 then
- forward()
- end
- end
- r.select(i+4)
- turnRight()
- inv.equip()
- r.useDown()
- end
- r.select(15)
- inv.equip()
- for i=1,2 do
- turnRight()
- forward()
- if i==2 then
- forward()
- end
- end
- turnRight()
- while loc.x>0 do
- forward()
- end
- turnLeft()
- while loc.y>0 do
- forward()
- end
- down()
- for i=1,15 do
- r.select(i)
- r.drop()
- end
- turnAround()
- while loc.y<2 do
- forward()
- end
- turnRight()
- while loc.x<4 do
- forward()
- end
- turnLeft()
- r.select(1)
- loc = {x=0, y=0, z=0, b=0}
- function dom(noreturn)
- -- двигаемся домой
- local d = loc.b
- local p = loc.x
- local t = loc.y
- if loc.b ~= 2 then
- while loc.b ~= 2 do
- turnRight()
- end
- end
- if loc.x > 0 then
- turnRight()
- while loc.x > 0 do
- forward()
- end
- turnLeft()
- end
- while loc.y > 0 do
- forward()
- end
- while loc.z>0 do
- down()
- end
- turnLeft()
- -- выгрузка дерева
- for i=1,15 do
- r.select(i)
- if r.compareTo(16)==true then
- r.dropDown()
- else
- r.drop()
- end
- end
- -- забираем саженцы
- r.select(16)
- r.suckDown(64-r.count(16))
- -- зарядка
- while comp.energy() < 25000 do
- os.sleep(8)
- end
- turnLeft()
- -- возвращаемся если нет флага "в один конец"
- if not noreturn then
- while loc.z<2 do
- up()
- end
- while loc.y ~= t do
- forward()
- end
- if loc.x ~= p then
- turnRight()
- while loc.x ~=p do
- forward()
- end
- end
- if loc.b ~= d then
- while loc.b ~= d do
- turnLeft()
- end
- end
- end
- end
- -- Проверка условий, на возврат домой
- function usl()
- if r.count(15) > 32 then
- dom()
- end
- if r.count(16) < 8 then
- dom()
- end
- if comp.energy() < 11000 then
- dom()
- end
- end
- -- Робот определяет выросло ли дерево и рубит его
- function axe()
- if r.detect() == true then
- r.select(1)
- r.swing()
- forward()
- r.swingDown()
- -- робот рубит дерево
- while r.compareUp() == true do
- r.swingUp()
- up()
- end
- -- возвращается
- while loc.z ~= 2 do
- down()
- r.swingDown()
- end
- r.select(16)
- r.placeDown()
- r.select(1)
- back()
- end
- end
- -- ======================== Г Л А В Н Ы Й Ц И К Л ======================== --
- -- робот движется по полю по кругу,
- -- и рубит выросшие деревья
- while true do
- -- робот едет на стартовую позицию
- -- (левый передний угол поля)
- for i=1,2 do
- up()
- end
- for i=1,4 do
- forward()
- end
- -- проход по ферме
- for i=1, 8 do
- -- проверка дерева слева и справа
- usl()
- forward()
- turnLeft()
- axe()
- turnAround()
- axe()
- turnLeft()
- forward()
- -- если робот прошел первые 4 пары деревьев,
- -- движемся ко второму ряду
- if i == 4 then
- turnRight()
- for c=1, 4 do forward() end
- turnRight()
- end
- end
- -- робот возвращается домой
- -- (флаг true означает - в один конец)
- dom(true)
- -- робот спит и видит сны =)
- print('Progress of sleeping')
- for i=1,10 do
- os.sleep(72)
- print(i*10,' %')
- end
- term.clear()
- print('moving')
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement