Advertisement
Inumaru

Lesorub by Inumaru

May 28th, 2014
752
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 4.16 KB | None | 0 0
  1. local component = require("component")
  2. local robot = require("robot")
  3. local shell = require("shell")
  4.  
  5. -- Проверка робот ли используется
  6. if not component.isAvailable("robot") then
  7.   io.stderr:write("can only run on robots")
  8.   return
  9. end
  10. -- Проверка параметров запуска
  11. local args, options = shell.parse(...)
  12. if #args < 1 then
  13.   io.write("Zapusk: lesorub <razmer>\n")
  14.   return
  15. end
  16. -- Проверка корректности ввода размера при старте
  17. local size = tonumber(args[1])
  18. if not size then
  19.   io.stderr:write("razmer ne zadan")
  20.   return
  21. end
  22. local crona = tonumber(args[2])
  23. -- Переменные
  24. local x, y, z, f = 0, 0, 0, 0
  25. -- Осн функция
  26. function lesorub()
  27.     -- проверка наличия помех сверху при старте
  28.     if sverhuDerevo() and robot.swingUp == false then
  29.         io.write("Problema nad robotom!")
  30.         return false
  31.     end
  32.     robot.up()
  33.    
  34.     for i = 1, size do
  35.         for j = 1, size - 1 do
  36.             if vperediDerevo() then
  37.                 if rubiDerevo() == false then
  38.                     io.write("Ne mogu ubrat blok. Error code 1!")
  39.                     return false
  40.                 end
  41.             else
  42.                 robot.forward()
  43.             end        
  44.            
  45.             if i % 2 == 1 then
  46.                 y = y + 1
  47.             else
  48.                 y = y - 1
  49.             end
  50.            
  51.         end
  52.        
  53.         povorot(i)
  54.        
  55.         if vperediDerevo() then
  56.             if rubiDerevo() == false then
  57.                 io.write("Ne mogu ubrat blok. Error code 2!")
  58.                 return false
  59.             end
  60.         else
  61.             robot.forward()
  62.         end
  63.        
  64.         x = x + 1
  65.         povorot(i)
  66.     end
  67.    
  68.     if idiNa(0, 0) == false then
  69.         io.write("Ne mogu doiti!")
  70.         return false
  71.     end
  72.        
  73.     nukaVniz() 
  74.     kidaiLut() 
  75.     smotriNa(0)
  76.     print( robot.level() )
  77.     return true
  78. end
  79. -- Детект дерева спереди
  80. function vperediDerevo()
  81.     local detect, reason = robot.detect()
  82.     if detect and reason == "solid" then
  83.         return true
  84.     elseif detect and reason == "entity" then
  85.         return vperediDerevo()
  86.     end
  87.     return false
  88. end
  89. -- Детект дерева сверху
  90. function sverhuDerevo()
  91.     local detect, reason = robot.detectUp()
  92.     if detect and reason == "solid" then
  93.         return true
  94.     elseif detect and reason == "entity" then
  95.         return sverhuDerevo()
  96.     end
  97.     return false
  98. end
  99. -- Руби
  100. function rubi()
  101.     if robot.swing() == false  then
  102.         rubi();
  103.     end
  104. end
  105. -- Пытайся идти вперед
  106. function vpered()
  107.     if robot.forward() == false then
  108.         robot.swing()
  109.         vpered()
  110.     end
  111. end
  112. -- Рубка дерева
  113. function rubiDerevo()
  114.     rubi() 
  115.     vpered()   
  116.     robot.swingDown()
  117.     while sverhuDerevo() do
  118.         robot.swingUp()
  119.         robot.up()
  120.         z = z + 1
  121.        
  122.         if crona and crona ~= 0 then
  123.             for k = 1, 4 do
  124.                 if robot.detect() then
  125.                     rubi()
  126.                     if robot.forward() then
  127.                         rubi()
  128.                         robot.back()
  129.                     end
  130.                    
  131.                 end
  132.                 robot.turnRight()
  133.             end
  134.         end
  135.     end
  136.     while z > 0 do
  137.         nukaVniz();
  138.         z = z - 1
  139.     end
  140.     robot.placeDown()
  141. end
  142. -- Функция спуска вниз, с проверкой
  143. function nukaVniz()
  144.     if robot.down() == false then
  145.         robot.swingDown();
  146.         nukaVniz()
  147.     end
  148. end
  149. -- Функция поворота
  150. function povorot( some )
  151.     if some % 2 == 1 then
  152.         robot.turnRight()
  153.         f = f + 1
  154.     else
  155.         robot.turnLeft()
  156.         f = f - 1
  157.     end
  158. end
  159. -- Вываливаем все в сундук
  160. function kidaiLut()
  161.     for k = 2, 16 do
  162.         robot.select(k)
  163.         robot.drop()
  164.     end
  165.    
  166.     robot.select(1)
  167. end
  168. -- Заставляем робота смотреть в нужную нам сторону
  169. function smotriNa( some )
  170.     while f ~= some do
  171.         if f > some then
  172.             robot.turnLeft()
  173.             f = f - 1
  174.         else
  175.             robot.turnRight()
  176.             f = f + 1
  177.         end
  178.     end
  179. end
  180. -- Заставляем робота идти в указанную координату
  181. function idiNa( nX, nY )
  182.     smotriNa(-1)
  183.     while x ~= nX do
  184.         if vperediDerevo() then
  185.             if rubiDerevo() == false then
  186.                 io.write("Ne mogu ubrat blok. Error code 3!")
  187.                 return false
  188.             end
  189.         else
  190.             vpered()
  191.         end
  192.         x = x - 1
  193.     end
  194.     smotriNa(-2)
  195.     while y ~= nY do
  196.         if vperediDerevo() then
  197.             if rubiDerevo() == false then
  198.                 io.write("Ne mogu ubrat blok. Error code 4!")
  199.                 return false
  200.             end
  201.         else
  202.             vpered()
  203.         end
  204.         y = y - 1
  205.     end
  206. end
  207.  
  208. repeat until not lesorub()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement