Minecraft Lua Computercraft Turtle脚本中的变量作用域或竞争条件

我为Mining Turtle创建了以下脚本:

--Strip mining turtle program test
--基于Gabriel *******(Spirr0u)的stripmining程序

function excarvateRectangle(size,looptimes)
    print("挖掘 "..size .. " with looptimes "..looptimes)
    if size > 0 then
        for i=1, looptimes, 1 do
            for z=1, size, 1 do
                turtle.dig()
                sleep(1)
                turtle.forward()
            end
            turtle.turnRight()
        end
        onesmaller = size-1
        excarvateRectangle(onesmaller,2)
    end
end

function goBackToStart(size2)
    print("返回 "..size2)

    -- 像楼梯一样返回,以转数为大小
    if size2 % 2 == 0 then
        turnAround()
    end

    dir=0
    for z=1, size2, 1 do
        turtle.forward()
        if dir == 0 then
            turtle.turnLeft()
            dir = 1
        else
            turtle.turnRight()
            dir = 0
        end
    end

   -- 按正确的方向旋转
    if size2 % 2 > 0 then
        turtle.turnRight()
    end
    turtle.turnRight()
end

function digHole(origsize, depth)
    for g=1, depth, 1 do
        size = origsize
        excarvateRectangle(size,3)
        sleep(3)
        goBackToStart(origsize)
        turtle.digDown()
        turtle.down()
    end
    for g=1, depth, 1 do
        turtle.up()
    end
end

function checkFuel()
  while turtle.getFuelLevel() <= 50 do
    turtle.select(15)
    turtle.refuel(1)
    turtle.select(1)
  end
end

function turnAround()
  turtle.turnRight()
  turtle.turnRight()
end

-- 主函数
print("15槽中的燃料")
print("输入矩形尺寸:")
origsize = io.read()
origsize = origsize +0

print("输入深度:")
depth = io.read()
depth = depth +0

checkFuel()
 digHole(origsize, depth)
print("完成")

测试时将大小设置为5,深度设置为2。它应该挖掘5×5块,深度为2块。

发生了什么: 这只乌龟能像螺旋形一样挖出一个矩形区域。然后它从螺旋的中心回到起始位置。 接下来,它向下走一步并重新开始“深度”次。 但是,当它第二次返回起始位置时,它显示了奇怪的行为。它不再以“来回左来回右”的方式行进,而是在左右移动额外一个步骤后停止,然后以某种方式掉头结束。

我已经认为可能是作用域并重命名了变量。我添加了变量的调试输出。一切似乎都是正确的。我无法找出那里出了什么问题。我猜这可能是个竞态条件。

任何帮助将不胜感激。

谢谢,Boris

点赞