diff --git a/turtle.lua b/turtle.lua index c9f2822..398e071 100644 --- a/turtle.lua +++ b/turtle.lua @@ -673,48 +673,55 @@ local function exploreStep() -- 75% of the time: horizontal exploration (forward movement + turns) if r < 75 then - -- Try to move forward - if not hasBlockForward or not forwardVisited then + -- Try to move forward if unvisited + if not forwardVisited then if hasBlockForward then smartDig("forward") end if smartForward() then - -- Successfully moved forward return end end - -- If forward is blocked or visited, try turning to find unvisited direction - if forwardVisited or hasBlockForward then - local turnAttempts = 0 - local bestDirection = nil - - -- Check all 4 directions to find best unvisited one - for i = 1, 4 do - if state.position then - local testPos = {x = state.position.x, y = state.position.y, z = state.position.z} - if facing == 0 then testPos.z = testPos.z - 1 - elseif facing == 1 then testPos.x = testPos.x + 1 - elseif facing == 2 then testPos.z = testPos.z + 1 - elseif facing == 3 then testPos.x = testPos.x - 1 - end - - if not hasVisited(testPos) then - -- Found unvisited direction! - if not turtle.inspect() then - smartForward() - return - end - end + -- If forward is visited, try to find an unvisited direction + local foundUnvisited = false + for i = 1, 4 do + if state.position then + local testPos = {x = state.position.x, y = state.position.y, z = state.position.z} + if facing == 0 then testPos.z = testPos.z - 1 + elseif facing == 1 then testPos.x = testPos.x + 1 + elseif facing == 2 then testPos.z = testPos.z + 1 + elseif facing == 3 then testPos.x = testPos.x - 1 end - -- Turn and check next direction - smartTurnRight() + if not hasVisited(testPos) then + -- Found unvisited direction! + local hasBlock = turtle.inspect() + if hasBlock then + smartDig("forward") + end + if smartForward() then + foundUnvisited = true + return + end + end end - -- All directions visited, just pick one and go - smartDig("forward") - smartForward() + -- Only turn if we haven't found a direction yet + if i < 4 then + smartTurnRight() + end + end + + -- If all directions visited, just move forward anyway (dig if needed) + if not foundUnvisited then + if hasBlockForward then + smartDig("forward") + end + if not smartForward() then + -- Can't move forward at all, turn once and try again next step + smartTurnRight() + end end -- 15% down (only if safe and not too deep)