2017-01-28 12 views
0

У меня квадратное поле квадрата 7x7. Я стараюсь как можно меньше двигаться, чтобы снизить расход топлива.Использование lua для программирования черепахи в Minecraft Computercraft для фермы с использованием координат

I find this path the easiest path

Как граф, я пытаюсь присвоить координаты в определенных точках. Я мог бы использовать голубую вещь посередине (воду) в качестве источника, но, похоже, это использование самого нижнего левого блока, поскольку начало также работает.

Это то, что я до сих пор:

Проблема, которую я имею, когда он собирается изменить строки. Самый простой способ - вернуться к минимуму x, который потребляет много топлива и времени. Есть ли способ, чтобы бот-черепаха знал, в каком направлении перейти к следующей строке?

+1

Что вы подразумеваете под «Я надеюсь увидеть, могу ли я использовать координаты чтобы привести мою черепаху туда, куда идти ». потому что в конце вы спрашиваете: «Проблема, с которой я сталкиваюсь, - это когда она изменит строки». не было бы самым простым способом сделать это как никто другой и слушать сигнал красного цвета под черепахой, который активирует ваш сценарий, а затем проходит через каждое поле и собирает его? Кстати, есть «IDE» для черепах, называемых черепахами. – 97hilfel

+0

Спасибо! Я исправил небольшую ошибку. Просто ради любопытства, есть ли способ сделать это полностью, просто программируя черепаху и не ощущая сигналы красного камня? –

+0

Я думаю, вы могли бы использовать внутренний таймер черепахи и/или wifi turtle – 97hilfel

ответ

2

Следующий код перемещает поле таким образом, который вы желаете. Хотя он прост, он работает, но может извлечь выгоду из некоторой абстракции, чтобы сделать ее пригодной для использования в других целях.

local rowSize = 7 
local colSize = 7 
local turnLeft = true 
local skipMove = false 

function goHome() 
    local r,c 
    turtle.turnLeft() 
    turtle.turnLeft() 
    for c=1,colSize-1 do 
     turtle.forward() 
    end 
    turtle.turnLeft() 
    for r=1,rowSize-1 do 
     turtle.forward() 
    end 
    turtle.turnLeft() 
    turtle.back() 

function harvestRow() 
    local c 
    for c=1,colSize do 
     if skipMove == true then 
     skipMove = false 
     else 
     turtle.forward() 
     end 

     turtle.digDown() 
    end 
end 

-- 
-- Move and orient turtle onto next row 
-- 
function nextRow() 
    if turnLeft == true then 
     turtle.turnLeft() 
     turtle.forward() 
     turtle.turnLeft() 
     turnLeft = false 
    else 
     turtle.turnRight() 
     turtle.forward() 
     turtle.turnRight() 
     turnLeft = true 
    end 
    skipMove = true 
end 

-- 
-- Call to start farming 
-- 
function harvestField() 
    local r 
    for r=1,rowSize do 
     harvestRow() 

     -- go to next row unless its the last 
     if r~=colSize then 
     nextRow() 
     end 
    end 
    goHome() 
end 

С наилучшими пожеланиями на ваших фермерских начинаниях и благодарят Вас за предоставленную возможность сдуть пыль с некоторыми старыми знаний Turtle API.

+0

Большое вам спасибо! Была небольшая ошибка, но, кроме этого, она работает очень хорошо. Перемена между левыми и правыми красиво прекрасна и вдохновила меня на другие проекты черепахи. –

+0

@m_cht Рад, что вы сочли это полезным. Какая была незначительная ошибка? Я что-то порвал, копируя копию в ответ? – Frelling

+0

В функции harvestRow() вы сделали «skipMove == false» вместо того, чтобы сделать его переменной. Правда, крошечная ошибка. Еще раз спасибо. –

1

Если это всегда будет 7x7 (или любая нечетная ширина), вы можете сделать дом для Черепахи на другой стороне. Таким образом, это не напрасно тратит топливо на проезд.

Для всех размеров вы также можете повернуть на основе четности строки (четной или нечетной). Если он всегда начинается в нижнем правом углу, он будет повернут налево после первого, сразу после второго и т. Д.:

rowCnt = 1; 
if rowCnt%2 == 0 then --even row number 
    turtle.turnRight() 
else --odd row number 
    turtle.turnLeft() 
end