Advertisement
MigukNamja

ComputerCraft Turtle Rectangle Dig

Aug 19th, 2013
247
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.29 KB | None | 0 0
  1. ----------------------------------
  2. -- Warning ! WORK IN PROGRESS ! --
  3. -- Has not been fully tested !  --
  4. ----------------------------------
  5. --
  6. -- MigukNamja's 1st Rectangle Dig Program
  7. -- Copyright 2013 MigukNamja
  8. --
  9.  
  10. -- Move forward 'blocks' number of blocks, digging when necessary
  11. -- Hitting bedrock or something undiggable like an entity (creature) will
  12. --   prevent forward movement
  13. --
  14. -- Return actual blocks moved forward
  15. function moveForward(blocks)
  16.   if blocks < 0 then return moveBack(0-blocks) end
  17.   if blocks == 0 then return 0 end
  18.  
  19.   local moved = 0
  20.  
  21.   while moved < blocks do
  22.     if turtle.forward() then -- air, nothing to dig, but go down
  23.       moved = moved + 1
  24.     elseif turtle.dig() then -- had to dig to go forwards
  25.       if not turtle.forward() then
  26.         local attempts = 0
  27.         while turtle.dig() and attempts < 20 do
  28.           attempts = attempts + 1 -- take care water won't cause infinite digging
  29.           sleep(0.25) -- might have to chew through a stack of sand or gravel
  30.         end
  31.        
  32.         if turtle.forward() then
  33.           moved = moved + 1
  34.         end
  35.       else
  36.         moved = moved + 1
  37.       end
  38.     else -- undiggable, give up (for now)
  39.       return moved
  40.     end
  41.    
  42.     sleep(0.25) -- sleep to avoid yielding error
  43.   end
  44.  
  45.   return moved
  46. end
  47.  
  48. -- Move backwards, digging when necessary
  49. function moveBack(blocks)
  50.   if blocks < 0 then return moveForward(0-blocks) end
  51.   if blocks == 0 then return 0 end
  52.  
  53.   local moved = 0
  54.  
  55.   turtle.turnRight()
  56.   turtle.turnRight()
  57.   moved = moveForward(blocks)
  58.   turtle.turnRight()
  59.   turtle.turnRight()
  60.  
  61.   return moved
  62. end
  63.  
  64. function usage()
  65.   print( "Usage: rectangle <blocks_forward> <blocks_right>" )
  66.   print( "Both values must be a least 1" )
  67. end
  68.  
  69. function parseArgs(args)
  70.   local validSyntax = false
  71.   local bForward = 0
  72.   local bRight = 0
  73.  
  74.   if #args ~= 2 then
  75.     return false
  76.   elseif args[1] == "help" then
  77.     return false
  78.   elseif args[1] == nil or args[2] == nil then
  79.     return false
  80.   else
  81.     bForward = tonumber( args[1] )
  82.     bRight   = tonumber( args[2] )
  83.        
  84.     if bForward <= 0 or bRight <= 0 then
  85.       validSyntax = false
  86.     else
  87.       validSyntax = true
  88.     end
  89.   end
  90.  
  91.   return validSyntax, bForward, bRight
  92. end
  93.  
  94. local tArgs = { ... }
  95. validSyntax, bForward, bRight = parseArgs(tArgs)
  96. if not validSyntax then
  97.   usage()
  98.   return
  99. end
  100.  
  101. print( "Digging ", bForward, " blocks forward and ", bRight, " blocks rightwards." )
  102.  
  103. local i = 0
  104. while i < bRight do
  105.  
  106.   if i == 0 then -- The 1st row is different because turtle starts 1 block behind dig area
  107.     -- Dig forward
  108.     assert( moveForward( bForward ) == bForward )  
  109.   else -- All other rows
  110.     -- Dig forward
  111.     assert( moveForward( bForward-1 ) == bForward-1 )
  112.   end
  113.  
  114.   -- Mark that row as done
  115.   i = i + 1
  116.  
  117.   if i >= bRight then -- Done ?
  118.      break
  119.   else -- Turn and get ready for next row
  120.     if i % 2 == 1 then -- Even rows, including the 0th row
  121.       turtle.turnRight()
  122.       assert( moveForward( 1 ) == 1 )
  123.       turtle.turnRight()
  124.     else -- Odd rows
  125.       turtle.turnLeft()
  126.       assert( moveForward( 1 ) == 1 )
  127.       turtle.turnLeft()
  128.     end
  129.   end  
  130. end
  131.  
  132. print( "I have finished the assigned task, my master !" )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement