ComputerCraft/Карьер

Программа карьера

Карьер — программа для черепашки, позволяющая выкапывать вертикальные туннели.

Код карьера, копающего 6x6 блоков (измените в loop ~= 3 на 2 строке число 3 на глубину карьера вниз):

loop = 0 while loop ~= 3 do a = 0 b = 0 c = 0 d = 0 turtle.digDown() turtle.down() while a ~= 5 do turtle.dig() turtle.forward() a = a + 1 end turtle.turnRight() while b ~= 5 do turtle.dig() turtle.forward() b = b + 1 end turtle.turnRight() while c ~= 5 do turtle.dig() turtle.forward() c = c + 1 end turtle.turnRight() while d ~= 4 do turtle.dig() turtle.forward() d = d + 1 end turtle.turnRight() e = 0 f = 0 g = 0 h = 0 while e ~= 4 do turtle.dig() turtle.forward() e = e + 1 end turtle.turnRight() while f ~= 3 do turtle.dig() turtle.forward() f = f + 1 end turtle.turnRight() while g ~= 3 do turtle.dig() turtle.forward() g = g + 1 end turtle.turnRight() while h ~= 2 do turtle.dig() turtle.forward() h = h + 1 end turtle.turnRight() turtle.dig() turtle.forward() turtle.dig() turtle.forward() turtle.turnRight() turtle.dig() turtle.forward() turtle.turnRight() turtle.dig() turtle.turnRight() turtle.dig() turtle.forward() turtle.forward() turtle.forward() turtle.forward() turtle.turnLeft() turtle.forward() turtle.forward() turtle.forward() turtle.turnRight() turtle.turnRight() a = 0 b = 0 c = 0 d = 0 e = 0 f = 0 g = 0 h = 0 loop = loop + 1 end 

Также в самой черепахе имеется список предустановленных программ и вместо всей написанной сверху лабуды можно набрать excavate 6. При этом если за спиной черепахи поставить сундук, то она будет возвращаться и складывать дроп. Копает до коренной породы.

Использованные методы:

Название метода Описание
turtle.forward() Передвигает черепашку на 1 блок вперёд.
turtle.down() Опускает черепашку на 1 блок вниз.
turtle.dig() Черепашка добывает блок перед собой (если его можно сломать этим инструментом).
turtle.digDown() Черепашка добывает блок под собой (если его можно сломать этим инструментом).
turtle.turnLeft() Поворачивает черепашку на 90 градусов влево.
turtle.turnRight() Поворачивает черепашку на 90 градусов вправо.

Программа для комнаты

Черепашка выкапывает комнату высотой в 2 блока и размером N*2 x А зигзагом. В 1 слот необходимо положить осыпающуюся породу (гравий, песок), которая встречается в данной местности. При необходимости программный код можно сократить.

n = 15 while n > 0 turtle.turnRight() if turtle.detect() then turtle.dig() end while turtle.compare() do turtle.dig() end turtle.forward() if turtle.detectUp() then turtle.digUp() end while turtle.compareUp() do turtle.digUp() end turtle.turnRight() a = 30 while a > 0 do if turtle.detect() then turtle.dig() end while turtle.compare() do turtle.dig() end turtle.forward() if turtle.detectUp() then turtle.digUp() end while turtle.compareUp() do turtle.digUp() end a=a-1 end turtle.turnLeft() if turtle.detect() then turtle.dig() end while turtle.compare() do turtle.dig() end turtle.forward() if turtle.detectUp() then turtle.digUp() end while turtle.compareUp() do turtle.digUp() end turtle.turnLeft() a = 30 while a > 0 do if turtle.detect() then turtle.dig() end while turtle.compare() do turtle.dig() end turtle.forward() if turtle.detectUp() then turtle.digUp() end while turtle.compareUp() do turtle.digUp() end a=a-1 end n=n-1 end 

Универсальная программа для копания кубических областей

Это универсальная программа для копания кубических областей любого размера. Ограничением является только вместительность топливного резервуара черепашки и дальность прогрузки чанков. Эта программа должна быть установлена на золотую черепашку для корректной работы встроенного интерфейса, но на обычных черепахах она тоже будет работать без ошибок. В интерфейсе программы можно настраивать размер области, направление копания (Вверх или Вниз), и необходимость складывать вещи из черепашки в сундук.

Внимание сундук должен быть установлен над черепашкой! Интерфейс программы:
Inter1.png
Inter2.png
Inter3.png

-- Variable section -- A1 = 1 A2 = 1 LineNum = 1 completed = 0 xcor = 0 zcor = 0 ycor = 1 zd = 0 yd = 0 xd = 0 r = 0 -- GUI -- term.clear() term.setCursorPos(1,1) print("Welcome to Digging programm!") sleep(0.5) write("X size(Forward): ") xs = read() xs = xs + 0 write("Z size(Right): ") zs = read() zs = zs + 0 write("Y size(Up/Down): ") ys = read() ys = ys + 0 print("Drop items in chest?") while A1 == 1 do if LineNum == 1 then term.clearLine(6) term.setCursorPos(1,6) print("[Yes] No ") elseif LineNum == 2 then term.clearLine(6) term.setCursorPos(1,6) print(" Yes [No]") end name,data = os.pullEvent() if name == "key" then if data == 28 then if LineNum == 1 then Chest = 1 A1 = 0 elseif LineNum == 2 then Chest = 0 A1 = 0 end end if data == 205 or data == 200 then LineNum = LineNum + 1 elseif data == 203 or data == 208 then LineNum = LineNum - 1 end end if name == "mouse_scroll" then if data == 1 then LineNum = LineNum + 1 elseif data == - 1 then LineNum = LineNum - 1 end end if LineNum == 3 then LineNum = 1 end if LineNum == 0 then LineNum = 2 end end LineNum = 1 while A2 == 1 do if LineNum == 1 then term.clearLine(7) term.setCursorPos(1,7) print("[Dig Up] Dig Down ") elseif LineNum == 2 then term.clearLine(7) term.setCursorPos(1,7) print(" Dig Up [Dig Down]") end name,data = os.pullEvent() if name == "key" then if data == 205 or data == 200 then LineNum = LineNum + 1 elseif data == 203 or data == 208 then LineNum = LineNum - 1 end if data == 28 then if LineNum == 1 then Dir = "up" A2 = 0 elseif LineNum == 2 then Dir = "down" A2 = 0 end end end if name == "mouse_scroll" then if data == 1 then LineNum = LineNum + 1 elseif data == -1 then LineNum = LineNum - 1 end end if LineNum == 3 then LineNum = 1 elseif LineNum == 0 then LineNum = 2 end end LineNum = 1 term.clear() term.setCursorPos(1,1) reqfuel = xs*zs*ys print("Minimum fuel required: ",reqfuel) turtle.select(1) turtle.refuel(10) fuel = turtle.getFuelLevel() print("Fuel : ",fuel) A3 = 0 if reqfuel > 100000 then print("Sorry but selected size is") print("too large :)") sleep(2,5) print("rebooting...") sleep(1.5) os.reboot() end if fuel < reqfuel then A3 = 1 end while A3 == 1 do term.clearLine(2) term.setCursorPos(1,2) print("Fuel: [",fuel,"/",reqfuel,"]") print("Place fuel in slot 1") turtle.select(1) turtle.refuel(10) fuel = turtle.getFuelLevel() if fuel >= reqfuel then term.clearLine(3) term.setCursorPos(1,3) A3 = 0 end end term.clearLine(2) term.clearLine(3) term.setCursorPos(1,3) print("X size : ",xs) print("Y size : ",ys) print("Z size : ",zs) write("Use chest : ") if Chest == 1 then print("Yes") 


elseif Chest == 0 then print("No") end print("Mining direction : ",Dir) print("To start press any botton...") print("To reboot press Ctrl...") name,data = os.pullEvent("key") if name == "key" and data == 29 then os.reboot() end size = xs * zs * ys local function monitor() term.clear() term.setCursorPos(1,1) rfuel = turtle.getFuelLevel() print("Fuel : ",rfuel) print("Position : "," X: ",xcor," Y: ",ycor," Z: ",zcor) end -- Mining section -- zcor = 1 completed = 0 finish = 0 A9 = 0 bd = 0 while finish == 0 do monitor() if Chest == 1 and turtle.getItemCount(16) > 0 then A9 = 1 xlcor = xcor zlcor = zcor ylcor = ycor if r == 0 then while xcor > 1 do if turtle.back() then xcor = xcor - 1 end end turtle.turnLeft() while zcor > 1 do if turtle.forward() then zcor = zcor - 1 end end while ycor > 1 do if Dir == "up" then if turtle.down() then ycor = ycor - 1 end elseif Dir == "down" then if turtle.up() then ycor = ycor - 1 end end end turtle.turnRight() end if r == 1 then turtle.turnRight() while zcor > 1 do if turtle.forward() then zcor = zcor - 1 end end turtle.turnLeft() while xcor > 1 do if turtle.forward() then xcor = xcor - 1 end end turtle.turnRight() turtle.turnRight() while ycor > 1 do if Dir == "up" then if turtle.down() then ycor = ycor - 1 end elseif Dir == "down" then if turtle.up() then ycor = ycor - 1 end end end end turtle.back() slotNum = 16 turtle.select(16) turtle.dropUp() while slotNum > 1 do slotNum = slotNum - 1 turtle.select(slotNum) turtle.dropUp() end turtle.forward() while xcor < xlcor do turtle.dig() if turtle.forward() then xcor = xcor + 1 end end turtle.turnRight() while zcor < zlcor do turtle.dig() if turtle.forward() then zcor = zcor + 1 end end if r == 0 then turtle.turnLeft() elseif r == 1 then turtle.turnRight() end while ycor < ylcor do if Dir == "up" then if turtle.up() then ycor = ycor + 1 end elseif Dir == "down" then if turtle.down() then ycor = ycor + 1 end end end end turtle.dig() if ys - yd > 1 and xcor > 0 then if Dir == "up" then turtle.digUp() elseif Dir == "down" then turtle.digDown() end end monitor() if finish == 0 and turtle.forward() then monitor() xd = xd + 1 if r == 0 then xcor = xcor + 1 elseif r == 1 then xcor = xcor - 1 end end if zd + 1 == zs and xd == xs then completed = 1 end if completed == 1 then if r == 0 then turtle.turnLeft() if ys - yd > 1 then if Dir == "up" then turtle.digUp() elseif Dir == "down" then turtle.digDown() end end monitor() while zcor > 1 do turtle.dig() if turtle.forward() then zcor = zcor - 1 end end turtle.turnLeft() while xcor > 1 do turtle.dig() if turtle.forward() then xcor = xcor - 1 end end turtle.turnLeft() turtle.turnLeft() end if r == 1 then r = 0 if ys - yd > 1 then if Dir == "up" then turtle.digUp() elseif Dir == "down" then turtle.digDown() end end turtle.turnRight() while zcor > 1 do if turtle.forward() then zcor = zcor - 1 end end turtle.turnRight() end if ys - yd > 1 then yd = yd + 2 elseif ys - yd == 1 then yd = yd + 1 end end monitor() if completed == 1 and yd < ys then xd = 1 zd = 0 zcor = 1 xcor = 1 completed = 0 ycor = ycor + 2 A8 = 1 if Dir == "up" then while A8 == 1 do turtle.digUp() if turtle.up() then A8 = 0 end end A8 = 1 while A8 == 1 do turtle.digUp() if turtle.up() then A8 = 0 end end elseif Dir == "down" then while A8 == 1 do turtle.digDown() if turtle.down() then A8 = 0 end end A8 = 1 while A8 == 1 do turtle.digDown() if turtle.down() then A8 = 0 end end end end monitor() if completed == 1 and yd == ys then print("completed!") while ycor > 1 do if Dir == "up" then turtle.digUp() if turtle.down() then ycor = ycor - 1 end elseif Dir == "down" then turtle.digDown() if turtle.up() then ycor = ycor - 1 end end end finish = 1 end if completed == 0 and xd == xs and r == 0 and zd<zs then if ys - yd > 1 then if Dir == "down" then turtle.digDown() elseif Dir == "up" then turtle.digUp() end end A4 = 1 xd = 1 r = 1 zd = zd + 1 zcor = zcor + 1 turtle.turnRight() while A4 == 1 do turtle.dig() if turtle.forward() then A4 = 0 end end turtle.turnRight() end if completed == 0 and xd == xs and r == 1 and zd < zs then if ys - yd > 1 then if Dir == "up" then turtle.digUp() elseif Dir == "down" then turtle.digDown() end end A5 = 1 xd = 1 r = 0 zd = zd + 1 zcor = zcor + 1 turtle.turnLeft() while A5 == 1 do turtle.dig() if turtle.forward() then A5 = 0 end end turtle.turnLeft() end monitor() end monitor() print("Completed!") 

Для большей информации см. Turtle API

В данной статье используются материалы из статьи «ComputerCraft/Карьер» с вики-сайта Minecraft Wiki, расположенного на Фэндоме, и они распространяются согласно лицензии Creative Commons Attribution-Share Alike. Авторы статьи.