Advertisement
ivan52

builder

Apr 8th, 2015
338
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 10.22 KB | None | 0 0
  1. local r = require('robot')
  2. local comp = require('computer')
  3. local term = require('term')
  4. local sides = require('sides')
  5. local inv = require('component').inventory_controller
  6. function place(a)
  7.   while not r.place(a) do
  8.     r.swing()
  9.   end
  10. end
  11. loc = {x=0, y=0, z=0, b=0}
  12. function f1()
  13.   local bl,en = r.swing()
  14.   while en ~='block' do
  15.    r.swing()
  16.    bl,en = r.swing()
  17.   end
  18.   forward()
  19. end
  20. function forward()
  21.   os.sleep(0.2)
  22.      while not r.forward() do
  23.        r.swing()
  24.      end
  25.     if loc.b == 0 then loc.y = loc.y+1
  26.     elseif loc.b == 1 then loc.x = loc.x+1
  27.     elseif loc.b == 2 then loc.y = loc.y-1
  28.     else loc.x = loc.x-1 end
  29.     return true
  30. end
  31. function back()
  32.   os.sleep(0.2)
  33.   while not r.back() do
  34.    os.sleep(0.2)
  35.   end
  36.     if loc.b == 0 then loc.y = loc.y-1
  37.     elseif loc.b == 1 then loc.x = loc.x-1
  38.     elseif loc.b == 2 then loc.y = loc.y+1
  39.     else loc.x = loc.x+1 end
  40.     return true
  41. end
  42. function up()
  43.   os.sleep(0.2)
  44.   while not r.up() do
  45.     r.swingUp()
  46.   end
  47.   loc.z = loc.z+1
  48.   return true
  49. end
  50. function down()
  51.   os.sleep(0.2)
  52.   while not r.down() do
  53.     r.swingDown()
  54.   end
  55.   loc.z = loc.z-1
  56.   return true
  57. end
  58. function turnRight()
  59.   loc.b = (loc.b+1)%4
  60.   r.turnRight()
  61. end
  62. function turnAround()
  63.   loc.b = (loc.b+2)%4
  64.   r.turnAround()
  65. end
  66. function turnLeft()
  67.   loc.b = (loc.b+3)%4
  68.   r.turnLeft()
  69. end
  70.  
  71.  
  72. function d1()
  73.   local d = loc.b
  74.   local p = loc.x
  75.   local t = loc.y
  76.   local g = loc.z
  77.   if loc.b ~= 2 then
  78.     while loc.b ~= 2 do
  79.       turnRight()
  80.     end
  81.   end
  82.   if loc.z>0 then
  83.     while loc.z > 0 do
  84.       down()
  85.     end
  86.   end
  87.   if loc.z < 0 then
  88.     while loc.z < 0 do
  89.       up()
  90.     end
  91.   end
  92.   if loc.x > 0 then
  93.     turnRight()
  94.     while loc.x > 0 do
  95.       forward()
  96.     end
  97.     turnLeft()
  98.   end
  99.   while loc.y > 0 do
  100.     forward()
  101.   end
  102.   while comp.energy() < 100000 do
  103.     os.sleep(8)
  104.   end
  105.  turnRight()
  106.  for i=9,11 do
  107.    r.select(i)
  108.    r.drop()
  109.  end
  110.  for i=1,8 do
  111.    r.select(i)
  112.    r.suck(64-r.count(i))
  113.  end
  114.   turnRight()
  115.      while loc.y ~= t do
  116.       forward()
  117.     end
  118.     if loc.x ~= p then
  119.       turnRight()
  120.       while loc.x ~=p do
  121.         forward()
  122.       end
  123.     end
  124.     if loc.b ~= d then
  125.       while loc.b ~= d do
  126.         turnLeft()
  127.       end
  128.     end
  129.     if g<0 then
  130.       while loc.z>g do
  131.         down()
  132.       end
  133.     end
  134.     if g>0 then
  135.       while loc.z<g do
  136.         up()
  137.       end
  138.     end
  139. end
  140.  
  141.  
  142. function t()
  143.   local bl,en=r.detectUp()
  144.   if en == 'solid' then
  145.       while (en=='solid') and (loc.z<10) do
  146.         up()
  147.         r.swingUp()
  148.         bl,en=r.detectUp()
  149.       end
  150.       while loc.z>0 do
  151.         down()
  152.       end
  153.    end
  154.    local bl,en = r.detectDown()
  155.   if en ~= 'solid' then
  156.    while en ~= 'solid' do
  157.      down()
  158.      bl,en = r.detectDown()
  159.    end
  160.    while loc.z<-1 do
  161.      up()
  162.      inventar()
  163.      r.placeDown()
  164.    end
  165.    up()
  166.  end
  167.  r.select(16)
  168.  if (r.compareDown()==false) or (r.detectDown()==false) then
  169.     os.sleep(0.2)
  170.     r.swingDown()
  171.     os.sleep(0.2)
  172.     inv1()
  173.   end
  174. end
  175.  
  176.  
  177. function inv1()
  178. r.select(12)
  179. if r.count()==0 then
  180.   local b = 12
  181.   while (r.count() == 0) and (b <=16) do
  182.     r.select(b)  
  183.     b=b+1
  184.   end
  185. end
  186. r.placeDown()
  187. r.select(a)
  188. end
  189.  
  190.  
  191. function inventar()
  192.   r.select(1)
  193.   if r.count(1)==0
  194.     then
  195.     a = 1
  196.     while (r.count() == 0) and (a <=11) do
  197.       r.select(a)  
  198.       a=a+1
  199.     end
  200.   end
  201.   if r.count() == 0 then
  202.     d1()
  203.   end
  204. end
  205.  
  206.  
  207.  
  208. t()
  209.   for o=1,6 do
  210.     for i=1,16 do
  211.       r.swing()
  212.       forward()
  213.       t()
  214.     end
  215.     if o <= 6 then
  216.       turnRight()
  217.       r.swing()
  218.       forward()
  219.       t()
  220.       turnRight()
  221.     end
  222.   for i=1,16 do
  223.     r.swing()
  224.     forward()
  225.     t()
  226.   end
  227.   turnLeft()
  228.   r.swing()
  229.   forward()
  230.   t()
  231.   turnLeft()
  232.   end
  233.   for i=1,16 do
  234.     r.swing()
  235.     forward()
  236.     t()
  237.   end
  238.   up()
  239.   for i=1,4 do
  240.     turnLeft()
  241.     for i=1,12 do
  242.       forward()
  243.       inv1()
  244.     end
  245.   end
  246.   if loc.b ~= 2 then
  247.     while loc.b ~= 2 do
  248.       turnRight()
  249.     end
  250.   end
  251.   if loc.x > 0 then
  252.     turnRight()
  253.     while loc.x > 0 do
  254.       forward()
  255.     end
  256.     turnLeft()
  257.   end
  258.   while loc.y > 0 do
  259.     forward()
  260.   end
  261.   down()
  262.   turnRight()
  263.   for i=1,16 do
  264.     r.select(i)
  265.     os.sleep(0.2)
  266.     r.drop()
  267.   end
  268.   turnLeft()
  269.   r.select(1)
  270.   for i=1,8 do
  271.     os.sleep(0.2)
  272.     r.suck()
  273.   end
  274.   r.select(16)
  275.   r.suck()
  276.   r.select(4)
  277.   turnAround()
  278.   up()
  279.   for i=1,10 do
  280.     forward()
  281.   end
  282.   turnRight()
  283.   for i=1,6 do
  284.     forward()
  285.   end
  286.   down()
  287.   r.select(9)
  288.   r.swingDown()
  289.   down()
  290.   for i=1,3 do
  291.     for i=1,3 do
  292.       f1()
  293.     end
  294.     for i=1,3 do
  295.       back()
  296.     end
  297.     turnLeft()
  298.   end
  299.   for i=1,5 do
  300.     forward()
  301.   end
  302.   turnRight()
  303.   for i=1,3 do
  304.     forward()
  305.   end
  306.   turnLeft()
  307.   for i=1,3 do
  308.     forward()
  309.   end
  310.   turnLeft()
  311.   forward()
  312.   up()
  313.   r.select(4)
  314.   forward()
  315.     place()
  316.     back()
  317.     place()
  318.   down()
  319.   back()
  320.   r.place()
  321.   turnRight()
  322.   back()
  323.   place()
  324.   r.select(1)
  325.   for i=1,2 do
  326.     back()
  327.     place(3)
  328.   end
  329.   turnRight()
  330.   back()
  331.   place(5)
  332.   for i=1,2 do
  333.     back()
  334.     place(3)
  335.   end
  336.   turnLeft()
  337.   back()
  338.   place(4)
  339.   for i=1,7 do
  340.     back()
  341.     place(3)
  342.   end
  343.   up()
  344.   r.select(9)
  345.   r.placeDown()
  346.   r.select(1)
  347.   turnLeft()
  348.   for i=1,3 do
  349.     forward()
  350.   end
  351.   turnRight()
  352.   for i=1,3 do
  353.     forward()
  354.   end
  355.   turnRight()
  356.   down()
  357.   forward()
  358.   place(3)
  359.   back()
  360.   place(3)
  361.   up()
  362.     r.select(9)
  363.     r.placeDown()
  364.     r.select(1)
  365.   up()
  366.   for i=1,6 do
  367.     forward()
  368.   end
  369.   turnAround()
  370.   for i=1,2 do
  371.      down()
  372.   end
  373.   forward()
  374.     place(3)
  375.     back()
  376.     place(3)
  377.   up()
  378.   r.select(9)
  379.   r.placeDown()
  380.   r.select(2)
  381.   turnLeft()
  382.   for i=1,2 do
  383.     forward()
  384.   end
  385.   turnRight()
  386.   up()
  387.   for i=1,2 do
  388.     for o=1,4 do
  389.       down()
  390.       r.select(2)
  391.       turnLeft()
  392.       place()
  393.       turnAround()
  394.       place()
  395.       turnLeft()
  396.       up()
  397.       r.select(16)
  398.       turnLeft()
  399.       place()
  400.       turnAround()
  401.       place()
  402.       turnLeft()
  403.       if o<4 then
  404.         forward()
  405.       end
  406.       forward()
  407.     end
  408.       if i<2 then
  409.         turnRight()
  410.         for i=1,4 do
  411.           forward()
  412.         end
  413.         turnRight()
  414.         forward()
  415.       end
  416.   end  
  417.   forward()
  418.   turnLeft()
  419.   for i=1,3 do
  420.     forward()
  421.   end
  422.   turnAround()
  423.   for i=1,4 do
  424.     for o=1,11 do
  425.       if (o==1) or (o==6) or (o==11) then
  426.         r.select(3)
  427.         turnLeft()
  428.         place()
  429.         turnRight()
  430.        end
  431.        if o<11 then
  432.          forward()
  433.        end
  434.     end
  435.     r.select(i+4)
  436.     turnRight()
  437.     inv.equip()
  438.     r.useDown()
  439.    end
  440.    r.select(15)
  441.    inv.equip()
  442.    for i=1,2 do
  443.      turnRight()
  444.      forward()
  445.      if i==2 then
  446.        forward()
  447.      end
  448.    end
  449.    turnRight()
  450.    while loc.x>0 do
  451.      forward()
  452.    end
  453.    turnLeft()
  454.    while loc.y>0 do
  455.      forward()
  456.    end
  457.    down()
  458.    for i=1,15 do
  459.      r.select(i)
  460.      r.drop()
  461.    end
  462.    turnAround()
  463.    while loc.y<2 do
  464.      forward()
  465.    end
  466.    turnRight()
  467.    while loc.x<4 do
  468.      forward()
  469.    end
  470.    turnLeft()
  471.    r.select(1)
  472.    loc = {x=0, y=0, z=0, b=0}
  473. function dom(noreturn)
  474.   -- двигаемся домой
  475.   local d = loc.b
  476.   local p = loc.x
  477.   local t = loc.y
  478.   if loc.b ~= 2 then
  479.     while loc.b ~= 2 do
  480.       turnRight()
  481.     end
  482.   end
  483.   if loc.x > 0 then
  484.     turnRight()
  485.     while loc.x > 0 do
  486.       forward()
  487.     end
  488.     turnLeft()
  489.   end
  490.   while loc.y > 0 do
  491.     forward()
  492.   end
  493.   while loc.z>0 do
  494.     down()
  495.   end
  496.   turnLeft()
  497.  
  498.   -- выгрузка дерева
  499.   for i=1,15 do
  500.     r.select(i)
  501.     if r.compareTo(16)==true then
  502.       r.dropDown()
  503.     else
  504.       r.drop()
  505.     end
  506.   end
  507.  
  508.   -- забираем саженцы
  509.   r.select(16)
  510.   r.suckDown(64-r.count(16))
  511.  
  512.   -- зарядка
  513.   while comp.energy() < 25000 do
  514.     os.sleep(8)
  515.   end
  516.   turnLeft()
  517.   -- возвращаемся если нет флага "в один конец"
  518.   if not noreturn then
  519.     while loc.z<2 do
  520.       up()
  521.     end
  522.     while loc.y ~= t do
  523.       forward()
  524.     end
  525.     if loc.x ~= p then
  526.       turnRight()
  527.       while loc.x ~=p do
  528.         forward()
  529.       end
  530.     end
  531.     if loc.b ~= d then
  532.       while loc.b ~= d do
  533.         turnLeft()
  534.       end
  535.     end
  536.   end
  537. end
  538.  
  539. -- Проверка условий, на возврат домой
  540. function usl()
  541.   if r.count(15) > 32 then
  542.     dom()
  543.   end
  544.   if r.count(16) < 8 then
  545.     dom()
  546.   end
  547.   if comp.energy() < 11000 then
  548.     dom()
  549.   end
  550. end
  551.  
  552. -- Робот определяет выросло ли дерево и рубит его
  553. function axe()
  554.  if r.detect() == true then
  555.     r.select(1)
  556.     r.swing()
  557.     forward()
  558.     r.swingDown()
  559.     -- робот рубит дерево
  560.     while r.compareUp() == true do
  561.       r.swingUp()
  562.       up()
  563.     end
  564.     -- возвращается
  565.     while loc.z ~= 2 do
  566.       down()
  567.       r.swingDown()
  568.     end
  569.    
  570.     r.select(16)
  571.     r.placeDown()
  572.     r.select(1)
  573.     back()
  574.   end
  575. end
  576.  
  577.  
  578. -- ======================== Г Л А В Н Ы Й   Ц И К Л ======================== --
  579.  
  580. -- робот движется по полю по кругу,
  581. -- и рубит выросшие деревья
  582. while true do
  583.   -- робот едет на стартовую позицию
  584.   -- (левый передний угол поля)
  585.   for i=1,2 do
  586.     up()
  587.   end
  588.   for i=1,4 do
  589.     forward()
  590.   end
  591.  
  592.   -- проход по ферме
  593.   for i=1, 8 do
  594.     -- проверка дерева слева и справа
  595.     usl()
  596.     forward()
  597.     turnLeft()
  598.     axe()
  599.     turnAround()
  600.     axe()
  601.     turnLeft()
  602.     forward()
  603.    
  604.     -- если робот прошел первые 4 пары деревьев,
  605.     -- движемся ко второму ряду
  606.     if i == 4 then
  607.       turnRight()
  608.       for c=1, 4 do forward() end
  609.       turnRight()
  610.     end
  611.   end
  612.  
  613.   -- робот возвращается домой
  614.   -- (флаг true означает - в один конец)
  615.   dom(true)
  616.  
  617.   -- робот спит и видит сны =)
  618.   print('Progress of sleeping')
  619.   for i=1,10 do
  620.     os.sleep(72)
  621.     print(i*10,' %')
  622.   end
  623.   term.clear()
  624.   print('moving')
  625. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement