The objective of our program is to make the turtle dig a tunnel of a specified length (passed as a command-line argument) and then return to the starting position. We will use a refueling function to ensure the turtle has enough fuel to complete the task.
Step 1: Writing the Program
Create a new program on your ComputerCraft computer and give it a name, for example, “tunneling_program.lua”.
-- Step 1.1: Read the command-line argument (length)
local length = ...
-- Step 1.2: Function to refuel the turtle to a specific level
local function refuelToLevel(level)
-- ... (code for refueling, see original program)
end
-- Step 1.3: Function to dig and move forward
local function digAndMove()
-- ... (code for digging and moving forward, see original program)
end
-- Step 1.4: Function to return the turtle to the starting position
local function returnToStart(length)
-- ... (code for returning to the starting position, see original program)
end
-- Step 1.5: Main program
local function main()
-- ... (code for the main program, see original program)
end
-- Step 1.6: Call the main function with the given length
main()
Step 2: Implementing the Refuel Function
In this step, we’ll implement the refuel function to ensure the turtle has enough fuel to complete the tunneling task.
-- Step 2.1: Read the command-line argument (length)
local length = ...
-- Step 2.2: Function to refuel the turtle to a specific level
local function refuelToLevel(level)
while turtle.getFuelLevel() < level do
turtle.select(1)
-- Assuming fuel items are in slot 1
turtle.refuel()
sleep(0.25)
end
end
-- Step 2.3: ... (rest of the code from previous steps)
Step 3: Implementing the digAndMove Function
In this step, we’ll implement the digAndMove function, which will make the turtle dig and move forward until it completes the specified tunnel length.
-- Step 3.1: Read the command-line argument (length)
local length = ...
-- Step 3.2: Function to refuel the turtle to a specific level
local function refuelToLevel(level)
-- ... (code for refueling, see Step 4)
end
-- Step 3.3: Function to dig and move forward
local function digAndMove()
while not turtle.forward() do
if turtle.detect() then
turtle.dig()
else
sleep(0.5)
-- Wait for something to move out of the way
end
end
turtle.digUp()
end
-- Step 3.4: ... (rest of the code from previous steps)
Step 4: Implementing the returnToStart Function
In this step, we’ll implement the returnToStart function, which will make the turtle return to the starting position after completing the tunnel.
-- Step 4.1: Read the command-line argument (length)
local length = ...
-- Step 4.2: Function to refuel the turtle to a specific level
local function refuelToLevel(level)
-- ... (code for refueling, see Step 2)
end
-- Step 4.3: Function to dig and move forward
local function digAndMove()
-- ... (code for digging and moving forward, see Step 5)
end
-- Step 4.4: Function to return the turtle to the starting position
local function returnToStart(length)
turtle.turnLeft()
turtle.turnLeft()
for i=1, length do
while not turtle.forward() do
turtle.dig()
sleep(0.5)
-- Wait for something to move out of the way
end
end
turtle.turnLeft()
turtle.turnLeft()
end
-- Step 4.5: ... (rest of the code from previous steps)
Step 5: Implementing the Main Function
In this step, we’ll implement the main function, which will be the entry point of our program.
-- Step 5.1: Read the command-line argument (length)
local length = ...
-- Step 5.2: Function to refuel the turtle to a specific level
local function refuelToLevel(level)
-- ... (code for refueling, see Step 2)
end
-- Step 5.3: Function to dig and move forward
local function digAndMove()
-- ... (code for digging and moving forward, see Step 3)
end
-- Step 5.4: Function to return the turtle to the starting position
local function returnToStart(length)
-- ... (code for returning to the starting position, see Step 4)
end
-- Step 5.5: Main program
local function main()
-- Check if we have enough fuel to complete the task
local fuelNeeded = length * 2
refuelToLevel(fuelNeeded)
-- Dig and move forward 'length' times
for i=1, length do
digAndMove()
end
-- Return to the starting position
returnToStart(length)
end
-- Step 5.6: Call the main function with the given length
main()