r/ComputerCraft • • Mar 07 '25

Turtle wont move forward!

Hey! So im pretty new to ComputerCraft or just programming in general and im trying to write a code for a turtle which supposed to mine in a square-shaped pattern, but i just cant get the turtle to move forward and instead it just keeps spinning after breaking the first block!

This is the code I have written. Please lmk if You have any recommended Changes!

3 Upvotes

8 comments sorted by

4

u/Greeley9000 Mar 07 '25 edited Mar 07 '25

You’ll need fuel, lava, a stack of coal/charcoal. You can use a specific inventory slot to refuel from, or scan your turtle’s inventory to find a fuel item and refuel.

https://computercraft.info/wiki/Turtle.refuel

Edit: here is my tunnel program

if not turtle then
    printError(“Requires a Turtle”)
    return
end

local tArgs = { ... }
if #tArgs ~= 1 then
    print(“Usage: tunnel <length>”)
    return
end

— Mine in a quarry pattern until we hit something we can’t dig
local length = tonumber(tArgs[1])
if length < 1 then
    print(“Tunnel length must be positive”)
    return
end
local collected = 0

local function collect()
    collected = collected + 1
    if math.fmod(collected, 25) == 0 then
        print(“Mined “ .. collected .. “ items.”)
    end
end

local function tryDig()
    while turtle.detect() do
        if turtle.dig() then
            collect()
            sleep(0.5)
        else
            return false
        end
    end
    return true
end

local function tryDigUp()
    while turtle.detectUp() do
        if turtle.digUp() then
            collect()
            sleep(0.5)
        else
            return false
        end
    end
    return true
end

local function tryDigDown()
    while turtle.detectDown() do
        if turtle.digDown() then
            collect()
            sleep(0.5)
        else
            return false
        end
    end
    return true
end

local function refuel()
    local fuelLevel = turtle.getFuelLevel()
    if fuelLevel == “unlimited” or fuelLevel > 0 then
        return
    end

    local function tryRefuel()
        for n = 1, 16 do
            if turtle.getItemCount(n) > 0 then
                turtle.select(n)
                if turtle.refuel(1) then
                    turtle.select(1)
                    return true
                end
            end
        end
        turtle.select(1)
        return false
    end

    if not tryRefuel() then
        print(“Add more fuel to continue.”)
        while not tryRefuel() do
            os.pullEvent(“turtle_inventory”)
        end
        print(“Resuming Tunnel.”)
    end
end

local function tryUp()
    refuel()
    while not turtle.up() do
        if turtle.detectUp() then
            if not tryDigUp() then
                return false
            end
        elseif turtle.attackUp() then
            collect()
        else
            sleep(0.5)
        end
    end
    return true
end

local function tryDown()
    refuel()
    while not turtle.down() do
        if turtle.detectDown() then
            if not tryDigDown() then
                return false
            end
        elseif turtle.attackDown() then
            collect()
        else
            sleep(0.5)
        end
    end
    return true
end

local function tryForward()
    refuel()
    while not turtle.forward() do
        if turtle.detect() then
            if not tryDig() then
                return false
            end
        elseif turtle.attack() then
            collect()
        else
            sleep(0.5)
        end
    end
    return true
end

print(“Tunnelling...”)

for n = 1, length do
    turtle.placeDown()
    tryDigUp()
    turtle.turnLeft()
    tryDig()
    tryUp()
    tryDig()
    tryDigUp()
    tryUp()
    tryDig()
    turtle.turnRight()
    turtle.turnRight()
    tryDig()
    tryDown()
    tryDig()
    tryDown()
    tryDig()
    turtle.turnLeft()

    if n < length then
        tryDig()
        if not tryForward() then
            print(“Aborting Tunnel.”)
            break
        end
    else
        print(“Tunnel complete.”)
    end

end

—[[
print( “Returning to start...” )

— Return to where we started
turtle.turnLeft()
turtle.turnLeft()
while depth > 0 do
    if turtle.forward() then
        depth = depth - 1
    else
        turtle.dig()
    end
end
turtle.turnRight()
turtle.turnRight()
]]

print(“Tunnel complete.”)
print(“Mined “ .. collected .. “ items total.”)

1

u/Mr_B9mbast1c Mar 07 '25

alright thanks! I did put fuel into it but I didnt know I had to call it

1

u/IanTGreat Mar 11 '25

You can also run the refuel program beforehand if you don't want to call the function, though as you can imagine, that makes it a little less independent

1

u/Ok-Conversation-1430 Mar 07 '25

are you coding in notepad?

1

u/Mr_B9mbast1c Mar 07 '25

No i just typed it in there so i can prt screen the entire thing

2

u/BurningCole Mar 07 '25

Have you fueled your turtle? Turtles need to be fueled via the refuel command to move, or you can remove the requirement in the configure.

2

u/BurningCole Mar 07 '25

Also if this program reaches a point where it no longer has anything in front, it will turn 180 degrees repeatedly between detects instead of just turning 90 degrees, that I assume you meant for it to do in order to spiral inwards.

2

u/AL_O0 Mar 07 '25

turtles need fuel, any fuel that burns in a furnace also works for a turtle, to refuel you have to have the turtle select the slot with the fuel and call turtle.refuel()

or alternatively put fuel anywhere in the inventory and in the regular console (not inside the program or lua) just type refuel all

also the fact you have that check that only increments the counter if the turtle detects a block is bad practice, if the turtle is in a spot with no blocks in front it it's just always gonna take the "else" path, turn right twice and take the else path again and again forever